我打算在本地安装通过克隆获得的图像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
。