Linux

file 命令正確辨識了我的 LUKS 設備,但核心看不到它

  • October 15, 2021

我最近創建了一個具有 4MiB 本機的 LUKS2 設備--offset。該file命令正確辨識設備並列出其 UUID,但它既不會在啟動時自動打開,也不會在/dev/disk/by-uuid/...(甚至在 之後update-initramfs)可見。

手動執行cryptsetup open按預期工作,但cryptdisks_start無法打開它。與我的其他設備一樣,它是用UUID=in指定的。/etc/crypttab使用“父”塊設備路徑而不是其 UUID 有效。

檢查顯示正確的幻數(偏移量 0 處的“LUKS”),並且標頭從與我的其他 LUKS2設備(正確檢測到)xxd相同的偏移量開始。為什麼無法檢測到此設備?我該怎麼做才能讓我通過它的 UUID 打開它?

從技術上講,這裡的核心沒有錯。這裡唯一涉及核心的是dmcryptcryptsetup.

cryptsetup能夠基於儲存在塊設備上的元數據配置設備映射器設備,因此也沒有故障。

LUKS 設備沒有條目儲存在那裡的事實/dev/disk/by-uuid指向udev或負責發現 LUKS 設備的任何內容(另請參見 的輸出udevadm info /dev/the-block-device)。

udev使用blkid(例如,內置版本參見/lib/udev/rules.d/60-persistent-storage.rulesDebian 上的規則)來了解這些。

在您的情況下,blkid報告*TYPE="jmicron_raid_member"*. 如果它是 RAID 陣列成員,則不應直接訪問它,因此blkid不要嘗試報告其中可能儲存的內容是正確的。

如果它不是jmicron_raid_member,那麼它可能只是碰巧仍然包含某些 RAID 配置的簽名,例如,因為 SSD 曾經連接到 ATA 模式設置為 RAID 而不是 BIOS 中的 AHCI 的 PC(並且您blkdiscard在重用它之前忘記執行)。或者也許第 512 個最後一個字節恰好是J第 511個字節M

為了blkid 停止檢測它,jmicron_raid_member如果你確定它不是故意的,並且最後一個 512 字節單元沒有被任何東西使用,你需要擦除 RAID 簽名,對於 jmraid 顯然可以在塊設備的最後 512 字節單元,可以手動使用,例如:

size=$(blockdev --getsize -- "$dev") &&
 dd if=/dev/zero of="$dev" seek="$((size - 1))" count=1

或使用util-linuxwipefs

wipefs -t jmicron_raid_member -- "$dev"

列出簽名。

wipefs -a -t jmicron_raid_member -n -- "$dev"

顯示它會抹去什麼。

wipefs -a -t jmicron_raid_member -- "$dev"

擦掉。

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