Ubuntu

Ubuntu EC2 Raid0 Ephemeral – 重啟後的 SSH 連接

  • July 24, 2015

首先,我使用 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. 當我嘗試調試腳本時,我發現在此命令之後停止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 –assemble –scan

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/md0)。

如果沒有任何問題,您可以選擇重命名 mdadm.conf 文件並使用dpkg-reconfigure mdadm陣列中的正確資訊重新生成它。

這個主題的主題值得一讀。

為了使您的掛載成功,您通常需要:

  1. 載入 md 模組(使用 modprobe md(或 raid0 代替 md)或將其添加到 /etc/modules)
  2. 組裝數組,例如:
mdadm --assemble /dev/md0 /dev/xvdb /dev/xvdc

(或者,用於--scan組裝所有,而不是指定一個數組)

如果一切都失敗了,您可以將上述內容添加到初始化腳本中,以便在啟動時組裝陣列。

由於安裝取決於設備 (md0) 的存在,您可能需要添加nobootwait到 fstab(或者,將安裝移動到執行 assemble 命令的腳本中)。

引用自:https://serverfault.com/questions/342220