Contact Us
Technical Guide
Your current position:Home > Technical Guide
【案例分享】Linux添加磁盘故障处理


一、故障描述


应客户需求扩容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命令执行失败报错:

image001.png

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

版权所有 安图特(北京)科技有限公司 Filing No:京ICP备17074963号-1
Technical Support:Genesis Network