我想使用 cryptsetup 对具有 ext4 文件系统的容器中的目录内容进行加密。容器的大小应该尽可能小,必要时尽可能大,因为我只想写一次然后备份。
首先尝试:将容器的大小设置为内容的大小。
dirsize=$(du -s -B512 "$dir" | cut -f 1)
dd if=/dev/zero of=$container count=$dirsize
losetup /dev/loop0 $container
fdisk /dev/loop0 # 1 Partition with max possible size
cryptsetup luksFormat --key-file $keyFile /dev/loop0
cryptsetup luksOpen --key-file $keyFile /dev/loop0 container
mkfs.ext4 -j /dev/mapper/container
mkdir /mnt/container
mount /dev/mapper/container /mnt/container
rsync -r "$dir" /mnt/container
Run Code Online (Sandbox Code Playgroud)
Rsync 返回没有足够的空间来容纳数据。看起来很合理,因为加密和文件系统必须有一些开销。
我尝试使用相对偏移量:
dirsize=$(($dirsize + ($dirsize + 8)/9))
Run Code Online (Sandbox Code Playgroud)
这可以解决大于 100 MB 的目录的问题,但不能解决小于 50 MB 的目录的问题。
如何确定容器必须比目录大的相应字节数?