通过Openstack创建卷的过程,遇到一个奇怪的问题,开始卷可以创建成功,卷写入也没有问题。但是创建多个卷后发现无法创建,已创建的卷也无法写入。在已创建的卷上创建文件系统总是显示::
/dev/vdb: write failed after 0 of 4096 at 0: Input/output error
开始以为是磁盘错误,所以通过chkblk等命令检查磁盘,并没有发现问题。
然后测试创建新的卷,检查cinder-volume的日志,发现:
oslo_messaging.rpc.server Stderr: u'File descriptor 20 (/dev/urandom) leaked on lvcreate invocation. Parent PID 769: /usr/bin/python2\n Thin pool cinder--volumes-cinder--volumes--pool-tpool (253:2) transaction_id is 91, while expected 92.\n Failed to suspend cinder-volumes/cinder-volumes-pool with queued messages.\n'
看样子是后台lvm出现的问题。
检查后台lvm,发现空间还有空余,但是metadata的空间已经满了:
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
cinder-volumes-pool cinder-volumes twi-aotz-- <509.54g 17.81 100
volume-235d0896-9f64-4199-bafb-259fc3d862d5 cinder-volumes Vwi-aotz-- 100.00g cinder-volumes-pool 10.08
volume-32d210e6-bff0-4b72-b74d-aaf130576f59 cinder-volumes Vwi-aotz-- 100.00g cinder-volumes-pool 0.56
volume-46da9715-ffda-49b9-9426-3fd315dae873 cinder-volumes Vwi-aotz-- 40.00g cinder-volumes-pool 38.18
volume-4d056bf3-c8f6-4fb2-b870-695b8416b178 cinder-volumes Vwi-aotz-- 100.00g cinder-volumes-pool 0.55
volume-4d42f4f2-c795-48f4-875d-e910d63a5490 cinder-volumes Vwi-aotz-- 100.00g cinder-volumes-pool 10.08
volume-59af0aa2-e946-4c62-8bf2-00cc7f9f8161 cinder-volumes Vwi-aotz-- 100.00g cinder-volumes-pool 0.55
不清楚为啥数据还有这么多空余,而metadata居然满了。查了一下文档发现thinpool的空间默认只有12M,果断增大thinpool的metadata的空间:
lvextend cinder-volumes/cinder-volumes-pool--poolmetadatasize -L+512M
之后发现创建新的卷还是失败。通过搜索相关日志,发现cinder-volumes-pool的transcation id已经出现损坏的数据,发现网上还有相关的修复的方法,尝试了一下:
vgcfgbackup cinder-volumes -f ~/backup
导出volume group的配置,找到cinder-volumes-pool的描述,然后修改transaction_id,重新导入
vgcfgrestore cinder-volumes -f ~/backup
这样就修复了lvm系统,可以创建新卷,已创建的卷也能够写入了。