RAID5にスペアディスク追加

作業日: 2 May., 2014

2GB×3で運用していたRAID5にHDDをホットスペアで1台追加。
(その内に2GB×4のRAID5に拡張するつもりだったが、結局やらずじまい)

準備

2GBのHDDを購入して、追加。
/dev/sdaとして認識され、fdisk -lでは下記のようになる。

Disk /dev/sda: 2000.4 GB, 2000398934016 bytes
255 heads, 63 sectors/track, 243201 cylinders, total 3907029168 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

Disk /dev/sda doesn't contain a valid partition table

新HDDのパーティショニング

sudo fdisk /dev/sda

で、ディスク全体でパーティションタイプがfd Linux autodetectのパーティションを作成

ホットスペアとしてディスクを追加

下記コマンドでホットスペアとして追加。

sudo mdadm --manage /dev/md/datastore --add /dev/sda1
cat /proc/mdstat

で状況を確認すると、

md127 : active raid5 sda1[4](S) sdd1[1] sdc1[3] sdb1[0]
      3907023872 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/3] [UUU]

のようになる。
sda[4](S)となっているのが、ホットスペアのディスク。

状況を詳細に確認するために、

sudo mdadm --misc --detail /dev/md/datastore

を実行すると、

/dev/md/datastore:
        Version : 1.2
  Creation Time : Tue Mar 13 00:10:46 2012
     Raid Level : raid5
     Array Size : 3907023872 (3726.03 GiB 4000.79 GB)
  Used Dev Size : 1953511936 (1863.01 GiB 2000.40 GB)
   Raid Devices : 3
  Total Devices : 4
    Persistence : Superblock is persistent

    Update Time : Fri May  2 14:47:56 2014
          State : clean
 Active Devices : 3
Working Devices : 4
 Failed Devices : 0
  Spare Devices : 1

         Layout : left-symmetric
     Chunk Size : 512K

           Name : domino:datastore  (local to host domino)
           UUID : ae189551:89069074:6d0d79a4:e0c921a6
         Events : 126

    Number   Major   Minor   RaidDevice State
       0       8       17        0      active sync   /dev/sdb1
       1       8       49        1      active sync   /dev/sdd1
       3       8       33        2      active sync   /dev/sdc1

       4       8        1        -      spare   /dev/sda1

のようになる。

(未実行)領域の拡張

もし、領域を拡張したい場合は、下記のように実行。(やってないけど)

sudo mdadm --grow /dev/md/datastore --raid-disks=4

iSCSIサーバーのソフトウェアRAID再構築

作業日: 12 Apr., 2014

RAID1を構成するHDDの一つが壊れたので、新しいHDDを買ってRAID1を再構成。

準備

まず、壊れたHDDを取り除いて、新しいHDDをセットし、PCを起動。

cat /proc/mdstat

md126 : active raid1 sdd1[0]
      312569040 blocks super 1.2 [2/1] [U_]

のように表示され、U_となっていることから、RAID1がDegradedとなっていることがわかる。

新HDDのパーティショニング

sudo fdisk -l

で、新しいHDDは、/dev/sdeと認識されていることがわかった。
下記のような表示。

Disk /dev/sde: 320.1 GB, 320072933376 bytes
255 heads, 63 sectors/track, 38913 cylinders, total 625142448 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk identifier: 0x00000000

Disk /dev/sde doesn't contain a valid partition table

ちなみに、そのカウンターパートのHDDは、/dev/sddとして認識され、

Disk /dev/sdd: 320.1 GB, 320072933376 bytes
81 heads, 63 sectors/track, 122504 cylinders, total 625142448 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x8d0ff01f

   Device Boot      Start         End      Blocks   Id  System
/dev/sdd1            2048   625142447   312570200   fd  Linux raid autodetect

のようになっている。

今回は、両方のHDDのセクター数は同じであるため、

sudo fidsk /dev/sde

で全域を使って基本パーティションを作成し、ディスクラベルをfd Linux raid autodetectに設定。セクター数が違う場合は、RAIDに使用するパーティションのセクター数を元々ある方と一致させる。違っていても、よりサイズが大きい場合はRAIDは作れるけど容量が無駄になる。

RAIDの再構築

RAID1に新しいディスクを追加する。RAID1は/dev/md/vmstoreとして設定されているので、

sudo mdadm --manage /dev/md/vmstore --add /dev/sde1

を実行。
ちなみに、RAID1のパスは、/etc/mdadm/mdadm.confに書かれている。別に、/proc/mdstatの/mdev/md126を使っても良い。

