Encryption
cryptsetup 和 ext4 會帶來多少儲存成本?
我想使用 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
Rsync 返回數據空間不足。似乎合理,因為加密和文件系統必須有一些成本。
我用相對偏移量嘗試了它:
dirsize=$(($dirsize + ($dirsize + 8)/9))
這解決了大於 100 MB 的目錄的問題,但不適用於小於 50 MB 的目錄。
如何確定容器必須大於目錄的相應字節數?
LUKS 預設使用 2 MiB 作為其標頭,主要是由於數據對齊的原因。您可以使用
cryptsetup luksDump
(Payload offset:
在部門中)檢查這一點。如果您不關心對齊方式,則可以使用該--align-payload=1
選項。至於
ext4
,很複雜。它的成本取決於文件系統大小、inode 大小、日誌大小等。如果您不需要日記,您可能更喜歡ext2
. 可能其他文件系統的成本小於ext*
,可能值得嘗試。此外,一些mkfs
標誌(類似-T largefile
或類似的)可能會有所幫助,具體取決於您在此東西上放置的文件類型。例如,如果您只想在其中放入十幾個文件,則不需要創建具有一百萬個 inode 的文件系統。如果您希望容器尺寸最小,您可以從一個更大的容器開始,然後使用
resize2fs -M
將其縮小到最小尺寸。然後您可以truncate
使用該大小加上Payload offset:
LUKS 的容器。這應該非常接近小,如果您需要它更小,請考慮使用
tar.xz
而不是文件系統。雖然tar
對於數百 GB 的數據來說並不是很好(需要提取所有內容才能訪問單個文件),但對於您提到的大小應該沒問題,並且應該比大多數文件系統小……