使用 dd 装载压缩磁盘映像或克隆,尊重可用空间

使用 dd 装载压缩磁盘映像或克隆,尊重可用空间

我打算在本地安装通过克隆获得的图像dd。该镜像对应一个512GB存储的mSATA磁盘,最低版本的Ubuntu几乎没有配置。因此,实际上,带有数据的内容不应大于 3GB。

但是,为了提高资源和空间效率,我使用以下命令使用 gz 压缩了图像:

dd bs=64K if=/dev/sdd conv=sync,noerror status=progress | gzip -c  > /image.img.gz

/dev/sdd有问题的磁盘在哪里。其中创建了一个2.4GB的压缩映像,如果我尝试解压,它当然会占用原来的512GB。

要将压缩映像刻录到另一个磁盘,我使用以下命令:

gunzip -c /image.img.gz | dd bs=64K of=/dev/sdy status=progress

但是,我现在不想将其刻录到另一个磁盘,而是将其安装在我自己的系统上(使用安装实用程序),因为我想在将其刻录到特定磁盘之前进行一些更改和配置。但我的磁盘空间不足(512GB)。

有没有办法直接压缩挂载?如果没有,有什么方法可以克隆磁盘,使其占用更少?

答案1

图像压缩得很好,因此可能包含许多空字节(SSD 通常会fstrim为文件系统暂时未使用的扇区返回空字节)。如果是这种情况,您应该尝试将.gz存档解压缩为稀疏文件。目标文件系统必须支持稀疏文件才能正常工作。命令示例:

gunzip -c /image.img.gz | cp --sparse=always /dev/stdin /path/to/store/image.img

cp --sparse=always您可以使用代替dd conv=sparse,但请注意:为什么没有dd conv=sparse像我预期的那样节省空间?

在另一个控制台中运行watch ls -hls /path/to/store/image.img并观察第一列和第六列。第6列的数字将增长到约512GB;第一列中的数字应保持适度较低,这是解压缩的图像在磁盘上占用的空间大小。

然后使用kpartx访问 中的分区/path/to/store/image.img;或fdisk -l /path/to/store/image.img(或gdisk -l …)并mount -o offset=…直接从映像安装。如果您的/dev/sdd是一个超级软盘(其中没有分区,只有文件系统),那么您只需mount /path/to/store/image.img /the/mountpoint

相关内容