Ubuntu EC2 Raid0 Ephemeral – 重启后的SSH连接

首先,我使用Elestic AMI ami-c162a9a8启动一个新的大型实例。 最初,我运行:

df -h

/dev/xvda1 9.9G 814M 8.6G 9% / udev 3.7G 4.0K 3.7G 1% /dev tmpfs 1.5G 156K 1.5G 1% /run none 5.0M 0 5.0M 0% /run/lock none 3.7G 0 3.7G 0% /run/shm /dev/xvdb 414G 199M 393G 1% /mnt 

猫/ etc / fstab

 LABEL=cloudimg-rootfs / ext4 defaults 0 0 /dev/xvdb /mnt auto defaults,nobootwait,comment=cloudconfig 0 2 

然后我运行这个脚本:

 #!/bin/bash apt-get install -y mdadm --no-install-recommends # Configure Raid - take into account xvdb or sdb DRIVE=`df -h | grep -v grep | awk 'NR==2{print $1}'` if [ "$DRIVE" == "/dev/xvda1" ]; then DRIVE_1=/dev/xvdb DRIVE_2=/dev/xvdc else DRIVE_1=/dev/sdb DRIVE_2=/dev/sdc fi umount /mnt dd if=/dev/zero of=$DRIVE_1 bs=4096 count=1024 dd if=/dev/zero of=$DRIVE_2 bs=4096 count=1024 partprobe mdadm --create --verbose /dev/md0 --level=0 -c256 --raid-devices=2 $DRIVE_1 $DRIVE_2 echo DEVICE $DRIVE_1 $DRIVE_2 | tee /etc/mdadm.conf mdadm --detail --scan | tee -a /etc/mdadm.conf blockdev --setra 65536 /dev/md0 mkfs -t ext3 /dev/md0 mkdir -p /mnt/myraid && mount -t ext3 -o noatime /dev/md0 /mnt/myraid # Remove xvdb/sdb from fstab chmod 777 /etc/fstab sed -i '$ d' /etc/fstab # Make raid appear on reboot echo "/dev/md0 /mnt/myraid ext3 noatime 0 0" | tee -a /etc/fstab 

当脚本结束时,我再次运行:

df -h

 /dev/xvda1 9.9G 815M 8.6G 9% / udev 3.7G 8.0K 3.7G 1% /dev tmpfs 1.5G 164K 1.5G 1% /run none 5.0M 0 5.0M 0% /run/lock none 3.7G 0 3.7G 0% /run/shm /dev/md0 827G 201M 785G 1% /mnt/myraid 

猫/ etc / fstab

 LABEL=cloudimg-rootfs / ext4 defaults 0 0 /dev/md0 /mnt/myraid ext3 noatime 0 0 

当我重新启动盒子,我得到错误: port 22: Connection refused 。 当我试图debugging脚本,我发现停止这个命令后, mkdir -p /mnt/myraid && mount -t ext3 -o noatime /dev/md0 /mnt/myraid ,重新启动,然后尝试手动挂载给我这个错误: special device /dev/md0 does not exist 。 我在这黑暗中,发生了什么事?

编辑:

我突袭和登上(但没有修改/ etc / fstab)之后,我跑了:

mdadm -D / dev / md0

 /dev/md0: Version : 1.2 Creation Time : Mon Dec 19 06:13:44 2011 Raid Level : raid0 Array Size : 880730112 (839.93 GiB 901.87 GB) Raid Devices : 2 Total Devices : 2 Persistence : Superblock is persistent Update Time : Mon Dec 19 06:13:44 2011 State : clean Active Devices : 2 Working Devices : 2 Failed Devices : 0 Spare Devices : 0 Chunk Size : 256K Name : ip-10-91-18-80:0 (local to host ip-10-91-18-80) UUID : 36946c0e:db95eb34:bf22c078:45958378 Events : 0 Number Major Minor RaidDevice State 0 202 16 0 active sync /dev/xvdb 1 202 32 1 active sync /dev/xvdc 

然后我重新启动并运行:

mdadm –assemble / dev / md0 / dev / xvdb / dev / xvdc

 mdadm: cannot open device /dev/xvdb: Device or resource busy mdadm: /dev/xvdb has no superblock - assembly aborted 

我也试过:

mdadm – 组装 – 扫描

 mdadm: No arrays found in config file or automatically 

当我把它做成冗长的时候:

mdadm –assemble –scan –verbose

 mdadm: looking for devices for /dev/md0 mdadm: cannot open device /dev/xvdb: Device or resource busy mdadm: /dev/xvdb has wrong uuid. mdadm: cannot open device /dev/xvdc: Device or resource busy mdadm: /dev/xvdc has wrong uuid. 

通常, mdadm.conf文件将包含启动时重新组合数据所需的信息。 特别重要的是包含在该文件中的UUID – 它必须与你的数组相匹配(用mdadm -D /dev/md0find它)。

如果没有任何问题,您可以select的一个选项是重命名mdadm.conf文件,并使用dpkg-reconfigure mdadm使用数组中正确的信息dpkg-reconfigure mdadm生成该文件。

这个话题的线程值得一读。

为了让你的成功,你通常需要:

  1. 加载md模块(使用modprobe md(或者raid0而不是md)或者将其添加到/ etc / modules中)
  2. 组装arrays如:
      mdadm --assemble / dev / md0 / dev / xvdb / dev / xvdc 

    (或者,使用--scan来组装所有,而不是指定一个数组)

如果一切都失败了,你可以把上面的代码添加到init脚本中,以便在启动时组装数组。

由于安装依赖于设备的存在(md0),所以您可能需要将nobootwait添加到您的fstab(或者将挂载移动到运行汇编命令的脚本中)。

这里的关键是你的md设备在重新启动时被重命名。 它被创build为/ dev / md0,但在重新启动后,它显示为/ dev / md127(这是前面提到的一个评论,我把它冒泡作为一个更容易阅读的答案)。

我刚刚碰到了一样的东西(创buildmd0,重新启动,显示为md127)。 再次重启,/ dev / md127仍然存在。 我只是要运行它。

 echo "/dev/md127 /mnt/myraid xfs noatime 0 0" | tee -a /etc/fstab 

有时间的人应该深入了解为什么会发生这种情况(如果总是这样发生的话),然后向他们汇报; – )