Lvm

恢復嵌套 PV

  • September 11, 2021

在我的 Proxmox 6.4 主機上,我有一個 250GB 大的 LVM 精簡池。我在上面創建了一個 Ubuntu VM(它也使用 LVM 作為根分區),但不小心超額訂閱了它,因此 VM 內的 PV 設置為 500GB。

一切都執行了一段時間,直到我超過了隱藏的 250GB 限制,VM 因 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 的事實實際上並不意味著我已經將其損壞到無法修復?

當精簡池中的空間耗盡時,VM 剛剛出現寫入 I/O 錯誤。對於 VM,這看起來像硬碟意外拒絕所有寫入。因此,如果虛擬機是裸硬體,首先要做的就是找到新的硬碟並將這個壞的硬碟複製到其中。硬體修復後,您可以修復邏輯結構。

在虛擬機的情況下,您沒有任何損壞的硬體,您可以通過恢復精簡卷操作來“修復”“硬碟”。只需擴大精簡池,lvextend在精簡池LV上使用以增加一些空間。

並且,完成後,從一些恢復(虛擬)媒體啟動 VM 並執行標准文件系統恢復。記住,不會有太大的困難;現代文件系統通常旨在承受這種故障。


監控瘦 LVM。雖然數據空間耗盡不是一個大問題,但元數據耗盡可能會產生更大的影響。不要讓這種情況發生。

引用自:https://serverfault.com/questions/1077150