我有一个dd
磁盘映像,它是一个包含文件系统的 LUKS 容器,我可以循环挂载和解锁以访问文件。容器中的文件系统仅占大约 1/4。在允许我能够安装和解锁磁盘的同时,利用压缩的正确方法是什么?
答案1
您无法压缩 LUKS 加密数据。
但是,如果所有涉及的文件系统都支持它,您可以使用 fstrim 丢弃可用空间,从而导致稀疏文件其中可用空间为零并且不占用空间。
# du -h foobar.img
1.0G foobar.img
# cryptsetup open --allow-discards foobar.img foobar
Enter passphrase for foobar.img: foobar
# mount /dev/mapper/foobar loop/
# df -h loop/
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/foobar 974M 129M 780M 15% /foobar/loop
# fstrim -v loop/
loop/: 845.7 MiB (886763520 bytes) trimmed
# du -h foobar.img
179M foobar.img
另一种选择可能是缩小文件系统本身并相应地截断映像文件的大小(请记住考虑 LUKS 标头偏移量,通常 LUKS 1 为 2 MiB,LUKS 2 为 16 MiB)。
另一种方法是压缩未加密的数据。
答案2
压缩在这里不会有帮助——加密数据不是很可压缩本质上是随机的——即使开放文本的相同数据块也会被加密为不同的块(因此将文件系统的“空”部分归零之类的东西不会有帮助)。如果这是磁盘映像,我可能会建议缩小文件系统和 LUKS 容器以节省一些空间,并在需要更多空间时再增大它。