Linux
dmsetup luksFormat 創建對齊不一致
解鎖新格式化的 LUKS 卷時,我在核心日誌中收到警告:
kernel: device-mapper: table: 253:14: adding target device sdk1 caused an alignment inconsistency: physical_block_size=4096, logical_block_size=512, alignment_offset=0, start=33553920
根據另一個問題,錯誤警告是可能的,所以我確認這是一個真正的警告:33553920 不能被 4096 整除。我進一步使用 luksDump 確認:
cryptsetup luksDump /dev/sdk1 | grep 'Payload offset' Payload offset: 65535
這不是 8 的倍數 (4096 ÷ 512 = 8)
lsblk -t /dev/sdk
確認 Linux 了解對齊要求:NAME ALIGNMENT MIN-IO OPT-IO PHY-SEC LOG-SEC ROTA SCHED RQ-SIZE RA WSAME sdk 0 4096 33553920 4096 512 1 cfq 128 128 32M └─sdk1 0 4096 33553920 4096 512 1 cfq 128 128 32M
dmsetup 記錄在案以處理對齊本身,為什麼它會產生錯位?luksFormat 是否有理由避免這個問題?
dmsetup 似乎根據最佳 I/O 大小計算其對齊,而無需檢查這實際上是物理塊大小的倍數。如錯誤警告問題中所述,由於 USB 限制,此最佳 I/O 大小是有意義的。
所以解決方法很簡單:使用
--align-payload
覆蓋檢測到的值。值 8 應該可以工作(並產生盡可能小的標題);cryptsetup 無法分辨時的預設值記錄為 2048。所以我選擇了預設值:cryptsetup luksFormat /dev/sdk1 --align-payload 2048 --verify-passphrase --hash sha512 -s 512
之後,有效負載偏移量現在為 4096(來自 luksDump),並且仍然產生核心警告:
kernel: device-mapper: table: 253:14: adding target device sdk1 caused an alignment inconsistency: physical_block_size=4096, logical_block_size=512, alignment_offset=0, start=2097152
…但是 2097152 可以被 4096 整除,所以這是另一個問題中提到的錯誤警告。所以問題就解決了。