2009年5月4日月曜日

Linuxサーバーのシステム部分だけRAID1する

共有ファイルサーバーのシステム部分だけRAID1にして、起動だけは確実に出来るような設定にする。本当はデータ部分もRAIDにした方が良いのだろうけど、ハードディスクがないのでまた今度。

今手元にあるのは、30GB(sda)と320GB(sdb)のハードディスクです。sdaがプライマリーマスター、sdbがプライマリースレーブとなっています。
まず、sdaにUbuntu8.04LTSをインストール。これは普通に行います。パーティションは下のようにしました。

sda1 /boot 200MB
sda2 swap 1.5GB
sda3 / 20GB
sda5 /home 9GB
/bootを先頭に持ってくるのがポイントだったりするらしい。最も、今のマザーボードではそれほど気にしなくても良いらしいが。
参考http://www.miloweb.net/partition.html

このときに、OSインストール時にsdbのパーティションも切っておきます。

sdb1 raid 200MB /bootとRAID1
sdb2 raid 20GB /(ルート)とRAID1
sdb3 /home/samba 290GB sambaにmount
sdb5 raid 9GB /homeとRAID1

OSインストールが終わったら、以下の手順でRAID1を構築します。
  1. sdbのみ参加させる形のRAID1構築
  2. sdaのデータをsdbにコピー
  3. sdbで起動してsdaをRAID1に参加
  4. sdb外して起動させてみる

1. sdbのみ参加させる形のRAID1構築
まず、mdデバイスを作成しておきます。コマンドはmknod
sudo mknod /dev/md0 b 9 0
sudo mknod /dev/md1 b 9 1
sudo mknod /dev/md2 b 9 2
デバイスドライバ番号は9。マイナー番号はmdの番号に相当するものを付ける。


先に切っておいたパーティションをRAID1に参加させます。使うコマンドはmdadm
sudo mdadm --create /dev/md0 --level=1 --raid-devices=2 missing /dev/sdb1 /bootパーティション
sudo mdadm --create /dev/md1 --level=1 --raid-devices=2 missing /dev/sdb2 / パーティション
sudo mdadm --create /dev/md2 --level=1 --raid-devices=2 missing /dev/sdb5 /homeパーティション

mdデバイスとsdbの番号の対応が悪いので、きちんと覚えておかなければ。
最初に1台だけ参加させて、後でもう1台追加するときは、missingと書けば良い。

ファイルシステムの構築
# mkfs.ext3 -f /dev/md0
# mkfs.ext3 -f /dev/md1
# mkfs.ext3 -f /dev/md2

ここまでの設定を/etc/mdadm/mdadm.confに記入しておきます。

echo 'DEVICE /dev/sda* /dev/sdb*' >> /etc/mdadm/mdadm.conf
mdadm --detail --scan >> /etc/mdadm/mdadm.conf

2.sdaのデータをsdbにコピー
マシンを再起動してシングルユーザーモードでログインします。立ち上がった瞬間にESCキー。
ログインしたら、mdデバイスをマウントします。今回は/mnt以下にマウントします。

# cd /mnt/
# mkdir ./boot
# mkdir ./home
# mount /dev/md1 /mnt
# mount /dev/md0 /mnt/boot/
# mount /dev/md2 /mnt/home/

sdaのデータを対応する場所へコピーします。procとsysは除きました。

# cp -a bin/ etc/ lib/ opt/ srv/ var/ vmlinuz cdrom initrd media root/ tmp/ dev/ initrd.img sbin/ usr/ ./mnt/ &
# cp -a /home/ ./mnt/home/ &
# cp -a /boot/ ./mnt/boot/ &

# mkdir proc
# mkdir sys


3.sdbで起動してsdaをRAID1に参加
sdaのgrubを修正して、sdbから起動します。

# cd /boot/
# mv initrd.img-2.6.24-19-server initrd.img-2.6.24-19-server-raid-pre
# mkinitramfs -r /dev/md1 -o initrd.img-2.6.24-19-server
cd ./grub/
cp -a menu.lst menu.lst20090503
vi menu.lst

menu.listに追記します。(赤字の部分)

title Ubuntu 8.04.2, kernel 2.6.24-19-server(raid)
root (hd1,0)
kernel /vmlinuz-2.6.24-19-server root=/dev/md1 ro quite splash
initrd /initrd.img-2.6.24-19-server
quiet

title Ubuntu 8.04.2, kernel 2.6.24-19-server
root (hd0,0)
kernel /vmlinuz-2.6.24-19-server root=UUID=b5724689-ee45-46a2-adf9-6790c032efd7 ro quiet splash
initrd /initrd.img-2.6.24-19-server
quiet

…省略

このままだと電源を落としたときにsdbがアンマウントされてしまうので、/etc/fstabに追記します。(赤字の部分)

$ cat /etc/fstab
# /etc/fstab: static file system information.
#
#
proc /proc proc defaults 0 0
/dev/sda3 / ext3 relatime,errors=remount-ro 0 1
/dev/sda1 /boot ext3 relatime 0 2
/dev/sda5 /home ext3 relatime 0 2
/dev/sdb3 /home/samba ext3 relatime 0 2
/dev/sda2 none swap sw 0 0
/dev/scd0 /media/cdrom0 udf,iso9660 user,noauto,exec,utf8 0 0

/dev/md1 /mnt ext3 relatime,errors=remount-ro 0 2
/dev/md0 /mnt/boot ext3 relatime 0 2
/dev/md2 /mnt/home ext3 relatime 0 2

/mnt/etc/fstabにも追記します。
/mnt/etc$ cat fstab
# /etc/fstab: static file system information.
#
#
proc /proc proc defaults 0 0
/dev/md1 / ext3 relatime,errors=remount-ro 0 1
/dev/md0 /boot ext3 relatime 0 2
/dev/md2 /home ext3 relatime 0 2
/dev/sdb3 /home/samba ext3 relatime 0 2
/dev/sda2 none swap sw 0 0
/dev/scd0 /media/cdrom0 udf,iso9660 user,noauto,exec,utf8 0 0

これで再起動すればシングルユーザーモードで起動するはずなのですが、起動しませんでした。原因は明日調べます。

参考 このサイトの流れに沿って設定しました。
http://qos.mine.nu/2008/11/raid1-on-etch.html
http://nabe.blog.abk.nu/0301

0 件のコメント: