一、故障描述
应客户需求扩容Linux文件系统。实施过程中,将硬盘映射给主机,创建PV并添加到VG后,系统提示“unknown device”
[root@KMS-Svr cache]# pvs
Incorrect metadata area header checksum on /dev/sdb1 at offset 4096
Couldn't find device with uuid ZPy1sa-fXhe-qrcQ-HFhi-eazU-4Mg3-toY3Xv.
PV VG Fmt Attr PSize PFree
/dev/sda2 vg_testkmssvr lvm2 a-- 149.51g 0
/dev/sdb1 lvm2 a-- 499.99g 499.99g
/dev/sdc1 vg_testkmssvr lvm2 a-- 100.00g 0
/dev/sdd vm2t lvm2 a-- 2.00t 0
/dev/sde vm2t lvm2 a-- 2.20t 0
/dev/sdf1 vm2t lvm2 a-- 2.00t 0
/dev/sdg vm2t lvm2 a-- 2.00t 0
/dev/sdh vm2t lvm2 a-- 2.00t 0
/dev/sdi vm2t lvm2 a-- 2.00t 0
/dev/sdj vm2t lvm2 a-- 2.00t 0
/dev/sdk1 vm2t lvm2 a-- 1.86t 74.36g
/dev/sdk2 vg_testkmssvr lvm2 a-- 140.64g 19.63g
unknown device vm2t lvm2 a-m 2.00t 2.00t
二、故障处理
2.1 日志分析
查看messages日志无特殊报错内容。dmesg日志如下:
sd 2:0:12:0: [sdl] Very big device. Trying to use READ CAPACITY(16).
sd 2:0:12:0: [sdl] Cache data unavailable
sd 2:0:12:0: [sdl] Assuming drive cache: write through
sdl: sdl1
sd 2:0:12:0: [sdl] Very big device. Trying to use READ CAPACITY(16).
sd 2:0:12:0: [sdl] Cache data unavailable
sd 2:0:12:0: [sdl] Assuming drive cache: write through
sdl: sdl1
EXT4-fs (dm-2): warning: checktime reached, running e2fsck is recommended
EXT4-fs (dm-2): mounted filesystem with ordered data mode. Opts:
通过dmesg日志的输出,可以看到OS层面成功识别到了新增加的磁盘。与客户沟通得知,此块磁盘之前在其他主机上使用过,旧主机已下线。工程师推测硬盘上保存了旧主机的VG/PV信息,需要对其进行进一步处理。
2.2 剔除问题磁盘
运行命令:vgreduce vm2t --removemissing
[root@KMS-Svr cache]# vgreduce vm2t --removemissing
Incorrect metadata area header checksum on /dev/sdb1 at offset 4096
Couldn't find device with uuid ZPy1sa-fXhe-qrcQ-HFhi-eazU-4Mg3-toY3Xv.
Wrote out consistent volume group vm2t
[root@KMS-Svr cache]# vgs
Incorrect metadata area header checksum on /dev/sdb1 at offset 4096
VG #PV #LV #SN Attr VSize VFree
vg_testkmssvr 3 3 0 wz--n- 390.14g 19.63g
vm2t 8 1 0 wz--n- 16.06t 74.36g
[root@KMS-Svr cache]# pvs
Incorrect metadata area header checksum on /dev/sdb1 at offset 4096
PV VG Fmt Attr PSize PFree
/dev/sda2 vg_testkmssvr lvm2 a-- 149.51g 0
/dev/sdb1 lvm2 a-- 499.99g 499.99g
/dev/sdc1 vg_testkmssvr lvm2 a-- 100.00g 0
/dev/sdd vm2t lvm2 a-- 2.00t 0
/dev/sde vm2t lvm2 a-- 2.20t 0
/dev/sdf1 vm2t lvm2 a-- 2.00t 0
/dev/sdg vm2t lvm2 a-- 2.00t 0
/dev/sdh vm2t lvm2 a-- 2.00t 0
/dev/sdi vm2t lvm2 a-- 2.00t 0
/dev/sdj vm2t lvm2 a-- 2.00t 0
/dev/sdk1 vm2t lvm2 a-- 1.86t 74.36g
/dev/sdk2 vg_testkmssvr lvm2 a-- 140.64g 19.63g
可以发现此时磁盘状态正常,但在pvs命令输出中查询不到。尝试通过fdisk -l命令查询:
Disk /dev/sdl: 2199.0 GB, 2199023255552 bytes
255 heads, 63 sectors/track, 267349 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x9706bba2
Device Boot Start End Blocks Id System
/dev/sdl1 1 267349 2147480811 8e Linux LVM
结合lsblk命令查询,此时OS层面有sdl这块磁盘,并且已有分区sdl1,需重新创建PV并加到指定VG中。
2.3 重新创建PV
运行命令: pvcreate /dev/sdl1 --force
[root@KMS-Svr cache]# pvcreate /dev/sdl1 --force
Physical volume "/dev/sdl1" successfully created
[root@KMS-Svr cache]# pvs
Incorrect metadata area header checksum on /dev/sdb1 at offset 4096
PV VG Fmt Attr PSize PFree
/dev/sda2 vg_testkmssvr lvm2 a-- 149.51g 0
/dev/sdb1 lvm2 a-- 499.99g 499.99g
/dev/sdc1 vg_testkmssvr lvm2 a-- 100.00g 0
/dev/sdd vm2t lvm2 a-- 2.00t 0
/dev/sde vm2t lvm2 a-- 2.20t 0
/dev/sdf1 vm2t lvm2 a-- 2.00t 0
/dev/sdg vm2t lvm2 a-- 2.00t 0
/dev/sdh vm2t lvm2 a-- 2.00t 0
/dev/sdi vm2t lvm2 a-- 2.00t 0
/dev/sdj vm2t lvm2 a-- 2.00t 0
/dev/sdk1 vm2t lvm2 a-- 1.86t 74.36g
/dev/sdk2 vg_testkmssvr lvm2 a-- 140.64g 19.63g
/dev/sdl1 lvm2 a-- 2.00t 2.00t
运行命令:vgextend vm2t /dev/sdl1
[root@KMS-Svr cache]# vgs
Incorrect metadata area header checksum on /dev/sdb1 at offset 4096
VG #PV #LV #SN Attr VSize VFree
vg_testkmssvr 3 3 0 wz--n- 390.14g 19.63g
vm2t 9 1 0 wz--n- 18.06t 2.07t
[root@KMS-Svr cache]# pvs
Incorrect metadata area header checksum on /dev/sdb1 at offset 4096
PV VG Fmt Attr PSize PFree
/dev/sda2 vg_testkmssvr lvm2 a-- 149.51g 0
/dev/sdb1 lvm2 a-- 499.99g 499.99g
/dev/sdc1 vg_testkmssvr lvm2 a-- 100.00g 0
/dev/sdd vm2t lvm2 a-- 2.00t 0
/dev/sde vm2t lvm2 a-- 2.20t 0
/dev/sdf1 vm2t lvm2 a-- 2.00t 0
/dev/sdg vm2t lvm2 a-- 2.00t 0
/dev/sdh vm2t lvm2 a-- 2.00t 0
/dev/sdi vm2t lvm2 a-- 2.00t 0
/dev/sdj vm2t lvm2 a-- 2.00t 0
/dev/sdk1 vm2t lvm2 a-- 1.86t 74.36g
/dev/sdk2 vg_testkmssvr lvm2 a-- 140.64g 19.63g
/dev/sdl1 vm2t lvm2 a-- 2.00t 2.00t
将PV中的“/dev/sdl1”磁盘添加到指定vm2t的VG里,使用PVS查看添加成功。
三、经验总结
在LVM块设备状态不正常或出现“unknown device”时,可以使用vgscan 重新扫描系统中所有受支持的LVM块设备,将有问题的pv将其剔除所在VG中,以此获取VG正常状态。
四、知识拓展
4.1 Vgscan命令使用方法
vgscan [ option_args ]
vgscan
[ –cache ] 扫描所有设备并将元数据发送到lvmetad守护进程。
[ –ignorelockingfailure ] 锁定失败后,允许命令继续以只读元数据操作执行。
[ –mknodes ] 还检查活动LV所需的/dev中的LVM特殊文件,并创建任何丢失的文件,并删除未使用的文件。
[ –notifydbus ] 向D-Bus发送通知。 如果未构建支持D-Bus通知的LVM,或者如果禁用了notify_dbus配置设置,则该命令将退出并显示错误。
[ –reportformat basic|json ] 覆盖报告的当前输出格式,该格式由lvm.conf中的report/output_format设置全局定义。 basic是包含列和行的原始格式。
4.2 LVM 文件系统大小限制
当文件系统大于16TB时,执行resize2fs命令会失败。原因是操作系统版本内核太低,如需更大空间文件系统,需要升级操作系统内核。
下图为执行resize2fs命令执行失败报错:
4.3 LVM 与系统内核关系
单个LV的最大空间受CPU架构和Linux内核版本的限制:
a、Linux内核版本2.4.x将文件系统最大限制为2TB;
b、2.4.x之前的一些较早的Linux内核中,文件系统最大限制为1TB;
c、32位CPU和Linux内核版本2.6.x的组合,文件系统最大限制为16TB;
d、对于在64位CPU上运行的Linux内核2.6.x,文件系统最大限制为8EB。
如欲了解更多,请登录安图特官方网站:www.antute.com.cn