使用Knoppix Linux LiveCD从RAID1 LVM分区恢复数据
版本1.0
作者:Till Brehm <t.brehm [at] projektfarm [dot] com>
最后编辑:04/11/2007
本教程介绍如何从作为LVM2 RAID1设置的一部分的单个硬盘中拯救数据,如由Fedora Core安装程序创建的。 为什么恢复数据有问题? 以前是LVM RAID1安装程序的一部分的每个硬盘包含存储在RAID中的所有数据,但硬盘不能简单地安装。 首先,必须为分区配置RAID设置,然后必须设置LVM才能使用(这些)RAID分区,然后才能安装。 我将使用Knoppix Linux LiveCD进行数据恢复。
先决条件
本教程使用了Knoppix 5.1 LiveCD。 从这里下载CD ISO映像并将其刻录在CD上,然后将包含RAID分区的硬盘连接到主板的IDE / ATA控制器,将Knoppix CD放入CD驱动器并从CD引导。
我使用的硬盘是连接到第一个IDE控制器(hda)的IDE驱动器。 在我的情况下,硬盘只包含一个分区。
恢复袭击
Knoppix启动后,打开一个shell并执行命令:
sudo su
成为root用户。
由于我没有mdadm.conf
文件从原始配置,我用这个命令创建它:
mdadm --examine --scan /dev/hda1 >> /etc/mdadm/mdadm.conf
结果应该与此相似:
DEVICE partitions
CREATE owner=root group=disk mode=0660 auto=yes metadata=1
MAILADDR root
ARRAY /dev/md0 level=raid1 num-devices=2 UUID=a28090aa:6893be8b:c4024dfc:29cdb07a
编辑文件并添加设备= / dev / hda1,
在描述RAID阵列的行末尾缺少
。
vi /etc/mdadm/mdadm.conf
最后文件看起来像这样:
DEVICE partitions
CREATE owner=root group=disk mode=0660 auto=yes metadata=1
MAILADDR root
ARRAY /dev/md0 level=raid1 num-devices=2 UUID=a28090aa:6893be8b:c4024dfc:29cdb07a devices=/dev/hda1,missing
字符串/ dev / hda1
是硬件设备, 缺少
意味着此RAID阵列中的第二个磁盘目前不存在。
编辑文件/ etc / default / mdadm
:
vi /etc/default/mdadm
并换行:
AUTOSTART=false
至:
AUTOSTART = true
现在我们可以开始我们的RAID设置:
/etc/init.d/mdadm start
/etc/init.d/mdadm-raid start
要检查我们的RAID设备是否正常,请运行以下命令:
cat /proc/mdstat
输出应如下所示:
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [ra id10]
md0 : active raid1 hda1[1]
293049600 blocks [2/1] [_U]
未使用的设备:<none>
恢复LVM设置
LVM配置文件无法通过简单的命令(如mdadm.conf)创建
,但是LVM在分区开头
存储一个或多个配置文件内容副本。 我使用命令dd
来提取分区的第一部分并将其写入文本文件:
dd if=/dev/md0 bs=512 count=255 skip=1 of=/tmp/md0.txt
用文本编辑器打开文件:
vi /tmp/md0.txt
你会首先找到一些二进制数据,然后是一个这样的配置文件:
VolGroup00 { id = "evRkPK-aCjV-HiHY-oaaD-SwUO-zN7A-LyRhoj" seqno = 2 status = ["RESIZEABLE", "READ", "WRITE"] extent_size = 65536 # 32 Megabytes max_lv = 0 max_pv = 0 physical_volumes { pv0 { id = "uMJ8uM-sfTJ-La9j-oIuy-W3NX-ObiT-n464Rv" device = "/dev/md0" # Hint only status = ["ALLOCATABLE"] pe_start = 384 pe_count = 8943 # 279,469 Gigabytes } } logical_volumes { LogVol00 { id = "ohesOX-VRSi-CsnK-PUoI-GjUE-0nT7-ltxWoy" status = ["READ", "WRITE", "VISIBLE"] segment_count = 1 segment1 { start_extent = 0 extent_count = 8942 # 279,438 Gigabytes type = "striped" stripe_count = 1 # linear stripes = [ "pv0", 0 ] } } } }
创建文件/ etc / lvm / backup / VolGroup00
:
vi /etc/lvm/backup/VolGroup00
并插入配置数据,使文件看起来类似于上面的例子。
现在我们可以启动LVM:
/etc/init.d/lvm start
阅读卷:
vgscan
Reading all physical volumes. This may take a while...
Found volume group "VolGroup00" using metadata type lvm2
pvscan
PV /dev/md0 VG VolGroup00 lvm2 [279,47 GB / 32,00 MB free]
Total: 1 [279,47 GB] / in use: 1 [279,47 GB] / in no VG: 0 [0 ]
并激活音量:
vgchange VolGroup00 -a y
1 logical volume(s) in volume group "VolGroup00" now active
现在我们可以将分区挂载到/ mnt / data
:
mkdir /mnt/data
mount /dev/VolGroup00/LogVol00 /mnt/data/
如果从UTF-8格式的文件名的硬盘中恢复数据,可能需要将它们转换为当前的非UTF-8区域设置。 在我的情况下,RAID硬盘来自具有UTF-8编码文件名的Fedora Core系统。 我的目标语言环境是ISO-8859-1。 在这种情况下,Perl脚本convmv
有助于将文件名
转换为目标区域设置。
安装convmv
cd /tmp
wget http://j3e.de/linux/convmv/convmv-1.10.tar.gz
tar xvfz convmv-1.10.tar.gz
cd convmv-1.10
cp convmv /usr/bin/convmv
要将/ mnt / data
中的所有文件名转换为ISO-8859-1区域设置,请运行以下命令:
convmv -f UTF-8 -t ISO-8859-1 -r --notest /mnt/data/*
如果要首先测试转换,请使用:
convmv -f UTF-8 -t ISO-8859-1 -r /mnt/data/*