Filesystems
LUKS 加密中的 Bit Rot
位腐爛如何影響 LUKS 容器和內部的文件系統?
假設您有一個非常適合處理位腐爛的文件系統。現在把它放在一個 LUKS 容器中。如果位腐爛損壞了容器,我假設解密的文件系統將遭受大量損壞的原始字節/塊。
LUKS 如何防止這種情況發生?
LUKS 標頭中的 Bitrot(關鍵和其他關鍵材料):它噗消失了。
(LUKS2 標頭有一些冗餘和校驗和,但它並沒有涵蓋太多,所以很可能……它仍然消失了)。
加密數據中的Bitrot:取決於加密方式,但一般情況下,單個位翻轉會導致16個錯誤字節。
設置加密:
# truncate -s 32M bitrottest.img # cryptsetup luksFormat bitrottest.img # cryptsetup luksOpen bitrottest.img bitrottest
將其全部歸零:
# shred -n 0 -z /dev/mapper/bitrottest # hexdump -C /dev/mapper/bitrottest 00000000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| * 01000000
稍微翻轉一下:
# losetup NAME SIZELIMIT OFFSET AUTOCLEAR RO BACK-FILE DIO LOG-SEC /dev/loop0 0 0 1 0 bitrottest.img 0 4096 # dd bs=1 count=1 skip=30M if=/dev/loop0 | hexdump -C 00000000 a2 |.| 00000001 # printf "\xa3" | dd bs=1 count=1 seek=30M of=/dev/loop0 # dd bs=1 count=1 skip=30M if=/dev/loop0 | hexdump -C 00000000 a3 |.| 00000001
結果:
# hexdump -C /dev/mapper/bitrottest 00000000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| * 00e00000 eb d1 bd b0 2a f5 77 73 35 df 82 40 1e a7 27 11 |....*.ws5..@..'.| 00e00010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| * 01000000
一個翻轉的位,16 個古怪的字節。
保護?沒有任何。為此,您必須添加完整性(只是為了報告錯誤,冗餘仍然是一個單獨的問題)。
您不應該故意將損壞的數據寫入您的儲存。
儲存應該報告讀取錯誤而不是返回虛假數據。在這種情況下,您的數據仍然消失了,但至少,它不是無聲的bitrot。