将稀疏分区写入磁盘映像的有效方法?

将稀疏分区写入磁盘映像的有效方法?

我生成一个包含最小 Debian 文件系统的 ext4 分区映像,然后将该分区映像写入完整磁盘映像。我正在寻找最快的写入方法。

考虑一个最小的测试用例:

truncate -s 30GB disk.img
parted -s disk.img mklabel gpt
parted -s disk.img mkpart small ext4 1MiB 301MiB
parted -s disk.img mkpart root ext4 301MiB 100%

truncate -s 20GB rootfs.img
truncate -s 300MB small.img
mkfs.ext4 rootfs.img
mkfs.ext4 small.img

# In reality, here we might put something on the partitions, like:
# mount rootfs.img /mnt/root; debootstrap /mnt/root

# The part we want to optimize:
dd if=small.img of=disk.img seek=1 bs=1M conv=notrunc
dd if=rootfs.img of=disk.img seek=301 bs=1M conv=notrunc

上述代码中生成的rootfs.img和文件仅包含一个空的 ext4 文件系统,因此非常小(对于 5G 文件系统,约为 67MB,对于 30G 文件系统,约为 120MB)。尽管如此,即使使用,也需要很长时间才能复制它们。据推测这是因为查看了完整的 20GB,而不仅仅是打印的已使用区域。此外,如果目标未归零,则使用是一个错误。small.imgddconv=sparsedddu -shconv=sparse

将稀疏分区映像复制到磁盘映像中间的最快方法是什么?仅 ext4 解决方案就足够了,但独立于文件系统的方法甚至更好。

答案1

用于losetup创建指向大图像文件中的分区的循环设备。

losetup -P loop9 disk.img

创建

  • /dev/loop9 代表整个文件
  • /dev/loop9p1 代表第一个分区
  • /dev/loop9p2 代表第二个分区

然后使用将partclone.ext4数据从小图像文件复制到环回设备。(为了实现延伸目标,partclone 的其他版本可用于其他文件系统)

或者您可以直接格式化环回设备、安装它们并安装您想要的文件。

相关内容