对于一个机器人项目,我组装了一个 make 目标,它使用dd
(实际上是dcfldd
)将 Raspbian Jessie 映像写入 SD 卡。这样,我可以确保我的环境可以在任何时候从头开始重现。
make 目标只是
flash:
sudo dcfldd bs=4M if=$(IMGPATH) of=$(SDX)
sync
其中$(SDX)
是 /dev/sdc,并且意味着前面有一个脚本,该脚本将图像挂载在 /mnt/img,进行一些修改,调用sync
,然后卸载它。
整个过程似乎运行良好,只是我总是需要调用两次 make 目标 - 第一次,如果我正确弹出整个读卡器然后重新插入它,则映像中的两个分区之一将无法挂载,并且,如果我尝试从它启动 Raspberry Pi,我会得到一个内核恐慌。
尝试刷新卡(使用 Make 目标或在终端中手动操作)后,使用 Ubuntu 的“弹出父驱动器”启动器上下文菜单选项弹出,移除并重新插入读卡器,启动分区在 Nautilus 中打开,但我得到以下对话框,并且没有主分区。
dmesg 的最后一百行左右是这里. 可能相关的是
[100640.545190] FAT-fs (sdb1): Volume was not properly unmounted. Some data may be corrupt. Please run fsck.
和
[101082.691558] EXT4-fs (sdb2): bad geometry: block count 3894272 exceeds size of device (964096 blocks)
正如第一个建议的那样,我这样做了sudo fsck /dev/sdb
,并得到了以下内容。
fsck from util-linux 2.20.1
e2fsck 1.42.9 (4-Feb-2014)
fsck.ext2: No medium found while trying to open /dev/sdb
The superblock could not be read or does not describe a valid ext2/ext3/ext4
filesystem. If the device is valid and it really contains an ext2/ext3/ext4
filesystem (and not swap or ufs or something else), then the superblock
is corrupt, and you might try running e2fsck with an alternate superblock:
e2fsck -b 8193 <device>
or
e2fsck -b 32768 <device>
如果我做
sudo dcfldd bs=4M if=/dev/sdb of=/tmp/from-sd-card.img count=1024
cmp /tmp/from-sd-card.img /home/tsbertalan/workspace/gunnar/2016-05-27-raspbian-jessie.img
我明白了
/tmp/from-sd-card.img /home/tsbertalan/workspace/gunnar/2016-05-27-raspbian-jessie.img differ: char 4194342, line 1
如果我这么做
cmp -b --verbose /tmp/from-sd-card.img /home/tsbertalan/workspace/gunnar/2016-05-27-raspbian-jessie.img
我明白了
4194342 1 ^A 0 ^@
70255618 72 : 257 M-/
70255619 35 ^] 3 ^C
70255622 375 M-} 266 M-6
70255623 166 v 16 ^N
70255625 34 ^\ 114 L
70255626 345 M-e 274 M-<
70255627 4 ^D 0 ^@
70255629 77 ? 14 ^L
70255630 371 M-y 176 ~
70255631 144 d 1 ^A
70255633 326 M-V 200 M-^@
70255634 256 M-. 252 M-*
70255635 32 ^Z 1 ^A
70255661 373 M-{ 114 L
70255662 123 S 124 T
70255665 105 E 120 P
70255666 132 Z 124 T
70255669 24 ^T 2 ^B
70255754 0 ^@ 155 m
70255823 352 M-j 353 M-k
70255993 125 U 201 M-^A
70255994 323 M-S 343 M-c
70255995 257 M-/ 71 9
1815085083 72 : 0 ^@
1815085084 103 C 132 Z
这4194342
看起来确实是一致的。
只有在将正确刷新的卡插入 RPI、启动并关闭后,我才能重现此问题。此后,需要尝试两次才能正确刷新卡。 我现在强烈怀疑Raspbian 在第一次启动时执行的自动调整大小 可能是这个问题的一部分。如果这个问题更适合 Raspberry Pi stackexchange 网站,那么可以将其移到那里。
这是怎么回事?我是否还有其他方法可以写入此图像,以便第一次尝试时它就能正常工作?我不想无谓地浪费我有限的 SD 卡写入次数。
我只有一个读卡器可以用来测试,但是我尝试过 16GB Samsung EVO micro SDHC、8GB SanDisk Ultra micro SDHC 和 32GB SanDisk Ultra micro SDHC,结果都一样。
答案1
[101082.691558] EXT4-fs(sdb2):几何形状不良:块数 3894272 超出设备大小(964096 个块)
文件系统头已损坏。一定要向自动调整大小工具的维护人员提出错误。