Linux 上的压缩磁盘映像

Linux 上的压缩磁盘映像

我刚买了一台新电脑,硬盘容量大了很多。我想我已经把所有重要文件都复制过来了,但为了保险起见,我想保留旧磁盘的磁盘映像。为了节省空间,我想压缩它,但我没有找到安装压缩映像的选项。

我的目标:

  • 结果必须易于访问
  • 我无需解压整个文件即可访问任何内容
  • 文件应该可以快速定位 - 没有 TAR/CPIO 存档
  • 所需空间应该小于仅仅复制文件

因此理想情况下,我正在寻找一个只读的压缩文件系统,可以在文件中创建它并且它会自动增长。

答案1

使用取证分析软件,例如盖马杰(开源,sourceforge.net)。它有一个很好的用户界面,可以快速创建整个硬盘的压缩磁盘映像。

使用“高级取证图像(.aff)”这将创建一个单独的压缩文件(当然,它还会创建一个.info 文件)。

修改默认压缩率 1(最快,但压缩率最低)。如果您有一台具有许多核心的快速计算机,您可以通过创建以下内容来更改此设置/etc/guymager/local.cfg

AffCompression = 3

9是最好但最慢的压缩。3提供良好的压缩和良好的性能。

更新

安装并不像看起来那么简单。首先,你需要自由图书馆(Ubuntu:)aptitude install afflib-tools。现在你可以使用以下命令获取原始磁盘映像[affuse][3] <image> <mount-point>

但由于某种原因,安装原始映像失败。parted说第一个分区以1048576B但开头

mount -t ext4 -o loop,ro,offset=1048576 /mnt/backup.raw /mnt/backup

因常见的无用挂载错误而失败:

mount: wrong fs type, bad option, bad superblock on /dev/loop0,
   missing codepage or helper program, or other error
   In some cases useful info is found in syslog - try
   dmesg | tail  or so

dmesg说:

EXT4-fs (loop0): VFS: Can't find ext4 filesystem

答案2

正如 Matthias Krull 在上面的评论中所说的那样,qcow2 是一种支持压缩以存储磁盘映像的良好格式。由于它是 QEMU 虚拟机磁盘映像的格式,它将在相当长的一段时间内得到支持。这是一个压缩/dev/sda到压缩映像文件的示例命令sda.qcow2。默认情况下使用 zlib 压缩,但我认为 zstd 可能具有更好的压缩率。使用 8 个线程来增加吞吐量,但您应该将其更改为您拥有的处理器核心数量。

qemu-img convert -c -p -S 512 -o compression_type=zstd" -f raw -O qcow2 -m 8 \
  /dev/sda sda.qcow2

以只读块设备NBD(网络块设备)的形式访问图像,可以使用如下方法:

modprobe nbd
qemu-nbd -r -c /dev/nbd0 sda.qcow2
kpartx -av /dev/nbd0

然后就可以正常使用 来挂载文件系统,mount并且 中可以使用 适当的设备/dev/mapper

答案3

对于支持块压缩的文件系统,一种选择是将磁盘映像直接存储为文件。我知道 BTRFS 支持这一点,但其他文件系统可能也支持。对于 BTRFS,您可能需要启用 mount 选项来compress-force覆盖不可压缩的启发式方法。您还需要创建一个稀疏文件。这可以通过 来完成dd,如本例所示:

dd if=/dev/sda of=/mount/btrfs/sda.img conv=sparse,fsync iflag=nocache oflag=nocache

这将创建一个稀疏文件,因此零扇区不会占用空间,并且 BTRFS 将压缩可压缩的块(假设您已打开该功能)。该compsize工具可用于查看文件压缩的​​程度。使用du只会显示未压缩文件的大小减去空洞,因此并不准确。

要挂载映像中的任何文件系统,可以使用以下命令:

LOOPDEV=$(losetup --show -f /mount/btrfs/sda.img)
kpartx -av "$LOOPDEV"
mount /dev/mapper/"$LOOPDEV"p3 # To mount the 3rd partition

如果您不使用具有本机压缩功能的文件系统(例如)ext4,您仍然可以使用此方法,将磁盘映像包装在 BTRFS 文件系统映像中。它可能看起来像这样:

truncate -s 100G backup-sda.btrfs.img
mkfs.btrfs backup-sda.btrfs.img
mount -o compress-force=zstd:9 backup-sda.btrfs.img /media/tmp
cd /media/tmp
# Now do commands to create disk image as above

与使用的方法相比,该方法可以更好地控制压缩算法和压缩级别qemu-img convert,后者仅允许选择压缩方法而不能选择级别,并且可用的压缩方法较少。

相关内容