在我的 Proxmox 6.4 主机上,我有一个 250GB 大小的 LVM Thin 池。我在其上创建了一个 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
然后我可以在磁盘的第 3 个分区内看到该 PV。但是我如何将其安装到主机中的某个位置以开始恢复数据?显然,pvscan
主机系统看不到它,因为它在另一个 LV 内。我在这里有任何恢复选项吗,或者 VM 认为它有 500GB 但实际上这并不意味着我已经将其损坏到无法修复?
答案1
当精简池中的空间耗尽时,虚拟机刚刚出现写入 I/O 错误。对于虚拟机来说,这看起来像是硬盘意外拒绝了所有写入。因此,如果虚拟机是裸机,则第一个操作是找到新硬盘并将这个坏的硬盘克隆到其中。修复硬件后,您可以修复逻辑结构。
如果是虚拟机,硬件没有损坏,可以通过恢复精简卷操作来“修复”硬盘。只需扩大精简池,lvextend
在精简池 LV 上添加一些空间即可。
完成后,从某些恢复(虚拟)媒体启动虚拟机并执行标准文件系统恢复。请记住,这不会有太大困难;现代文件系统通常设计为可以承受这种故障。
监控精简 LVM。虽然数据空间耗尽并不是一个大问题,但元数据疲劳可能会产生更大的影响。不要让这种情况发生。