Encryption

cryptsetup 和 ext4 會帶來多少儲存成本?

  • April 15, 2014

我想使用 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 luksDumpPayload offset:在部門中)檢查這一點。如果您不關心對齊方式,則可以使用該--align-payload=1選項。

至於ext4,很複雜。它的成本取決於文件​​系統大小、inode 大小、日誌大小等。如果您不需要日記,您可能更喜歡ext2. 可能其他文件系統的成本小於ext*,可能值得嘗試。此外,一些mkfs標誌(類似-T largefile或類似的)可能會有所幫助,具體取決於您在此東西上放置的文件類型。例如,如果您只想在其中放入十幾個文件,則不需要創建具有一百萬個 inode 的文件系統。

如果您希望容器尺寸最小,您可以從一個更大的容器開始,然後使用resize2fs -M將其縮小到最小尺寸。然後您可以truncate使用該大小加上Payload offset:LUKS 的容器。

這應該非常接近小,如果您需要它更小,請考慮使用tar.xz而不是文件系統。雖然tar對於數百 GB 的數據來說並不是很好(需要提取所有內容才能訪問單個文件),但對於您提到的大小應該沒問題,並且應該比大多數文件系統小……

引用自:https://unix.stackexchange.com/questions/124669