1. 程式人生 > >記一次linux pv missing故障

記一次linux pv missing故障

現象描述:

linux一個邏輯卷lv_home丟失,無法正常掛載,之前掛載在/home目錄下:

[root@VM001 ~]# cat /etc/fstab 
.......
/dev/VolGroup/lv_home   /home                   ext4    defaults        0 0

檢視檔案系統掛載情況,發現lv_home並沒有掛載:

[root@VM001 ~]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/VolGroup-lv_root
                       20
G 7.3G 12G 40% / tmpfs 3.9G 224K 3.9G 1% /dev/shm /dev/xvda1 477M 124M 328M 28% /boot

嘗試手動掛載發現找不到lv_home這個邏輯卷:

[root@VM0001 ~]# mount /dev/VolGroup/lv_
lv_root  lv_swap  
[root@VM001 ~]# cd /dev/VolGroup/
[root@VM000000875 VolGroup]# ls
lv_root  lv_swap
[root@VM001 VolGroup]# ll
total 0
lrwxrwxrwx. 1 root root 7 Jul 31 11:06 lv_root -> ../dm-0 lrwxrwxrwx. 1 root root 7 Jul 31 11:06 lv_swap -> ../dm-1

檢視邏輯卷狀態,發現處於異常狀態(NOT available):

[root@VM001 VolGroup]# lvdisplay  
.......
  --- Logical volume ---
  LV Path                /dev/VolGroup/lv_home
  LV Name                lv_home
  VG Name                VolGroup
  LV UUID                4
rdajn-62q9-RX5T-QorD-vLsh-hMEv-zxT1Qj LV Write Access read/write LV Creation host, time localhost.localdomain, 2016-03-17 09:19:33 +0800 LV Status NOT available LV Size 1.17 TiB Current LE 306815 Segments 3 Allocation inherit Read ahead sectors auto
[[email protected] VolGroup]# lvscan 
  ACTIVE            '/dev/VolGroup/lv_root' [20.00 GiB] inherit
  ACTIVE            '/dev/VolGroup/lv_swap' [5.00 GiB] inherit
  inactive          '/dev/VolGroup/lv_home' [1.17 TiB] inherit

問題排查:

執行vgdisplay -v命令有2個pv missing資訊,此處為關鍵報錯資訊:

[[email protected] ~]# vgdisplay -v
    Using volume group(s) on command line.
    Finding all volume groups.
    Wiping cache of LVM-capable devices
    There are 2 physical volumes missing.
    There are 2 physical volumes missing.
  --- Volume group ---
  VG Name               VolGroup
  System ID             
  Format                lvm2
  Metadata Areas        4
...........

檢視pv狀態:

[[email protected] ~]# pvs
  PV         VG       Fmt  Attr PSize    PFree   
  /dev/xvda2 VolGroup lvm2 a-m    49.51g       0 
  /dev/xvda3 VolGroup lvm2 a-m   973.99g       0 
  /dev/xvde  VolGroup lvm2 a--   200.00g       0 
  /dev/xvdf1 VolGroup lvm2 a--  1023.99g 1023.99g

檢視pvs引數說明:

# man pvs
.......
NOTES
       The pv_attr bits are:

       1  (d)uplicate, (a)llocatable, (u)sed

       2  e(x)ported

       3  (m)issing

可以確認/dev/xvda2和/dev/xvda3兩個物理卷狀態為missing(a-m).

問題解決:

用vgextend - -restoremissing命令成功恢復pv到正常狀態:

man vgextend有如下說明:

# man vgextend
.......
DESCRIPTION
       vgextend adds one or more PVs to a VG. This increases the space available for LVs in the VG.

       Also,  PVs  that have gone missing and then returned, e.g. due to a transient device failure, can be added back to the VG without re-initializing them
       (see --restoremissing).
.......
- -restoremissing
Add a PV back into a VG after the PV was missing and then returned, e.g. due to a transient failure. The PV is not reinitialized
# 在PV丟失後再將PV新增到VG中,然後返回,例如由於瞬時故障。沒有重新初始化PV。

命令格式:

# vgextend VG PV

執行命令:

# vgextend --restoremissing VolGroup /dev/xvda2
# vgextend --restoremissing VolGroup /dev/xvda2

執行完成以後檢視pv狀態,已經恢復正常:

[[email protected] ~]# pvs
  PV         VG       Fmt  Attr PSize    PFree   
  /dev/xvda2 VolGroup lvm2 a--    49.51g       0 
  /dev/xvda3 VolGroup lvm2 a--   973.99g       0 
  /dev/xvde  VolGroup lvm2 a--   200.00g       0 
  /dev/xvdf1 VolGroup lvm2 a--  1023.99g 1023.99g

