UbuntuでSoftware RAID1の構築 - サーバ

Posted by kyosuke at 07/17 2007


既存の250GBシングル(ubuntuインストール済み)を、全データ移行して320GBのRAID1にする。

RAIDを組むのは簡単になったよー、とか書いている人がいますが、
いえいえ、ぜんぜん簡単じゃありませんでした・・。




ぶっちゃけいうと、

“RAID 組みました。” ↓
http://lowreal.net/blog/2006/10/21/1

のパクリ(盛大にコピペを使用)です。
それを、見ながら、linux初心者+初Raidならではの四苦八苦をしながらの説明。


まず、何はともあれ320GBのHDDを2つ買いに行きます。

秋葉原のKakuta Sofmapで、
HDT725032VLA360 (320G SATA300 7200) Hitachi IBM 8800円
を2台購入。

250GBのRAID1でも十分なのですが、
250GBと320GBの価格差は、1000円もないです。

10%くらい値段を高く払うと、容量が30%UPするので、320GBに決定となります。


家に帰って
http://lowreal.net/blog/2006/10/21/1
を見ながら、320GBのRAID1を組むことに。。。


さてさて、
まったくうまくいきません。

Bootしなかったり、GRUBの画面になったきり動かなくなったりー。


そうこうしているうちに、疲れたので放棄。


半日後、再びRAIDにチャンレンジ!

が!!!

新HDDの1つがカタカタ音
さらに、読み込み書き込みスピードが劇的に遅くなり、
最後には、クラッシュー。 The End。

さらに、
もう一方の新HDDからもカタカタ音・・・。
日立IBM HDD、なしてやねん、な感じ。


再び秋葉原のKakuta Sofmapへいき、

HDT725032VLA360 (320G SATA300 7200) 8800円 日立IBM 2つ

1日で片方は壊れ、もう片方はカタカタ音

返品・交換

ST3320620AS (320G SATA300 7200) 8980円 SEAGATE 2つ

になりました。

『電車賃くらい返せよ!』 とか言いたいところですが、
言ったところで電車賃くれるとは思えず、単に双方が嫌な気分になるだけなので、素直に却下。


もしインターネットでHDDを買って、初期不良だったら最悪だったね。
ネットだったら少なくとも一週間くらいは待たされるだろうから。
HDDだけは、インターネットで買うのやめようと思う出来事。



再び、家にもどって、RAIDにチャレンジ。
以下は、手っ取り早く成功パターン。


まず最初にUbuntuを最新の状態にアップデートしておく。
RAIDにしたのち、アップデートすると、/boot/grub/menu.lst を勝手に書き換えられてしまい、bootできなくなった事があった。

古いHDDに入れ替えて乗り切ったけど、なぜ書き換えが起こったのか不明。 不安だよー。


UbuntuのPCに新しいHDDをつけて、電源を入れる。
WindowsのPCからSSHで、Ubuntuにログイン。

まずは、新HDDのパーティションを分けます。

sudo fdisk /dev/sdb
> n
> p
> 1
> 1
> +319000M
> t
> fd
> a
> 1

> n
> p
> 2
> [RET]
> [RET]
> t
> 2
> 82

> p
デバイス Boot Start End Blocks Id System
/dev/sdb1 * 1 38784 311532448+ fd Linux raid 自動検出
/dev/sdb2 38785 38913 1036192+ 82 Linux swap / Solaris
> w


以上で新HDDのパーティションができます。



swapを有効化する。

$ sudo mkswap /dev/sdb2
$ sudo swapon /dev/sdb2
$ swapon -s

今有効化する必要はないような気がするけど、なんだろうね?



RAID1 を作成する

sudo mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sdb1 missing



ファイルシステム作成 ext3 (微妙に時間がかかる)

sudo mkfs.ext3 /dev/md0



GRUBをインストールする

sudo grub
grub> device (hd0) /dev/sdb
grub> root (hd0,0)
grub> install /boot/grub/stage1 d (hd0) /boot/grub/stage2 0x8000 (hd0,0)/boot/grub/menu.lst
grub> quit

こいつが微妙で、エラーを出す場合がある。
grub> install /boot/grub/stage1 d (hd0) /boot/grub/stage2 0x8000 (hd0,0)/boot/grub/menu.lst
の後に、File not Foundとか出てくる場合があるけど、それが出てくると、起動時にbootできなくなるという。

よくわからないけど、
File not Found エラーが出てこないように、RAID1 を作成する前に、GRUBをインストールしたりしてみる。
sudo mdadm --misc --stop /dev/md0
なんていう呪文を唱えてみると、動くかも・・。



vim /etc/fstab で md0 をマウントするようにする

# <file system> <mount point> <type> <options> <dump> <pass>
/dev/md0 / ext3 defaults,errors=remount-ro 0 1
proc /proc proc defaults 0 0
#/dev/sda1 / ext3 defaults,errors=remount-ro 0 1
/dev/sda5 none swap sw 0 0
/dev/hda /media/cdrom0 udf,iso9660 user,noauto 0 0

/dev/sda5のところは、人それぞれ変わるので気にしない。



vim /boot/grub/menu.lstの上のほうに下記を追加する

