歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> 從崩潰的Linux系統中搶救LVM物理卷數據

從崩潰的Linux系統中搶救LVM物理卷數據

日期:2017/2/28 15:34:07   编辑:Linux教程
本文筆記了一次從已經崩潰的LVM文件系統中搶救數據的過程。

================================================================================
(1) 系統和操作環境
================================================================================
Old crashed system environment(舊系統中有兩個磁盤):
/dev/hda1 pv0 VolGroup00 LogVol00
/dev/hdb1 pv1 VolGroup00 LogVol00

New recover system environment(將舊磁盤掛到一個搶救環境之中):
/dev/hda1 pv0 VolGroup00 LogVol00
/dev/hdb1 pv0 VolGroup01 LogVol00 <<< old hda1
/dev/hdc1 pv1 VolGroup01 LogVol00 <<< old hdb1


================================================================================
(2) Retrieve old system's LVM configuration(VGDA - Volume Group Descriptor Area)
================================================================================
Retrieve partition table from hard disk device(復制舊磁盤的分區表):
# sfdisk -d /dev/hdb > /tmp/hdb.pt
# sfdisk -d /dev/hdc > /tmp/hdc.pt


Retrieve(復制舊磁盤的頭部,可用以讀取舊的LVM的配置信息):
# dd if=/dev/hdb bs=512 count=255 skip=1 of=/tmp/hdb.bs
# dd if=/dev/hdc bs=512 count=255 skip=1 of=/tmp/hdc.bs
Note: the LVM configuration may be saved in several location.


Search keyword "VolGroup" in partition table(all VGDA are same in PVs):
# less /tmp/hdb.bs
# less /tmp/hdc.bs
(讀取和查找LVM的配置信息,然後復制其內容,建立一個搶救文件,以供恢復使用)

Create LVM configuration file for restoring later(根據讀取結果,創建一個LVM配置):
Please refer the current LVM configuration settings(可參考目前的LVM配置文件格式):
You can get the configuration with command vgcfgbackup(備份命令建立一個LVM配置):
# vgcfgbackup -d -v VolGroup00 --file /tmp/VolGroup00.bak;


********************************************************************************
如下是本次的搶救文件內容,因為搶救系統本身也使用LVM,所以需要手工修改部分名稱。
********************************************************************************
vim /tmp/VolGroup01.save; #Change VG name and device if need;
--------------------------------------------------------------------------------
contents = "Text Format Volume Group"
version = 1
description = ""
creation_host = "localhost.localdomain"
creation_time = 1258044126 # Thu Nov 12 16:42:06 2008
VolGroup01 {
id = "SRrnnD-aKdW-bzvR-4YHU-LaEb-ZDuU-B7njtu"
seqno = 2
status = ["RESIZEABLE", "READ", "WRITE"]
flags = []
extent_size = 65536
max_lv = 0
max_pv = 0
physical_volumes {
pv0 {
id = "WX8RyD-cDou-FZFb-WC6I-YV3d-XiyF-AyfYRL"
device = "/dev/hdb1"
status = ["ALLOCATABLE"]
flags = []
dev_size = 60050907
pe_start = 384
pe_count = 916
}
pv1 {
id = "3p6KZ4-yExY-Im0l-Lxfv-ExbP-dCKa-uB5SMA"
device = "/dev/hdc1"
status = ["ALLOCATABLE"]
flags = []
dev_size = 80084025
pe_start = 384
pe_count = 1221
}
}
logical_volumes {
LogVol00 {
id = "ZcJbUU-eXv3-Lmkd-2qX2-83UN-rbxP-j2ehlE"
status = ["READ", "WRITE", "VISIBLE"]
flags = []
segment_count = 2
segment1 {
start_extent = 0
extent_count = 1221
type = "striped"
stripe_count = 1 # linear
stripes = [
"pv1", 0
]
}
segment2 {
start_extent = 1221
extent_count = 900
type = "striped"
stripe_count = 1 # linear
stripes = [
"pv0", 0
]
}
}
}
}
--------------------------------------------------------------------------------
注:以上將卷組改名為VolGroup01,物理卷的設備路徑也要相應修改;


================================================================================
(3) Recover恢復數據
================================================================================
Backup current LVM configuration(備份當前系統的LVM配置):
vgcfgbackup -d -v VolGroup00 --file /tmp/VolGroup00.bak;


Restore old LVM configuration from /tmp/VolGroup01.save(從搶救文件中恢復配置);
# vgcfgrestore --file /tmp/VolGroup01.save VolGroup01;


********************************************************************************
如有需要,請參考vgcfgrestore命令的說明:
********************************************************************************
# lvm help vgcfgrestore
--------------------------------------------------------------------------------
vgcfgrestore: Restore volume group configuration
vgcfgrestore
[-d|--debug]
[-f|--file filename]
[-l[l]|--list [--list]]
[-M|--metadatatype 1|2]
[-h|--help]
[-t|--test]
[-v|--verbose]
[--version]
VolumeGroupName
--------------------------------------------------------------------------------


#Activate the LVM's(啟動LVM卷組):
# vgchange -ay;

# vgscan
--------------------------------------------------------------------------------
Reading all physical volumes. This may take a while...
Found volume group "VolGroup01" using metadata type lvm2
Found volume group "VolGroup00" using metadata type lvm2
--------------------------------------------------------------------------------

# lvscan
--------------------------------------------------------------------------------
ACTIVE '/dev/VolGroup01/LogVol00' [66.28 GB] inherit
ACTIVE '/dev/VolGroup00/LogVol00' [36.66 GB] inherit
--------------------------------------------------------------------------------

# /bin/ls -l /dev/mapper/
--------------------------------------------------------------------------------
crw------- 1 root root 10, 63 Oct 6 23:35 control
brw-rw---- 1 root disk 253, 0 Oct 6 23:36 VolGroup00-LogVol00
brw-rw---- 1 root disk 253, 2 Oct 8 19:53 VolGroup01-LogVol00
--------------------------------------------------------------------------------


將所恢復的LVM邏輯卷掛載,然後復制數據:
# mkdir /mnt/vgtmp
# mount /dev/mapper/VolGroup01-LogVol00 /mnt/vgtmp
(成功復制數據之後,搶救任務完成)
Copyright © Linux教程網 All Rights Reserved