在我的 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。虽然数据空间耗尽不是一个大问题,但元数据耗尽可能会产生更大的影响。不要让这种情况发生。