最全面的LVM逻辑磁盘数据恢复方案

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

数据恢复需求

2.1Linux IO存储栈

图(1)Linux IO 存储栈

Linux 的存储相关的栈包括如图1所示,最下方为各种硬件存储器,例如SATA,SAS,SSD等硬盘和磁带库等。

2.2存储故障

2.2.1介质故障

•磁盘消失,例如由于线缆或者网络问题造成的磁盘丢失或者ISCSI磁盘链接失败

•磁盘坏道

•偶发的硬件错误

2.2.2错误操作

包括误删除,格式化,重新分区等操作。

2.2.3RAID故障

服务器上的硬盘比较多的应用了RAID(冗余磁盘阵列)来实现数据保护。以多块硬盘环境下常使用的RAID 5为例,当损坏一块硬盘时数据不会受到影响,而这种情况下如果第二块硬盘再损坏(或者更换硬盘时拔错)就会丢失数据。此时要注意硬盘掉线的先后顺序,如果将2块硬盘同时上线则会导致部分数据访问出错,正确的方法是先上线最后出问题的硬盘,看数据是不是我们想要的,再尝试之前掉线的硬盘进行比较。

有些RAID卡在插入掉线的硬盘时会自动尝试Rebuild(重建),这样就会损坏我们需要的数据,因此企业级数据恢复最好还是找专业的公司/人士来进行。有的RAID卡还会出现硬盘完好,而RAID信息丢失的问题。如果用户在运输服务器/磁盘阵列时,将硬盘拆出来单独运输,没有记录安装的顺序,也可能会导致数据无法访问。

2.2.4文件或者文件系统故障

这部分属于高端的数据恢复技术,比如ext2、ext3、reiserfs、XFS…文件系统。Linux/Unix的数据恢复难度较大一方面是由于这些文件系统结构复杂,另一方面则是有些厂商的相关资料不公开,比如IBM的AIX系统。这样我们只能通过不断的摸索,积累经验来“破解”它们的结构,最终能够恢复上面的数据,或者提取出修改文件(属性)的访问记录等。

2.3存储部署对数据丢失的考虑

•通常需要引入冗余(REDUNDANT)和备份(BAKUP)两种机制。•RAID和MIRROR和最常见的存储冗余的实现方式,可以容忍介质故障等问题。

•备份测试可以在错误操作或者文件系统故障时,很容易的恢复数据。3数据恢复策略

3.1数据恢复基本步骤

由于存储故障是无法完全避免的,在出现故障的时候,需要考虑如下的几个基本策略和步骤:

•分析故障,通过分析用户手册,分析系统LOG,检查系统状态等方式定位和分析问题

•在问题没有定位之前,不可以对存储系统作更改操作

•在分析问题之后,必须通过模拟系统测试恢复策略的可行性和风险•寻求专业帮助,通过mail list,BBS,付费支持等方式获取专业的指导

3.2数据恢复方法

3.2.1硬件故障处理

•检查硬盘,数据线,连接部位,电源等问题

•检查Fimware版本,分析对应的Changelog

•磁盘坏扇区,使用二进制的操作执行备份,例如dd命令

3.2.2磁盘分区故障

•检查驱动和内核版本

•通过fdisk ,diskpart, partprobe,gpart等工具分析分区信息

•检查磁盘和分区大小,blockdev,fdisk,sysfs等工具

3.2.3RAID故障

•分析RAID中device,raidset和volume的信息

•查看RAID的配置文件的信息

•尽可能的分析RAID的元数据信息

3.2.4元数据

元数据是指数据的组织结构。通常,有两种方式存储:

)在磁盘上,通常在硬盘的最前面或者最后面预留扇区用于存储元数据

)在配置文件中保存必要的信息

在执行数据恢复的时候,通常需要先修复元数据再修复数据。

4LVM数据恢复

4.1LVM基础

4.1.1LVM的架构

图(2)LVM基础架构

如果所示为Linux Volume Management系统的基础架构,由PV,VG 和LV组成。

4.1.2LVM的on-disk PV结构

PV的基本结构如下:

)标签,占用一个sector,包括签名,UUID,元数据的位置指针

)元数据:占用多个sector

)真正元数据的指针

)循环缓存,文本格式

)原子更新操作

)序列号

)校验码,冗余信息,自动修复信息等

图(3)LVM的PV结构

4.1.3LVM的文本元数据配置

如下为一个/etc/lvm/backup/pool的配置实例:

# Generated by LVM2 version 2.02.42 (2008-10-26): Sat Sep 25 17:36:30 2010

contents = "Text Format Volume Group"

version = 1

description = "Created *after* executing 'lvcreate --name block --size 300G pool'"

creation_host = "zhuweiR30" # Linux zhuweiR30 2.6.28-storix #1 SMP Thu Dec 24 17:25:02 CST 2009 i686

creation_time = 1285407390 # Sat Sep 25 17:36:30 2010

pool {

id = "0Lm9dz-sIeu-t2Ho-qIBR-lD2P-dcbK-K1U4zW"

seqno = 2

status = ["RESIZEABLE", "READ", "WRITE"]

flags = []

extent_size = 8192 # 4 Megabytes

max_lv = 0

max_pv = 0

physical_volumes {

pv0 {

相关文档
最新文档