
我正在使用文字/控制台安裝程式在 KVM/libvirt 虛擬機器中安裝 Ubuntu 伺服器。
我打算將兩個 LVM 磁碟區作為根並交換到 VM 作為虛擬磁碟。
它們被正確檢測為vda
和vdb
,但是安裝程式似乎強制我將它們分割為磁碟,這會破壞 LVM 的靈活性。
如何直接格式化虛擬磁碟而不是使用分割區來安裝 Ubuntu,或者這是一個壞主意?
動機:
重點是透過從儲存層次結構中刪除不必要的抽象層級來降低複雜性。
- 實體驅動器:
host:/dev/sd{a,b}
- 分區:
host:/dev/sd{a,b}1
- sw-raid:
host:/dev/md1
- LVM:
host:/dev/vg0/mylv_root
- 虛擬IO磁碟
guest:/dev/vda
- 分區:
guest:/dev/vda1
- 檔案系統:
guest:/
在此佈局中,當為單一虛擬機器指派額外空間時,我必須執行以下步驟:
lvresize
parted
,特別難看resize2fs
以相反的方式減少分配的空間(這更難看)。
對於備份(例如使用lvcreate --snapshot
),還有一個額外的步驟,kpartex
如 psusi 所解釋的。
我想從等式中刪除 6. 因為我看不出這個抽象提供了什麼價值。但它確實會因增加複雜性、可能的性能影響和較小的空間浪費而產生成本。
駭客解決方案:
使用kpartx
我能夠將根檔案系統從“引導分區”(在另一個臨時邏輯卷內)移動到目標邏輯卷,然後通過直接內核引導進行引導。
kpartx -a /dev/vg0/mylv_bootstrapper
dd if=/dev/mapper/vg0-mylv_bootstrapper1 of=/dev/vg0/mylv_root bs=4M
e2fsck -f /dev/vg0/mylv_root
# Edit fstab inside /dev/vg0/mylv_root accordingly
resize2fs /dev/vg0/mylv_root
kpartx -d /dev/vg0/mylv_bootstrapper
然而:
- 這感覺很奇怪。
- 我不太喜歡直接核心啟動的想法,因為每次升級核心時,我都必須手動更新主機中來賓的核心版本。
答案1
好吧,無論是否是LVM,你都必須對空間進行分割/格式化。
是的,KVM 會將設備視為「vda」和「vdb」。
一般來說,雖然KVM使用原始分割區/LVM,IMO,但僅使用虛擬磁碟要可靠得多。佔用相同的空間,並且您始終可以在虛擬磁碟上使用 LVM 和/或調整虛擬磁碟的大小。
答案2
實際上我發現有一個簡單的答案:如果邏輯磁碟區被格式化(例如host# mkfs.ext4 /dev/vg0/mylv_root
),那麼安裝程式將檢測並允許將它們用作「虛擬磁碟的分割區1」。然後它甚至可以重新格式化分割區。
但是 Grub 將無法安裝,可以使用直接核心引導來代替。