後は、

sudo cat /proc/mdstat

で進捗状況を確認。

途中では、

md126 : active raid1 sde1[2] sdd1[0]
      312569040 blocks super 1.2 [2/1] [U_]
      [>....................]  recovery =  0.8% (2603712/312569040) finish=71.1min speed=72620K/sec

みたいになるが、終了すると

md126 : active raid1 sde1[2] sdd1[0]
      312569040 blocks super 1.2 [2/2] [UU]

のようになる。320GB程度なので、1~2時間で終了。

iSCSIサーバーのインストール (その4)

作業日: 28 Apr., 2013

VMを格納するデータストアとして暫定的に500GBの3.5インチハードディスクを使用していたが、ようやく320GBの2.5インチHDD×2のRAID1に置き換える。

準備

ベイの数や電源ケーブルの問題で、一旦RAID5を構成していたHDDを全部取り外し、新しい320GB 2.5インチHDD×2をセット。
このとき古い500GBの3.5インチHDDは付けたまま。
iSCSIサーバの電源を入れ、新しいHDDのデバイスファイル名をチェックする。

sudo fdisk -l

今回は、/dev/sdaと/dev/sdbに新HDDが、/dev/sdcに旧HDDが認識されていることがわかる。

次に、新HDDにパーティションを作成する。

sudo fdisk /dev/sda &&
sudo fdisk /dev/sdb

それぞれディスク全域を使用して基本パーティションを1つ作成し、ディスクIDを0xfd (Linux raid auto detect) に設定する。

RAIDの作成

2つのディスクを使用してRAID1を作成する、

sudo mdadm --create /dev/md/vmstore2 --level=1 --raid-devices=2 \
           /dev/sda1 /dev/sdb1

RAIDデバイスのデバイスファイルを固定化するため、UUIDで設定ファイルを作成する。

sudo sh -c "mdadm --detail --scan

で新しいRAIDのUUIDをチェックして、下記のように/etc/mdadm/mdadm.confを書き足す。

ARRAY /dev/md/vmstore2 metadata=1.2 UUID=f5dce1a3:574ba56b:47fd07a0:0f9be0b4

一旦/dev/md/vmtore2というデバイスファイル名で作成して、現在の/dev/md/vmstoreの内容をコピーした後、/dev/md/vmstoreに名前を変更する。

iSCSI用の設定を追加

新しいRAIDをiSCSIのターゲットとして設定する(同様に一旦vmstore2として作成する。)

sudo sh -c "
cat > /etc/tgt/targets.conf << EOF
<target iqn.2013-04.net.example.domino:vmstore2>
    backing-store /dev/md/vmstore2
</target>
EOF"

再起動

RAIDの同期に時間が掛かるので、下記コマンドで様子を見ながら終わるまで待つ。

cat /proc/mdstat

忘れないようにinitramを更新した後、再起動。

sudo update-initramfs -u &&
sudo reboot

再起動後、状態を確認

cat /proc/mdstat &&
sudo tgtadm --lld iscsi --op show --mode target

データのコピー

データストアのファイルフォーマットはESXi独自なので、一度ESXiでマウントしてからデータをコピーする。

vSphere Clientで、「構成」->「ストレージ」->「ストレージの追加…」から、新しく設定したvmstore2を選択してデータストアとして追加する。データストア名もvmstore2にする。

vSphare Client上で、データストアを右クリックして出てくる「データストアの参照」からファイルを移動することも出来るが、時間がかかる場合に不安点なので、ssh上で実行する。
sshでESXiにログインし、/vmfs/volumes/vmstore、から/vmfs/volumes/vmstore2にデータをコピーする。
nohupを使うと良い。
/vmfs/volumes/vmstore2に置かれたディレクトリは適当にリネームしておく。

VMの起動の確認

適当なVMがvmstore2から起動できるか確認する(ただし、iSCSIターゲットをRawディスクとしてマウントしているVMは、後回しにした方が良い。)

データストアブラウザ上で、適当なVMの仮想マシンファイル(.vmx)を右クリックして、インベントリに追加を選ぶ。
起動すると、仮想マシンの位置が変わっているという警告がでるが、”I moved it”か”I copied it” を選んで、無事に起動できることを確認する。

RAIDとiSCSIの設定を変更

用済みの500GB 3.5インチHDDを取り外し、2.5インチHDDのRAID1をvmstoreという名前で使用するように設定を変更する。

ESXiサーバとiSCSIサーバをシャットダウンする。
500GBのHDDを外して、RAID5を構成する2TB HDD×3を装着した上で、iSCSIサーバを起動。

