使用 dd 复制映像会导致 ext4 文件系统未知

使用 dd 复制映像会导致 ext4 文件系统未知

我一直在尝试对树莓派 SD 卡进行备份,但一直失败。我只是需要它小一点,这样它就可以装在我拥有的另一张 32GB SD 卡上。在遵循教程(如 pishrink)后出现多次失败后,我将根文件系统缩小到 8GiB 左右,这应该很好。然后我用 DD 复制它,如下所示:

dd if=/dev/mmcblk0 of=small.img bs=1M count=10240

并像这样的目标

dd if=small.img of=/dev/mmcblk0 bs=1M count=10240

每当我这样做时,根分区都会以未知的文件类型结束。它最初是ext4,这里是gparted中工作的SD卡。您可以看到根分区是 ext4。

在此输入图像描述

这是我尝试写入后第二张卡上的 gparted。启动分区没问题,但 ext4 根分区出了问题。 PI 实际上会启动,直到它尝试加载根分区。无论我尝试复制图像多少次,或者即使我尝试在 dd 命令中忽略大小,都会发生这种情况。我在这里可能会缺少什么?

在此输入图像描述

我应该说,我在从 PI 中取出 SD 卡后,在我的 ubuntu 机器上完成了所有这些复制。因此,复制卡时文件系统并未在卡上使用。

通过将损坏的 SD 卡放入我的 ubuntu 机器并运行,我终于能够启动它了fsck -l /dev/mmcblk0p2。当它开始跟我谈论垃圾时,我按住了 ctrl-c。

在此输入图像描述

现在 gparted 将其视为 ext4 并且可以启动...但是到底是什么:)我不明白为什么会发生这种情况。

答案1

不要尝试复制正在使用的文件系统 - 最好的情况是您会得到一个损坏的副本,但最坏的情况是您会得到一个隐藏损坏的文件系统。相反,请使用不同的系统来复制 SD 卡。

请记住,尽管您现在说您使用单独的系统来执行复制,

  1. 文件系统仍不得挂载(用于mount列出已挂载的文件系统集 - 不得列出)
  2. sync写入SD卡后请确保一切都已完成将其拉到目标系统中进行测试

下次复制文件系统时,请考虑使用cat而不是dd.充其量它不会更慢,而且很可能会更快。 (该cat命令必须以 root 身份运行 - 用于sudo -s获取 root shell):

cat small.img >/dev/mmcblk0    # Write image
sync                           # Guarantee completion on slow media

如果您只是复制完整的 SD 卡,您也可以使用以下方法cat完全复制它:

cat /dev/mmcblk0 >full.img     # Read image

在任何一种情况下,您都可以替换catpv以获得运行进度报告。 (pv还可以选择在达到一定数量的数据后停止处理;请参阅man pv。)

相关内容