title Ubuntu, kernel 2.6.15-28-amd64-generic (raid)
root (hd0,0)
kernel /boot/vmlinuz-2.6.15-28-amd64-generic root=/dev/md0 ro quiet splash
initrd /boot/initrd.img-2.6.15-28-amd64-generic
savedefault
boot

起動時に’ESC’を連打するとbootのオプションが出てくるので、
bootできなかった場合は、切り替えることができる。



作ったファイルシステムに現行システムをコピー

cd /
sudo mkdir new-disk
sudo mount -t ext3 /dev/md0 /new-disk
sudo telinit 1
# sshはここで切れる。UbuntuのPCから入力するー。
cd /
cp -ax / /new-disk (時間がかかる)
mkdir /new-disk/proc (mkdir /new-disk/new-disk/procか、それとも必要ないのか?)
shutdown -h now




シャットダウンして、
別の新HDDを取り付ける

ここで、かなり不可思議な状態になる。


古いHDDを取り外して、そこに別の新HDDを取り付けると(コピーした新HDDはそのまま)
Bootできないか、GRUBが出てくるか、Mac Addrが表示されて止まるかになってしまう。

正しくは、というか、自分の場合は、
まず古いHDDを取り外して、その場所にコピーした新HDDを取り付ける。
コピーした新HDDを取り外したところに、別の新HDD(データ空)を取り付ける。


なんでこんなことになるのかわからないけど、
こうすると動くので、あまり深くは考えないことにする。
願わくは、誰かおせーてください。



後は今までどおりみたいな手順。
WindowsのPCからSSHで、Ubuntuにログイン。


位置を取り替えたためか、再びsdbのパーティションを区切ってやる。
前区切ったパーティションはsdaにある。

sudo fdisk /dev/sdb
> n
> p
> 1
> 1
> +319000M
> t
> fd
> a
> 1

> n
> p
> 2
> [RET]
> [RET]
> t
> 2
> 82

> p
デバイス Boot Start End Blocks Id System
/dev/sdb1 * 1 38784 311532448+ fd Linux raid 自動検出
/dev/sdb2 38785 38913 1036192+ 82 Linux swap / Solaris
> w



取り付けた新HDD(データ空)へリカバリー(コピー?)を開始させる

sudo mdadm /dev/md0 -a /dev/sdb1
cat /proc/mdstat

↓こんな感じになる(http://lowreal.net/blog/2006/10/21/1 より)
Personalities : [raid1]
md0 : active raid1 sda1[2 ] sdb1[0 ]
243657728 blocks [2/1] [U_]
[>....................] recovery = 2.8% (6982720/243657728) finish=70.8min speed=55698K/sec

unused devices: <none>



その後、GRUBをインストールするのだけど、
よくわからないので、とりあえず2つやってみる。

sudo grub
grub> device (hd0) /dev/sda
grub> root (hd0,0)
grub> install /boot/grub/stage1 d (hd0) /boot/grub/stage2 0x8000 (hd0,0)/boot/grub/menu.lst
grub> device (hd0) /dev/sdb
grub> root (hd0,0)
grub> install /boot/grub/stage1 d (hd0) /boot/grub/stage2 0x8000 (hd0,0)/boot/grub/menu.lst
grub> quit



設定を保存して、メールの送信先を設定しとくらしい

mdadm --detail --scan >> /etc/mdadm/mdadm.conf
dpkg-reconfigure mdadm




以上で、RAID1が動き出しました!!
と祈りたい。。

ほんとに動いてるんですか?と疑心暗鬼。


どっちかのHDDを引っこ抜いても、
同じデータで動いていることを確認したからOKかなー?

片方のHDDを引っこ抜いて、電源を入れて、状態を確認。
またHDDをつけて、電源を入れると、また最初からリカバリーをしないといけないのは、
僕だけじゃないよね?

とりあえず、引っこ抜くとRAIDの状態が変だとかメールでお知らせしてくれたし。

なんか、もっとばっちり動いているよー
みたいな確証がほしいです。


あと、再起動するたびにswapが無効になってしまうんだけど、

/etc/fstabあたりの、
/dev/sda5 none swap sw 0 0

/dev/sda2 none swap sw 0 0
にすれば、自動的にswapが有効化されるのかなーとか。

ubuntuはよくわかならいなりね。(windowsもよくわかならかったり

UbuntuでSoftware RAID1の構築へのコメント

古いHDDのついているケーブルが、RAID1を構築した新HDDのついているケーブル(IDEなら、おそらく、Primary Slave)よりも優先されて(IDEなら、おそらく、PrimaryMASTERになって)いるので、古いHDDのついているケーブルに別の新しいHDDを取り付けると、そこから起動しようとしてエラーになる・・・というだけでは?<br /> <br /> 二つの新HDDのどちらでも、第二パーティション、つまり片方のHDDのUbuntuで起動したときに、/dev/sda2と/dev/sdb2にswapがあるので、<br /> /etc/fstab<br /> のswap指定は/dev/sda5ではなくて、/dev/sda2の方が良さそうです。

kiyoshi at 01/31 2009

教えてください<br /> <br /> RAIDを体験しようと、320GbのHDDを もう一つ購入しました。 メーカーが違いました。<br /> AMD64でRAID構成を試みました。<br /> <br /> 説明のような手応えがありません。<br /> メーカーが違うとダメでしょうか

匿名さん at 05/02 2009