まず、/etc/mdadm/mdadm.confを編集して、旧vmstoreに関する行を消し、vmstore2をvmstoreに変更する。
ちなみに消した行は

ARRAY /dev/md/vmstore metadata=1.2 UUID=493e9bab:bf4f4d93:13ae5ef2:1f277881

でファイルは、

ARRAY /dev/md/datastore metadata=1.2 UUID=ae189551:89069074:6d0d79a4:e0c921a6
ARRAY /dev/md/vmstore metadata=1.2 UUID=f5dce1a3:574ba56b:47fd07a0:0f9be0b4

のようになった。

さらに、/etc/tgt/targets.confを編集して、同様に旧vmstoreに関するエントリを消して、vmstore2をvmstoreに変える。

忘れずにinitramを更新して再起動する。

sudo update-initramfs -u &&
sudo reboot

ESXiサーバを起動すると、iSCSIの名前が変わりデータストアを認識できないと言われる。
「構成」->「ストレージ」->「ストレージの追加…」でvmstoreをデータストアとして追加する。
このとき、「既存の署名を保持」を選択すれば良い。決して再フォーマットしないこと、

残りのVMを上と同様の手順で再設定する。
ここで、iSCSIターゲットをRAWディスクとしてマウントしている仮想マシンは、一旦古いHDDの設定を削除して、再追加しないと起動できなかった。おそらく、iSCSIターゲットの名前を変更したためだと思われる(example.netになっていたのを正しいドメイン名に変更した。)

iSCSIサーバーのインストール (その3)

新たに2TBのディスクを3台追加して、RAID5を設定する。

500GBをマザーボードのSATAポートに、2TBx3を追加したSATAカードに接続する。
PCを起動すると、500GBが/dev/sda、2TBx3が/dev/sdb~c、USB stickが/dev/sdeで認識される。

RAID5の作成

sudo fdisk /dev/sdb
sudo fdisk /dev/sdc
sudo fdisk /dev/sdd

基本パーティションを1つずつ作成し、ディスクIDを0xfd (Linux raid auto detect) に設定する。

sudo mdadm --create /dev/md/datastore --level=5 --raid-devices=3 \
           /dev/sdb1 /dev/sdc1 /dev/sdd1

RAID5の構築には時間がかかる。

cat /proc/mdstat

で進捗が見られる。なお、この表示だとRAIDのデバイスファイル名が指定(/dev/md/datastore)と違うが、別に関係なく/dev/md/datastoreでもアクセスできるので大丈夫。

sudo cp /etc/mdadm/mdadm.conf{,.bak.20120313} &&
sudo sh -c "mdadm --detail --scan > /etc/mdadm/mdadm.conf"

適当に編集して

ARRAY /dev/md/vmstore metadata=1.2 UUID=493e9bab:bf4f4d93:13ae5ef2:1f277881
ARRAY /dev/md/datastore metadata=1.2 UUID=ae189551:89069074:6d0d79a4:e0c921a6

みたいにした。

initramを作り直す。

sudo update-initramfs -u

iSCSIターゲットの設定

sudo sh -c "
cat >> /etc/tgt/targets.conf << EOF
<target iqn.2012-03.net.example.domino:datastore>
    backing-store /dev/md/datastore
</target>
EOF"
sudo service tgt restart
sudo tgtadm --lld iscsi --op show --mode target

で状態を確認。

targets.confファイルに追記した場合、tidが逆になる(元々はvmstoreが1だったのが、今回vmstoreが2でdatastoreが1になる)ため、ESXiでターゲットを自動認識しなかった。改めてデータストアの追加をやり直したら問題は解決した。

iSCSIサーバーのインストール (その2)

今回は、ハードディスクを接続し、iSCSIターゲットとして設定するまで。

将来的には、ESXiのデータストアとして500GBx2程度のRAID1と、ファイルサーバー用のディスク領域として(iSCSI越しに)直接マウントして使用する2TBx3のRAID5を構成する。まずは、500MBx1でDegraded RAID1として設定し、iSCSIで問題なく使えるかを確認する。

電源が停止した状態で、500GBのハードディスクを接続した。電源を投入すると、OSは無事に起動。ただ、ここでUSBメモリが/dev/sdbになり、ハードディスクが/dev/sdaになった。
/etc/fstabはUUIDで設定されているので、大きな問題ではない。とは言っても、ハードディスクの順番はSATAのポートの位置によって変化するので、ディスクのデバイスファイル名に依存しない構成にすべき。

