Answers:
根据您的用例(我使用它来进行系统备份),可以使用CloneZilla Live。它可以创建:
主要优点是:
除了这些优点之外,它还可以复制MBR。
如果不是您想要的冷系统备份,您仍然可以使用CloneZilla所基于的技术,那就是partclone
。
实现较小的磁盘映像通常是通过不从映像中的初始文件系统复制零出块的方式完成的。这个概念被称为稀疏空间中的文件或puching在文件中的孔,并在主机的文件系统来支持它。一点命令行,但是试试这个:
sudo apt-get install virt-manager qemu-utils
然后安装后,您可以使用:
qemu-img convert -f raw -O raw /dev/sdX /home/<user>/Ubuntu.img
这将创建磁盘的稀疏映像(未写入文件中的零)。其中-f =格式,-O输出格式。sdX磁盘(也可以使用分区)。该程序具有高级功能,例如快照和不同的输出格式(vdi,vmdk等)。你的地方,你保存图像必须支持稀疏文件,否则规模将是多么大,因为在分区零将被写入到磁盘中。要充分利用它,请在分区上运行诸如apt sfill
或zerofree
apt中找到的程序,因为可用空间并不总是意味着零空间,并且您想最大化文件系统上零空间的数量。
奖励忍者积分。由于linux将磁盘视为“文件”,因此您也可以使用普通cp,条件是将文件停放到的输出分区知道稀疏文件。
sudo cp --sparse=always /dev/sdX /home/<user>/Ubuntu.img
它将通过cp创建原始副本。
支持稀疏的文件系统示例:ext4,btrfs,xfs,ntfs(但是ntfs-3g可能不允许稀疏写入)。
不包含以下文件系统的示例:fat32。
sudo cp /home/<user>/Ubuntu.img /dev/sdX
,或者如果你喜欢的DD, sudo dd if=/home/<user>/Ubuntu.img of=/dev/sdX
。与qemu-img convert相同。如果您说,要在真实硬件上植入虚拟机。当回写时,它将零写入磁盘,因此您很稀疏,因为它需要正确地处理分区的几何形状。
由于似乎没有任何程序本身可以满足两个条件:
1)具有类似“磁盘”的GUI;
2)创建与所用空间一样大的磁盘映像,
我当时正在考虑一种相对简单的解决方法,但是其中涉及两个在Ubuntu中非常常见的GUI程序:
一个是用于创建给定分区的备份映像的相同 “磁盘”(gnome-disk-utility),第二个是Gparted,用于在创建其备份映像之前尽可能缩小分区,以及之后将其调整为原始大小。
我发现这样的操作不会带来任何不便:将分区缩小到最小程度仅需几分钟(10GB大约需要一分钟),并且会在右侧创建一个空白空间。在使用“磁盘”制作磁盘的备份映像之后,使用Gparted可以将分区的大小重新调整为右侧,直到其初始状态为空,这仅需要几秒钟。
在安装了Ubuntu的分区上进行了测试:
尽可能使用Gparted缩小分区
该分区与磁盘的备份映像
使用磁盘将映像还原到大于该映像的分区上;该分区应首先卸载:如何使用“磁盘”正确还原系统分区(iso映像)。
编辑:如果从文件系统中删除的文件仍然存在于分区中,则此方法将无法正常工作,因此首先必须擦除目标分区上的可用空间:
dd if=/dev/zero of=<path_to_partition_volume>/file.dd && rm <path_to_partition_volume>/file.dd
然后:
您可以使用逐块读取整个分区,dd
并将所有内容输出到诸如的压缩实用程序gzip
。即使使用最快/最低的压缩设置,任何压缩工具都极有可能在此过程中压缩所有可用空间。
与gzip
:
sudo dd if=/dev/sdX | GZIP=-1 gzip >/path/to/backup.gz
(GZIP=-1
临时设置环境变量GZIP
以-1
实现最快/最低压缩)
要还原备份:
gzip -d /path/to/backup.gz >/dev/sdX
Clonezilla实际上可以非常友好。实时CD不需要任何命令行使用-即使它不使用鼠标,我也很高兴将其称为GUI-并且我认为在许多情况下默认设置都可以。问题是您没有明确指出的问题:它似乎没有设计为可以在任意Linux系统上安装的东西。它专门为Debian / Ubuntu打包,Live CD是运行它的最简单方法。
Clonezilla / partclone使用支持文件系统的克隆并使用自己的压缩映像格式。
还有另一种非GUI的可能性来生成简单的(可挂载的)稀疏文件,它不依赖于检测零扇区。
virt-sparsify /dev/your-block-device backup.img
如果/ tmp是ramdisk,它将警告它可能需要更多空间来存储临时文件。因此,您可能需要添加该选项--tmp /var/tmp
。
virt-sparsify --version
?该选项记录在我的(man virt-sparsify
)上...我不能发誓我已经使用过它,但是至少我当前使用的/tmp
是tmpfs。如果可以使用--in-place
,它将避免临时存储。最后,您不妨尝试一下TMPDIR=/var/tmp virt-sparsify ...
。我的版本的文档说,这就是您必须为1.28之前的版本设置tmp目录的方式。