我刚买了一台新电脑,硬盘容量大了很多。我想我已经把所有重要文件都复制过来了,但为了保险起见,我想保留旧磁盘的磁盘映像。为了节省空间,我想压缩它,但我没有找到安装压缩映像的选项。
我的目标:
- 结果必须易于访问
- 我无需解压整个文件即可访问任何内容
- 文件应该可以快速定位 - 没有 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
,后者仅允许选择压缩方法而不能选择级别,并且可用的压缩方法较少。