稍微缩小 DD 映像以便克隆

稍微缩小 DD 映像以便克隆

我读过几种提出的解决方案,它们似乎都说使用 缩小用 dd 创建的图像很简单resizefs,但它们根本不起作用。

我只需要将图像缩小约 200MB,因为它稍微太大了,无法容纳在某些容量略有差异的 CF 卡上,即使它们都是 8GB 卡。

我有一个 8GB 的​​图像,其中有一个使用创建的 7.8GB 分区dd,并且使用fdisk它看起来图像没有问题:

fdisk DISK.img

Welcome to fdisk (util-linux 2.33.1).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.


Command (m for help): p
Disk DISK.img: 7.8 GiB, 8375185920 bytes, 16357785 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0xb8342d9e

Device     Boot Start      End  Sectors Size Id Type
DISK.img1  *     2048 14649343 14647296   7G 83 Linux

我需要将其缩小约 250MB 并尝试使用resizefs,但失败了:

# resize2fs DISK.img 7.8G
resize2fs 1.44.5 (15-Dec-2018)
resize2fs: Bad magic number in super-block while trying to open DISK.img
Couldn't find valid filesystem superblock.

我究竟做错了什么?

答案1

总结

将图像写入任何容量为 8 GB 的卡并忽略no space left on device警告:这不是一个一般的回答所有类似的问题。


明确问题的答案

我究竟做错了什么?

您尝试对整个映像进行操作,而文件系统从偏移量开始(它位于映像内的分区内)。您的DISK.img类似于/dev/sdx,而您应该调用类似于;但目前目录树中resize2fs /dev/sdx1 …没有类似的。/dev/sdx1

一般来说,您可以使用kpartx或 之类的工具映射分区来缩小文件系统losetup 在你的具体情况下您无需做任何事情。


解释

保存文件系统的分区以扇区号 结束14649343。编号从 开始0,逻辑扇区大小为512字节。分区表位于 MBR 中,即扇区0,并且(与 GPT 相反)映像末尾没有元数据。引导加载程序的初始阶段(如果有)位于 MBR 中,位于第一个分区之前。这意味着只有第一个14649344扇区(14649344 * 512 = 7500464128字节)很重要;超出的任何内容都可能丢失、覆盖、截断等(除非末尾未分区的空间确实包含一些有用的数据;这将是非常虽然这很不寻常,但如果你不知道这种情况,那么可能就不是这种情况)。

因此,可以将映像写入至少为7500464128字节大小的任何设备,并且所有有用的数据都可以容纳。这大约是 7.5 GB 或 7 GiB。您使用的数字(7.8G)指定 7.8 GiB(请参阅man 8 resize2fs),因此它甚至比您已有的文件系统还要大(这意味着您不会萎缩首先)。

只要检查(例如使用fdisk)您的目标设备是否至少有14649344(逻辑)字节扇区512即可。(注意:对于具有 4096 字节逻辑扇区的设备,您需要转换分区表;但这可能是一些大型 HDD 的问题,而不是 CF 卡的问题)。

检查目标设备是否足够大以容纳有用的数据后,将图像复制到其中(使用ddcpcat、 等)。如果设备小于DISK.img,您将得到no space left on device,但这仅表示图像末尾的未使用空间不完全适合。

或者您可以先截断图像,这样最后就没有未使用的空间:

truncate -s 7500464128 DISK.img

然后fdisk -l DISK.img会告诉您确切的14649344扇区数。最后一个扇区(编号为14649343)仍将是分区的最后一个扇区,但分区后将没有空间。现在,如果您将映像写入足够大的设备,您甚至不会得到no space left on device

理论上,文件系统可能比分区还要小,但事实可能并非如此。如果是这样,那么将分区调整为文件系统并进一步截断是可能的。我不会在这里讨论这种情况。您已有的映像应该适合任何容量为 8 GB 的卡。

相关内容