再檢視lv狀態,也恢復正常,能夠正常掛載並進行擴容:

[root@VM001 ~]# vgdisplay -v
    Using volume group(s) on command line.
    Finding all volume groups.
  --- Volume group ---
  VG Name               VolGroup
  System ID 
............
  --- Logical volume ---
  LV Path                /dev/VolGroup/lv_home
  LV Name                lv_home
  VG Name                VolGroup
  LV UUID                4rdajn-62q9-RX5T-QorD-vLsh-hMEv-zxT1Qj
  LV Write Access        read/write
  LV Creation host, time localhost.localdomain, 2016-03-17 09:19:33 +0800
  LV Status              available
  # open                 1
  LV Size                2.15 TiB
  Current LE             562815
  Segments               4
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:2        

手動執行掛載,此時lv_home邏輯卷掛載恢復正常:

[root@VM001 ~]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/VolGroup-lv_root
                       20G  7.3G   12G  40% /
tmpfs                 3.9G  224K  3.9G   1% /dev/shm
/dev/xvda1            477M  124M  328M  28% /boot
/dev/mapper/VolGroup-lv_home
                      2.2T  1.2T  876G  58% /home

網上看到的其他類似問題:

案例1:
執行lvextend -l +100%FREE /dev/VolGroup00/LogVol00的時候,出現瞭如下錯誤:

Device still marked missing because of allocated data on it, remove volumes and consider bgreduce --removemissing.

在查閱許多資料之後,發現可以使用restoremissing 引數來恢復

[root@Caron ~]# vgextend --restoremissing VolGroup00 /dev/sdh1

再次執行lvextend命令的時候,提示成功。重新resize一下lvm大小:

[root@Caron ~]# resize2fs /dev/VolGroup00/LogVol00
[root@Caron ~]# df -h | more
Filesystem                       Size  Used Avail Use% Mounted on
/dev/mapper/VolGroup00-LogVol00  936G  612G  283G  69% /
devtmpfs                         126G     0  126G   0% /dev
tmpfs                            126G     0  126G   0% /dev/shm
tmpfs                            126G  4.1G  122G   4% /run
tmpfs                            126G     0  126G   0% /sys/fs/cgroup
/dev/sda1                        283M  100M  164M  38% /boot
tmpfs                            126G  4.1G  122G   4% /run/netns
tmpfs                             26G     0   26G   0% /run/user/0

案例2:

1.PV丟失的故障處理,手工建立邏輯卷失敗,報錯顯示有PV丟失:

[root@node29archive]# lvcreate -L 1G -n testlv vgcloud
Cannotchange VG vgcloud while PVs are missing.
Considervgreduce --removemissing.

2.進一步檢視:

[root@node29archive]# pvs
  PV                   VG      Fmt Attr PSize PFree 
  /dev/mapper/mpathbp1 vgcloud lvm2 a--  1.82t 89.40g
  /dev/mapper/mpathbp2 vgcloud lvm2 a--  1.82t 91.14g
  /dev/mapper/mpathbp3 vgcloud lvm2 a--  1.82t 30.14g
  /dev/mapper/mpathbp4 vgcloud lvm2 a--  1.64t 30.00g
  /dev/mapper/mpathcp1 vgcloud lvm2 a-m  1.82t 84.14g
  /dev/mapper/mpathcp2 vgcloud lvm2 a-m  1.82t 117.14g
  /dev/mapper/mpathcp3 vgcloud lvm2 a-m  1.82t  1.33t
  /dev/mapper/mpathcp4 vgcloud lvm2 a--  1.81t  1.81t
[root@node29archive]# vgs
  VG     #PV #LV #SN Attr   VSize  VFree
  vgcloud  8 126   0 wz-pn- 14.36t 3.58t

其中發現有三個邏輯卷處於missing的狀態

3.經過查詢資料得知可以使用vgextend –restoremissing操作解決

[[email protected]]# vgextend --restoremissing vgcloud /dev/mapper/mpathcp1

  Volume group "vgcloud" successfullyextended

[[email protected]]# vgextend --restoremissing vgcloud /dev/mapper/mpathcp2

  Volume group "vgcloud" successfullyextended

[[email protected]]# vgextend --restoremissing vgcloud /dev/mapper/mpathcp3

  Volume group "vgcloud" successfullyextended

4.再看已經沒有missing狀態標示了,手工建立邏輯卷

[root@node29archive]# lvcreate -L 1G -n testlv vgcloud

  Logical volume "testlv" created