dd 总是在第一次尝试时写入一个分区失败;第二次尝试时成功

dd 总是在第一次尝试时写入一个分区失败;第二次尝试时成功

对于一个机器人项目,我组装了一个 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 个块)

文件系统头已损坏。一定要向自动调整大小工具的维护人员提出错误。

相关内容