我运行类似的配置(在4个EBS卷上使用RAID0),因此也有同样的问题,需要从使用ec2-consistent-snapshot创建的快照中重构RAID阵列。
幸运的是,RAID阵列中的每个设备都包含元数据(在超级块中),该元数据记录其在阵列中的位置,阵列的UUID和阵列级别(例如RAID0)。要在任何设备上查询此超级块,请运行以下命令(与“ ^ this”匹配的行描述了所查询的设备):
$ sudo mdadm --examine /dev/sdb1
/dev/sdb1:
Magic : a92b4efc
Version : 00.90.00
UUID : 2ca96b4a:9a1f1fbd:2f3c176d:b2b9da7c
Creation Time : Mon Mar 28 23:31:41 2011
Raid Level : raid0
Used Dev Size : 0
Raid Devices : 4
Total Devices : 4
Preferred Minor : 0
Update Time : Mon Mar 28 23:31:41 2011
State : active
Active Devices : 4
Working Devices : 4
Failed Devices : 0
Spare Devices : 0
Checksum : ed10058a - correct
Events : 1
Chunk Size : 256K
Number Major Minor RaidDevice State
this 0 202 17 0 active sync /dev/sdb1
0 0 202 17 0 active sync /dev/sdb1
1 1 202 18 1 active sync /dev/sdb2
2 2 202 19 2 active sync /dev/sdb3
3 3 202 20 3 active sync /dev/sdb4
如果在不属于数组的设备上执行相同的查询,则会获得:
$ sudo mdadm --examine /dev/sda1
mdadm: No md superblock detected on /dev/sda1.
这证明该命令确实依赖于设备本身存储的信息,而不是某些配置文件。
也可以从RAID设备开始检查RAID阵列的设备,以获取类似信息:
$ sudo mdadm --detail /dev/md0
我将后面的内容与ec2-describe-volumes一起使用,以构建ec2-consistent-snaptshot的卷列表(-n和--debug允许测试此命令而不创建快照)。以下命令假定目录/ mysql是卷的安装点,并且AWS区域是us-west-1:
$ sudo -E ec2-consistent-snapshot --region us-west-1 --mysql --freeze-filesystem /mysql --mysql-master-status-file /mysql/master-info --description "$(date +'%Y/%m/%d %H:%M:%S') - ASR2 RAID0 (4 volumes) Snapshot" --debug -n $(ec2-describe-volumes --region us-west-1 | grep $(wget http://169.254.169.254/latest/meta-data/instance-id -O - -q) | egrep $(sudo mdadm --detail $(awk '{if($2=="/mysql") print $1}' /etc/fstab) | awk '/ \/dev\//{printf "%s ", $7}' | sed -e 's# /#|/#g') | awk '{printf "%s ", $2}')