上一篇博客里边写到了VMware虚拟化通过存储LUN快照恢复数据,在里边提到华为虚拟化和其他KVM有区别,这是真的血泪史呀。
事情是这样的,一个客户用的华为云桌面,就是普通架构,传统存储+主机+虚拟化+云桌面组件。存储用的是HUAWEI Oceanstor Dorado5000,主机也用的华为主机,虚拟化用的华为Fusion Compute,云桌面用的华为Fusion ACCESS,存储上做了LUN快照,云桌面没有其他的备份。有一天不小心给一个其他部门领导把云桌面虚拟机给删了。然后人家非要给他恢复数据,这哪恢复呀,当时就没有给云桌面计划备份的空间,说白了删了数据就没了,底层存储这么多盘做的RAID想恢复更难。当时一想不是做的LUN快照嘛,像VMware那样挂载磁盘快照找到虚拟机就完事了。然后就研究了一下这个问题,发现根本没有那么简单,主要有以下两点:
一、华为虚拟化Fusion Compute各个主机之间共享存储用的是一个叫OCFS存储架构,这是一个Oracle以前的一个共享文件系统,现在应该是不更新了,相对来说比较闭源网上的相关技术文档简直少的可怜。页面上没有提供响应的功能键,可能提供了一些API的接口但是研究起来太麻烦。
二、华为虚拟化Fusion Compute要想管理必须要有VRM这个组件,类似于Vcenter这个角色,CNA类似于ESXi这个角色的主机层是不能直接提供管理服务的,想直接进行虚拟机注册基本不可能。
虽然是有点麻烦哈,但是人家华为是有解决方案的,他开发了一个叫UltraVR的灾备软件,能实现数据中心之间的VRM通讯啥的,好像能实现虚拟机备份导入导出这些功能,是虚拟化高级版里带的软件,还没有研究,等过两天研究一下。
回归主题,虽然有困难,但是咱十几年的野路子也不是白走的。经过了我对CNA里存储数据块几天的分析,找到了一些规律,然后自制了这个恢复计划。
先声明:
1.这个操作华为官方肯定不提供支持,打400人家肯定不理你,如果搞崩了影响数据了就研究一下怎么跑路吧。
2.虚拟机有磁盘的快照这属于另外一个操作的大类,除了磁盘快照文件以外在数据库里也存储了相关的信息,所以如果你要恢复的虚拟机在LUN快照的时候还存在虚拟机快照这个方法实现不了。
3.里边涉及到非常多的磁盘底层和VMR数据的操作如果操作不慎很有可能产生更大的数据损失,如果没有虚拟化计算和Linux操作系统技术的支撑请不要尝试
下面开始正题:
1、测试环境数据录入
1)在测试环境中新建一个原始的数据,在云桌面HW00134这个虚拟机的D盘有个“FC通过LUN快照恢复数据测试.txt”这就是我们待会要操作的数据。
2)去FC上查看虚拟机所在的数据存储
3)查看数据存储关联的存储设备的唯一标识号
4)去存储上给这个LUN做一个快照
5)去虚拟机里把刚才的测试文件删了
2、相关信息收集
因为是测试所以这次做的比较彻底一些,可以看到测试虚拟机有3块磁盘,这次的目标是把3块磁盘的数据都恢复出来,让虚拟机正常启动。
1)登录ssh通过root用户VRM查看虚拟机的三个磁盘存放的具体路径
psql -U galax vrm
密码为:SingleLOUD!1
select ds_index from tbl_vs_datastore where ds_name='vDeskTop_DATA_30T_01';
查询数据存储“vDeskTop_DATA_30T_01”刚才虚拟机所在的存储的标识号
select vol_name,vol_url from tbl_vs_volume where ds_index=11 and vol_name='i-00000903-vdb';
查询虚拟机三个存储对应的OCFS中的目录,ds_index=11是刚才查到数据存储号,vol_name='i-00000903-vdb'是虚拟机的磁盘号VRM里可以看到。由于刚删的那个文件能确认在vdb里边所以只查一个就可以。
2)找一台CNA通过root用户ssh登录,查询数据存储的OCFS信息
上一条查询中可以看到LUN对应的目录是/POME/datastore_11,df –hT可以看出这个目录在本CNA的磁盘号是dm-28
通过multipath -ll | grep -A1 0022 (0022是LUN唯一标识号的最后4位)可以看到LUN在本CAN的磁盘号是dm-27。所以dm-27和dm-28肯定存在某种关系。
用dmsetup table /dev/dm-28 查看dm-28的信息可以看到他是通过253:27这个设备创建的,去/dev下寻找253:27发现这个设备就是dm-27。保存好刚dmsetup table查看到的table信息,后面会用到。
0 64424505344 linear 253:27 4096
3、搭建OCFS恢复环境
1)创建Centos7.4挂载好本地YUM源
2)上传OCFS的软件包
3)安装顺序为:
linux-firmware-0429-72.gitddde598.el7.noarch
kernel-3.10.0-1062.4.3.el7.yn1203.x86_64.rpm
ocfs2-tools-1.8.6-14.el7.x86_64.rpm
4)新建:/etc/modules-load.d/ocfs2.conf
# Load ocfs2.ko at boot
ocfs2
5)重启后查看内核和mod信息
4、LUN快照映射
1)恢复服务器上安装multipath
yum -y install device-mapper device-mapper-multipath
2)加载相应的模块
modprobe dm-multipath
modprobe dm-round-robin
3)修改multipath配置文件/etc/multipath.conf
defaults {
path_checker tur
no_path_retry 18
path_grouping_policy group_by_prio
prio const
deferred_remove yes
uid_attribute "ID_SERIAL"
reassign_maps no
failback immediate
log_checker_err once
reservation_key "file"
}
devices {
device{
vendor "HUAWEI"
product "XSG1"
path_grouping_policy group_by_prio
prio alua
path_selector "round-robin 0"
path_checker tur
failback immediate
dev_loss_tmo 30
fast_io_fail_tmo 5
}
}
4)启动multipathd服务
systemctl start multipathd
systemctl enable multipathd
5)在存储上把快照映射给虚拟机,这里启动器可以选择SCSI或者ISCSI就不详细介绍了,主要步骤就是新建主机,添加启动器,新建主机组,新建LUN组,新建映射视图
iSCSI的安装包为:yum install -y iscsi-initiator-utils
dm-2的唯一标识号和存储上快照的唯一标识号一致说明没有问题。
5、通过LUN快照恢复OCFS文件系统
1)新建OCFS集群
执行命令
o2cb_ctl -C -n ocfs2 -t cluster -i
创建名称ocfs2的集群
o2cb_ctl -C -n rac1 -t node -a number=1 -a ip_address=192.168.15.100 -a ip_port=7777 -a cluster=ocfs2
向ocfs2集群中新加节点rac1(主机名和IP地址一定要设置一样的)
执行完两条命令以后在/etc/ocfs2/cluster.conf可以看到集群的配置文件
2)初始化OCFS集群
执行命令:o2cb.init configure
查看集群状态:o2cb.init status
Cluser状态为Online则正常,offLine时需要查看配置文件里边的主机名和IP地址,一定要一模一样。
设置ocfs开机启动:systemctl enable o2cb ocfs2
3)通过快照恢复OCFS文件系统
找到在2 -2)步骤中查到的dmsetup table信息,写到/root/dmp_tab文件中,注意快照映射到这个主机的dm号和原来主机的dm号一般都是不一样的,需要根据自身环境中的信息调整253:后的数字,当前测试环境中dm-2为253:2,所以dmp_tab文件中也要相应的修改。
执行命令:dmsetup create dm-test /root/dmp_tab
这条命令的意思就是根据253:2的这个设备新建一个存储设备(这是华为自己打包的一层,这个操作必须要做)
到这OCFS就可以看到相应的文件系统了,但是现在的文件系统里边有原来的Cluster信息是在当前的ocfs cluster里边是挂载不了的。
执行命令:mounted.ocfs2 –f
查看当前系统中有OCFS文件系统的设备
执行命令:fsck.ocfs2 -y /dev/mapper/dm-test
修复/dev/mapper/dm-test里的ocfs文件系统,主要是把原来的cluster信息擦除。
修复完成后再执行mounted.ocfs2 –f就可以看到原来的cluster信息已经不存在了。
由于恢复环境的ocfs和生产环境ocfs软件版本有差距,所以还需要执行命令:tunefs.ocfs2 --fs-features=noappend-dio /dev/mapper/dm-test
此命令的作用是关闭/dev/mapper/dm-test问系统中的append-dio功能,这个功能在华为的ocfs里边是开着的,但是恢复环境中不支持这个功能,所以需要关闭否则挂载不上。
挂载OCFS文件系统,执行命令:mount.ocfs2 /dev/mapper/dm-test /ocfs2/
6、恢复虚拟机/磁盘
1)根据2-1)查询到的URL,测试中要恢复的文件在第二块磁盘,所以需要把虚拟机第二块磁盘的存储文件复制一份出来,vol/vol_a85ee23f-1b43-4551-8748-b7e07ff88dbd/vol_a85ee23f-1b43-4551-8748-b7e07ff88dbd.img
复制的时候一定要查一下空间,ocfs出来的空间比xfs占用小,一定要多预留工具否则容易把恢复的这个服务器给copy挂了
2)把复制出来的文件放到CNA主机上(找个空间大的地方比如datastorage的目录里边)
3)在VRM上给要恢复的主机新加一块和要恢复的磁盘一样大小的磁盘
4)去vrm上查询新加磁盘的具体的URL路径
5)把刚才的磁盘文件移动到新查到的URL目录里(为了方便我把vol开头的名字改成了data
)
6)修改.img文件的名称,把原来磁盘中的vol_7017e077-d6de-4695-9fa1-27039af1755a.img名称改成新加磁盘的名称vol_45e062eb-580c-454f-bb23-0a942c78b707.img
7)去虚拟机中恢复虚拟机的文件系统
这一步如果磁盘那还是显示不可用是黑色的话需要在VMR上解绑定,然后重新绑定一下
右键联机系统就会分配一个新的磁盘号
进入G盘就可以找到在LUN在快照的时间截点上所有的G盘数据
操作一定要小心~~~