Linux

dmsetup luksFormat 創建對齊不一致

  • February 3, 2018

解鎖新格式化的 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 整除,所以這是另一個問題中提到的錯誤警告。所以問題就解決了。

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