PVE重启后LVM Thin数据丢失,错误:Volume group “****” has insufficient free space (128 extents): 4048 required.

2,361次阅读
没有评论

先聊一点题外话,感觉PVE这玩意儿还不是很稳啊。除本篇文章记录的错误之外,还遇到不少不大不小的问题了。甚至一度想换回ESXI,毕竟ESXI稳的一笔。但ESXI唯一的缺点就是不支持CPU虚拟化和直通同时开启。

故障:重启后lvm thin容器在pve管理界面中显示使用容量为0(实际上已经使用100多个G了),导致虚拟机无法启动。

第一次出现此问题的时候,使用lvconvert命令可以修复。修复命令如下:

lvconvert --repair /dev/local-vd1r1-hdd/local-vd1r1-hdd   #local-vd1r1-hdd为vg名称和lv名称

但是过了没多久,我重启PVE服务器之后再次出现此问题,然而这次使用lvconvert无法修复了,报错如下:

Volume group "******" has insufficient free space (128 extents): 4048 required.

第二次再次出现此问题,就不敢大意了。虽然说现在机器里面的数据少,但是如果以后频繁出现此问题,那就比较糟糕了。

使用vgdisplay查看卷组状态.。

root@cn-hk1:/var/log# vgdisplay
  --- Volume group ---
  VG Name               local-vd1r1-hdd
  System ID             
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  1966
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                452
  Open LV               0
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               <6.52 TiB
  PE Size               4.00 MiB
  Total PE              1708391
  Alloc PE / Size       1708263 / <6.52 TiB
  Free  PE / Size       128 / 512.00 MiB
  VG UUID               ***********************

vgdisplay显示Free PE只有128个区块可用。但是这个vg分明就是在pve管理界面自动创建的,怎么会出现溢出的情况。反正写这篇博客为止,翻遍baidu和google都未找到相关资料,如果有小伙伴知道原因,不妨留言告诉我一下,一定执经叩问。

不管怎么说,至少原因是找到了。既然空闲区块不够,那就给它加上呗。好在LVM的一大特性就是方便扩展。

第一种扩展方式是添加硬盘,加一块硬盘上去,使用fdisk创建Linux LVM分区,然后创建PV,将PVE中创建的VG用vgextent扩展到新加的硬盘即可。

第二种是在pve更目录下创建一个虚拟磁盘。容量不用太大,32G足够。然后将虚拟磁盘挂载到loop,再用fdisk创建Linux LVM分区。这样的好处就是不用新加一块硬盘,缺点就是必须保证pve根目录空间够大

这里重点讲一下第二种方式,第一种方式就是常规的硬盘挂载和分区,没有什么需要注意的地方。直接挂载虚拟磁盘文件在手里面没有多余的储存设备的情况下非常有用。

1、首先创建一个32G的虚拟磁盘文件

dd if=/dev/zero of=~/temp.img bs=1024M count=32       #count大小为32G,可以修改为自己需要的

2、为虚拟磁盘文件创建分区

fdisk ~/temp.img

在创建分区时,注意将Linux filesystem转换为Linux LVM

PVE重启后LVM

3、挂载虚拟磁盘文件

losetup -Pf --show ~/temp.img

命令完成后,将显示挂载到的loop设备,一般是loop0。

其中参数

-P 强制要求核心扫描loop设备中的分区表<br>-f 自动寻找并使用第一个未用的loop设备<br>--show 输出所分配的loop设备

可以使用lsblk命令查看loop0挂载情况,可以看到loop0和分区loop0p1已经挂载到系统上。操作结束后,可以使用losetup -d /dev/loop0卸载虚拟磁盘文件。

4、创建PV

pvcreate /dev/loop0p1

之后就按照lvm扩展的步骤进行扩展,具体扩展方法,就不赘述了,网上有很多相关资料。扩展完成之后,再次使用lvconvert修复lv。

lvconvert --repair /dev/local-vd1r1-hdd/local-vd1r1-hdd

有一点需要注意的就是,如果出现本文中的情况,千万不要去操作虚拟机或者更改出现问题LVM中的虚拟磁盘文件。我手贱去点了一哈恢复快照,然后……血的教训啊。

通过扩展LVM的vg,我是解决了上面的问题,然后火速备份虚拟机中的文件。重装了PVE,然后手动创建LVM分区和LVM-thin瘦池,手动创建的时候,预留了足够的硬盘空闲空间。

希望以后不会再次出现这种问题吧。

管理员
版权声明:本站原创文章,由管理员2021-02-18发表,共计1915字。
转载提示:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
评论(没有评论)
载入中...