GUI程序创建的分区备份映像不比其文件大?

我喜欢’Disks’( gnome-disk-utility )及其创建系统分区备份的能力。

在此处输入图像描述

但是在某些时候我在互联网上读到了一个程序,它会创建这样的图像,这些图像不像整个分区那么大,但只能和它上面的文件一样大。 现在我再也找不到了。

有没有这样的实用工具?

以下答案使用TUI ,而不是GUI解决方案:

根据您的使用情况(我使用它来进行系统备份),您可以使用CloneZilla 。 它可以创建:

  • 稀疏图像,
  • 压缩图像:
    • 整个系统,
    • 整个驱动器
    • 只是个别分区。

主要优点是:

  • 它来自:
    • 外部媒体
    • 内部媒体
  • 自带操作系统(基于Ubuntu)
  • 它可以使精确的冷系统备份容易恢复。

除了所有这些好东西之外,它还可以复制MBR。

如果冷系统备份不是您正在寻找的,您仍然可以使用CloneZilla所基于的技术,这是partclone

实现较小的磁盘映像通常是通过不从映像中的初始文件系统复制零块的方法来完成的。 这个概念在文件中称为稀疏空间或在文件中打孔,您的主机文件系统必须支持它。 一点命令行,但试试这个:

 sudo apt-get install virt-manager qemu-utils 

然后,一旦安装,您可以使用:

 qemu-img convert -f raw -O raw /dev/sdX /home//Ubuntu.img 

这将创建磁盘的稀疏(文件中没有写入零)图像。 其中-f = format,-O输出格式。 sdX磁盘(也可以使用分区)。 该程序具有高级function,如快照和不同的输出格式(vdi,vmdk等)。 保存图像的位置必须支持稀疏文件 ,否则大小将同样大,因为分区中的零将写入磁盘。 并且要充分利用它,请在分区上运行apt中的sfillzerofree等程序,因为自由空间并不总是意味着零空间,并且您希望最大化文件系统上的零空间量。

奖金忍者点。 由于linux认为磁盘是“文件”,那么你也可以使用普通的cp,条件是你停放文件的输出分区知道稀疏文件。

 sudo cp --sparse=always /dev/sdX /home//Ubuntu.img 

这将通过cp创建一个原始副本..

支持稀疏的文件系统示例:ext4,btrfs,xfs,ntfs(但是ntfs-3g可能不允许稀疏写入)。

没有的文件系统示例:fat32。

因为似乎没有任何程序本身都满足这两个条件:

1)有一个类似“磁盘”的GUI;

2)创建与所用空间一样大的磁盘映像,

我正在考虑一个相当简单的解决方法,但涉及两个GUI程序,在Ubuntu中非常常见:

一个是‘Disks’(gnome-disk-utility) ,用来创建给定分区的备份映像,第二个是Gparted, 在创建备份映像之前尽可能缩小分区,以及之后将其重新调整为原始大小

我认为在这样的操作中没有任何不便:将分区缩小到最小只需要几分钟(大约一分钟为10GB)并且会在右边创建一个空的空间。 使用“Disks”制作磁盘的备份映像后,使用Gparted可以将分区的大小调整回空白区域直到其初始状态,这只需要几秒钟。

在具有Ubuntu安装的分区上测试:

  • 尽可能使用Gparted缩小分区

  • 使用磁盘备份该分区的映像

  • 使用磁盘将图像恢复到大于图像的分区上; 首先应该卸载该分区: 如何使用“磁盘”正确恢复系统分区(iso映像) 。

编辑 :如果从文件系统中删除的文件仍然存在于分区上,这将无法正常工作,因此首先需要擦除目标分区上的可用空间:

  1. 挂载目标分区
  2. 运行dd if=/dev/zero of=/file.dd && rm /file.dd
  3. 卸载目标分区

然后:


您可以使用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

使用带-S选项的ddrescue怎么样?

 ddrescue -S /dev/sdXY //backup.img 

这将克隆每个块,但在块设备/dev/sdXY找到零块到//backup.img

它不能用于复制到较小的驱动器。 当我有64 Gb驱动器,只有10%充满数据。 我希望能够将其复制到6 Gb图像文件,我可以将其复制到16Gb驱动器,然后将其扩展到16 GB

我现在知道的唯一可能是使用GParted来缩小原始内容,而不是复制它然后调整它们的大小。 这是一个非常危险的操作,因为您需要缩小和调整原始大小。

您可以使用rsync将分区上的文件备份到另一个分区。 或tar来创建包含所有文件的压缩存档。

两者都可能有(多个)GUI,但我自己从未使用过。

Clonezilla实际上可以非常友好。 Live CD不需要任何命令行使用 – 我很乐意将它称为GUI,即使它不使用鼠标 – 我认为默认情况下很多情况都可以。 问题是你没有明确提出的问题:它似乎并不是设计为可以安装在任意Linux系统上的东西。 它专门为Debian / Ubuntu打包,而Live CD是最简单的运行方式。


Clonezilla / partclone使用文件系统感知克隆并使用自己的压缩图像格式。

生成简单(可安装)稀疏文件还有另一种非GUI可能性,它不依赖于检测零扇区。

 virt-sparsify /dev/your-block-device backup.img 

如果/ tmp是ramdisk,它将警告它可能需要更多空间用于临时文件。 所以你可能需要添加选项--tmp /var/tmp