我最近安裝的 Lubuntu KVM 虛擬機器的虛擬磁碟映像分割區如下所示:
# lsblk -f
NAME FSTYPE LABEL UUID FSAVAIL FSUSE% MOUNTPOINT
loop0 squashfs
0 100% /rofs
... SNIP ...
sr0 iso9660 Ubuntu 19.10 amd64 2019-10-17-12-53-34-00 0 100% /cdrom
vda
└─vda1 crypto_LUKS xxxx-yyyy-zzzz
換句話說,它有一個加密的系統分割區 ( vda1
),並且沒有啟動分割區。 (注意。我啟動到即時映像來檢查/調整加密分割區的大小,我對缺少啟動分割區感到驚訝。)
問題:儘管沒有啟動分區,系統如何能夠啟動(因為它確實啟動了!)?
為了讓我更理解後續問題:
- 引導是否有效,因為 KVM 自己管理解密?
- 或者,這也適用於主機系統嗎?
- 如果它也可以在獨立設定上工作,為什麼我們要創建(未加密的)啟動分區,而不僅僅是像這樣的獨立加密分區?
- 如果是 KVM 管理解密,那麼如何確保 KVM
cryptsetup
安裝了用於建立加密裝置的正確/相容版本?如果版本不符怎麼辦? - 如果是 KVM 管理解密,那麼我假設在使用全碟加密安裝 Lubuntu 時,安裝程式註意到它正在虛擬機器中運行,並決定建立加密分割區就足夠了。是這樣嗎?如果是這樣,為什麼它不詢問我是否想要帶有啟動分區的“正常”設定?
備註:確實,啟動時開啟加密磁碟的 GUI 相當簡潔。這是一個基於文字的圖形使用者介面,我在那裡一首單曲嘗試輸入密碼短語來開啟加密分割區,完全沒有任何回饋(星號似乎沒有顯示至少我輸入了多少個字元)。之前我假設原因是 Lubuntu 比 Ubuntu 簡單,但現在我懷疑(如上所述)KVM 自己管理解密。
答案1
有幾種可能:
使用 MBR/DOS 分割區、具有加密磁碟支援的 GRUB 以及 LUKS 1(或具有 PBKDF2 密碼的 LUKS 2)時,則不需要開機分割區。 GRUB 的未來版本可能會完全支援 LUKS 2,但據我所知,它還沒有完全實現(目前尚不支持 argon2i)。
kernel/initramfs 可以儲存在外部,並透過
-kernel -initrd
向 qemu 傳遞適當的選項由 qemu/KVM 直接載入。在這種情況下,qemu 本身充當引導程序,因此虛擬機器內也不需要引導分割區。核心映像可能存在於第一個分割區之前的特定設備偏移處 - 不是分割區/檔案系統/文件,而是直接作為原始資料寫入設備,並且引導程式知道在哪裡查找它。這種方法通常只出現在嵌入式裝置上。
為什麼我們要建立(未加密的)啟動分割區,而不僅僅是像這樣的獨立加密分割區?
問題是引導程式畢竟必須去某個地方,因此對於 MBR/DOS 分割區,許多操作都在未分割的空間中進行。當然這可以工作......直到兩個不同的東西嘗試將它們的數據放置在相同的偏移量並互相覆蓋。
我們決定對這些進行適當的分區會更好。因此,使用 GPT,您可以獲得一個 EFI 分割區,並且/或 GRUB 獲得一個用於其核心映像的 BIOS_grub 分割區,等等。
理想情況下,您可以查看分區表並了解它是如何設置的,而不是撓頭詢問事情是如何工作的,因為它都隱藏在分區之外的某個地方。