必要なパッケージのインストール

まず、iSCSIターゲットとRAIDの管理ツールをインストールする。

sudo apt-get install mdadm &&
sudo apt-get install tgt &&
sudo service tgt start

mdadmのインストールの際に、postfixもついでにインストールされ、設定が画面が出てくる。メールサーバーとしては使わないので、構成としてLocal onlyを選択する。System mail nameは、domino.example.netとする。

RAID1の設定

/dev/sdaに認識されているディスクを使用して、degraded RAID1を設定する。まず、/dev/sdaをfdiskする。

sudo fdisk /dev/sda

基本パーティションを1つ作成し、ディスクIDを0xfd (Linux raid auto detect) に設定する。
次に、degraded RAID1を設定する。

sudo mdadm --create /dev/md/vmstore --level=1 --raid-devices=2 \
           /dev/sda1 missing

これで、片方のディスクが欠損しているRAID1として運用される。現在のRAIDの状態は、

cat /proc/mdstat

で見ることができる。

RAIDドライブがどのデバイスファイルに割り当てられるかは起動時に勝手に決まってしまうので、設定ファイル/etc/mdadm/mdadm.confを書くことでそれを固定化する。ただし、設定ファイルが存在すると、設定ファイルの書かれているRAIDしか認識しなくなるので注意が必要。

まず、現在の構成を/etc/mdadm/mdadm.confに書き出す。

sudo sh -c "mdadm --detail --scan >> /etc/mdadm/mdadm.conf"

適当に編集して、

ARRAY /dev/md/vmstore metadata=1.2 UUID=493e9bab:bf4f4d93:13ae5ef2:1f277881

のようにする(ただし、UUIDは環境依存)。

/etc/mdadm/mdadm.confを編集した後は、initramを作り直す必要がある。

sudo update-initramfs -u

これで再起動すると、このRAIDはdegradedの状態なので、ブートスクリプトの途中でエラーが出て、そこで手動でyを入力しないと起動しない。当面は暫定処置としてこのままで運用する。早くちゃんとしたRAIDにしなければ。

iSCSI設定のテスト

iSCSIターゲットをコマンドライン上で設定し、ESXiから認識できるかを確認する。

sudo tgtadm --lld iscsi --op new --mode target --tid 1 \
     --targetname iqn.2012-03.net.example.domino:vmstore
sudo tgtadm --lld iscsi --op new --mode logicalunit --tid 1 --lun 1 \
     --backing-store /dev/md/vmstore
sudo tgtadm --lld iscsi --op bind --mode target --tid 1 -I ALL

tidは0ではうまくいかなかった。lunは0はコントローラなので、1から順に指定する。

下記コマンドで状態を確認できるので、適宜確認する。

sudo tgtadm --lld iscsi --op show --mode target

vSphere Clientで 構成->ハードウェア->ストレージアダプタ から、iSCSI Software Adapterを追加し、Propertyから動的検出で192.168.0.3を指定する。今回設定したターゲットが見えることを確認。

iSCSI設定の固定化

コマンドラインから設定した内容は、iSCSIターゲットを再起動するとすべて忘れてしまう。そのため、設定ファイルに書いて、起動時に自動で設定するようにする。

sudo sh -c "
cat > /etc/tgt/targets.conf << EOF
<target iqn.2012-03.net.example.domino:vmstore>
    backing-store /dev/md/vmstore
</target>
EOF"
sudo service tgt restart

でiSCSIターゲットを再起動しても、PC自体を再起動しても、無事にESXiから見えることを確認。

iSCSIサーバーのセットアップ (その1)

iSCSIサーバーをインストールして、VMWare ESXiのターゲットとして使用する。
今回は、とりあえずOSをインストールして起動するところまで。

計算機の仕様

  • メインボード: Intel D2500HN
  • CPU: Intel Atom D2500 (on-board)
  • Memory: 4GB x 1
  • NIC: Intel 1Gbps
  • 起動ディスク: 4GB USB stick

CentOS 6.2のインストール(失敗)

CentOS 6.4をUSBメモリにインストールして再起動する。Grubコンソールが出てきて、USBメモリをディスクとして認識していない模様。原因は不明だがGrubのバージョンの問題か?

Ubuntu Server 11.10 64bitをインストール

  • IPアドレス: 192.168.0.3
  • Hostname: domino

追加機能としてはSSH Serverのみをインストール。起動後、SSH越しにログインできることを確認。今回は成功。

まず最初に、

sudo apt-get update
sudo apt-get upgrade

でソフトウェアを更新。