我一直在尝试对树莓派 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 卡。
请记住,尽管您现在说您使用单独的系统来执行复制,
- 文件系统仍不得挂载(用于
mount
列出已挂载的文件系统集 - 不得列出) 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
在任何一种情况下,您都可以替换cat
为pv
以获得运行进度报告。 (pv
还可以选择在达到一定数量的数据后停止处理;请参阅man pv
。)