在我的 Proxmox 6.4 主機上,我有一個 250GB 大的 LVM 精簡池。我在上面創建了一個 Ubuntu VM(也使用 LVM 作為根分割區),但不小心超額訂閱了它,因此 VM 內的 PV 設定為 500GB。
有一段時間一切都運作良好,直到我超過了隱藏的 250GB 限制,虛擬機器因 I/O 錯誤而崩潰並拒絕啟動。所以現在我正在嘗試恢復磁碟。磁碟的分割表看起來完好無損:
$ fdisk -l /dev/vm-disks/vm-101-disk-0
Disk /dev/vm-disks/vm-101-disk-0: 500 GiB, 536870912000 bytes, 1048576000 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 65536 bytes / 65536 bytes
Disklabel type: gpt
Disk identifier: 30874BBC-0B29-4083-B5BF-E973C665D87F
Device Start End Sectors Size Type
/dev/vm-disks/vm-101-disk-0p1 2048 4095 2048 1M BIOS boot
/dev/vm-disks/vm-101-disk-0p2 4096 2101247 2097152 1G Linux filesystem
/dev/vm-disks/vm-101-disk-0p3 2101248 1048573951 1046472704 499G Linux filesystem
我已經跑了
$ kpartx -a /dev/vm-disks/vm-101-disk-0
/dev/mapper
為內部的 3 個分區建立條目vm-101-disk-0
,這樣就可以了。如果我運行:
$ file -sL /dev/mapper/vm--disks-vm--101--disk--0p3
/dev/mapper/vm--disks-vm--101--disk--0p3: LVM2 PV (Linux Logical Volume Manager), UUID: fdOzWR-sPcy-hyYo-Lj2H-YEnZ-wK3c-J6biES, size: 535794024448
然後我可以看到磁碟第三個分割區內的PV。但是我怎麼才能將其安裝在主機的某個位置以開始恢復資料?顯然pvscan
,主機系統看不到它,因為它位於另一個 LV 內。我是否有任何恢復選項,或者虛擬機認為它有 500GB,但實際上並不意味著我已經損壞了它,無法修復?
答案1
當精簡池中的空間耗盡時,虛擬機器剛出現寫入 I/O 錯誤。對於虛擬機器來說,這看起來像是硬碟意外拒絕了所有寫入。因此,如果虛擬機是裸硬件,那麼第一個操作就是找到新硬碟並將這個壞硬碟克隆到其中。硬體修復後,就可以修復邏輯結構了。
對於虛擬機,您沒有任何損壞的硬件,您可以透過恢復精簡卷操作來「修復」「硬碟」。只需擴大精簡池,lvextend
在精簡池LV上使用以添加一些空間即可。
並且,完成後,從某些復原(虛擬)媒體啟動 VM 並執行標準檔案系統復原。請記住,不會有太大困難;現代文件系統通常設計為能夠承受這種故障。
監控精簡 LVM。雖然資料空間耗盡並不是一個大問題,元數據疲憊可能會產生更大的影響。不要允許這種情況發生。