1. 程式人生 > 實用技巧 >一次邏輯卷恢復過程記錄

一次邏輯卷恢復過程記錄

一、背景

1、Long long ago,製作了一個CentOS7.6的虛機模板,該模板在建立分割槽的時候,選擇了自動分割槽。系統自動將第一個分割槽vda1掛載了/boot目錄,將第二個分割槽vda2使用了邏輯卷管理。系統建立的卷組名為“cl”,建立了兩個邏輯卷分別掛載/和SWAP,磁碟情況如下:
# lsblk
NAME          MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
vda           252:0    0   40G  0 disk
├─vda1        252:1    0    1G  0 part /boot
└─vda2        252:2    0   39G  0 part
  ├─cl-root   253:0    0 35.1G  0 lvm  /
  └─cl-swap   253:1    0  3.9G  0 lvm  [SWAP]
2、使用該虛機模板建立了三臺虛機給某部門使用。某天,重啟三臺虛機後,兩臺虛機無法正常引導進入系統,有告警提示:/dev/cl/boot和/dev/cl/swap不存在。

3、 檢查發現:這兩臺虛機只能識別到vda2分割槽,vda2分割槽上的邏輯卷卻無法識別,另外那一臺正常的虛機上LVM能夠正常識別並訪問。隨即,將兩臺故障虛機關機,將其中一臺的磁碟檔案拷貝了一份,掛載到另外一個ubuntu16.04的虛機上做恢復測試。ubuntu將掛載的盤識別為vdc,識別的磁碟情況如下:
# lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
vdc             253:32   0   40G  0 disk
├─vdc1          253:33   0    1G  0 part 
└─vdc2          253:34   0   39G  0 part

二、恢復過程記錄

棘手的是,該邏輯卷掛載了根分割槽,現在磁碟上的邏輯卷header資訊丟失,導致根目錄沒法訪問,因此係統自動備份的邏輯卷配置資訊檔案/etc/lvm/backup/cl檔案也無法訪問了。做了一些嘗試,最終恢復了磁碟上的邏輯卷資訊,也找到了原因。思路與過程如下:
因為三臺虛機使用同一個模板部署,且未對分割槽做過調整,因此考慮使用正常的那個虛機的/etc/lvm/backup/cl檔案嘗試重建邏輯卷。

1、由於當前的vdc2型別不是物理卷(pv),因此首先將vdc2建立為物理卷: pvcreate /dev/vdc2
2、建立物理卷後,vdc2的uuid會改變,檢視vdc2的新uuid:

# blkid
/dev/vdc2: UUID="0U1NpX-jkXy-WX5j-64UB-Fu2h-F7OV-eYwQPc" TYPE="LVM2_member" PARTUUID="000a4ff0-02"

3、從正常虛機中複製出/etc/lvm/backup/cl檔案內容,在ubuntu系統重建該檔案(相同路徑和檔名)。
4、修改ubuntu上的/etc/lvm/backup/cl檔案,將pv0專案中的id改為新的uuid,將device從"/dev/vda2"(原系統的分割槽名)改為"/dev/vdc2"(ubuntu中掛載的分割槽名)
5、使用vgcfgrestore命令恢復邏輯卷:vgcfgrestore命令的作用是可以從一個檔案備份中恢復卷組的元資料。預設會讀取/etc/lvm/backup/cl檔案,也也可以用-f引數指定檔案:

# vgcfgrestore cl
  Restored volume group cl

6、此時可以使用 vgscan、lvscan命令檢視到cl卷組和root、swap兩個lv,但沒有啟用,沒法掛載到目錄裡:

# vgscan
  Reading all physical volumes.  This may take a while...
  Found volume group "cl" using metadata type lvm2
# lvscan
  inactive          '/dev/cl/swap' [3.88 GiB] inherit
  inactive          '/dev/cl/root' [35.12 GiB] inherit

7、使用vgchange命令啟用cl卷組,lvm恢復成功,可以正常識別、掛載:

# vgchange -ay cl
  2 logical volume(s) in volume group "cl" now active

# lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
vdb             253:16   0   40G  0 disk
├─vdc1          253:17   0    1G  0 part
└─vdc2          253:18   0   39G  0 part
  ├─cl-swap     252:1    0  3.9G  0 lvm
  └─cl-root     252:2    0 35.1G  0 lvm

8、重新將恢復後的磁碟檔案掛載回原CentOS7.6虛機,系統能夠正常引導。

檢查系統歷史命令發現,原來有運維人員誤操作,使用sgdisk命令誤將/dev/vda2分割槽的頭部資訊刪除了,導致邏輯卷的header資訊丟失。因為系統一直沒有重啟過,所以該問題一直沒有暴露。

三、備份(待完成)

通過這次事件,認識到對分割槽資訊和邏輯卷資訊做自動備份是很重要的,並且,備份檔案應該儲存在不同的分割槽甚至是不同磁碟、不同伺服器。需要備份的資訊主要為

1、分割槽資訊

  lsblk
  df -T
  fdisk -l
  parted -l

備份MBR分割槽表
# dd if=/dev/sda of=sda.mbr bs=512 count=1

備份GPT分割槽表
# dd if=/dev/sda of=sda.gpt bs=512 count=34

2、邏輯卷資訊的備份:

# tar -zcf lvmbak.tgz /etc/lvm/

# vgcfgbackup -f lvmcfg_%s.txt
  Volume group "VGdata" successfully backed up.
  Volume group "cl" successfully backed up.

# ll -h
-rw-r--r--. 1 root root  28K 8月   5 16:07 lvmbak.tgz
-rw-------. 1 root root 1.8K 8月   5 15:38 lvmcfg_cl.txt
-rw-------. 1 root root 1.4K 8月   5 15:38 lvmcfg_VGdata.txt