これは備忘録であり解説ではありません
ハードディスクがまったく同時に2つ死ぬということは、あまり考えたくもな
いし、たぶん、そうそうないだろう(と、信じたい)。しかし、しかし、
raid5で故障時、リカバリー途中にあと1つが故障するとアウトで状況でもう一
個死ぬというのは、なんとなくありえそうだ。
なぜならばコンピュータは人が困るという状況を感知して、自動的に壊れるメ
カニズムを持っているのである。
なぜならば、初期故障は別として、似たような環境におかれている似たような
ハードウェア(機械)は、似たような頃に似たような理由が原因で故障する、
というのはありがちだからだ。もちろんHDDだけが特別ということはないはず
である。
その点raid6は2つ同時に故障しない限り生き残ることができる。障害を起こし ていても動いている間にせっせとバックアップを取り、新しいハードディスク にチェンジしていく時間が稼げる(ホントかな?)。
Debian GNU/Linux etchで採用しているカーネルはraid6をサポートしているの でraid5 + スペアディスクよりも、raid6を当然使う。
160GBと320GBのHDDが混在しているので、すべての領域をraid6とすることはで きない。raid6とするため160GBの領域をそろえる。320GBで余った部分もraid1 として利用する。端数が出るか、それはswapで使うことにする。
partitionの割り振りはこんな感じである。
| HDD | Raid6 | Raid1 | swap |
|---|---|---|---|
| sda 160GB | sda1(160GB) | sda2(あまり) | |
| sdb 160GB | sdb1(160GB) | sdb2(あまり) | |
| sdc 320GB | sdc1(160GB) | sdc2 (160GB) | sdc3(あまり) |
| sdd 320GB | sdd1(160GB) | sdd2 (160GB) | sdd3(あまり) |
参考 fd linux auto raid 82 linux swap 83 linux file system # fdisk -l /dev/sd[abcd] Disk /dev/sda: 164.6 GB, 164696555520 bytes 255 heads, 63 sectors/track, 20023 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Device Boot Start End Blocks Id System /dev/sda1 1 19453 156256191 fd Linux raid autodetect /dev/sda2 19454 20023 4578525 82 Linux swap / Solaris Disk /dev/sdb: 164.6 GB, 164696555520 bytes 255 heads, 63 sectors/track, 20023 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Device Boot Start End Blocks Id System /dev/sdb1 1 19453 156256191 fd Linux raid autodetect /dev/sdb2 19454 20023 4578525 82 Linux swap / Solaris Disk /dev/sdc: 320.0 GB, 320072933376 bytes 255 heads, 63 sectors/track, 38913 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Device Boot Start End Blocks Id System /dev/sdc1 1 19453 156256191 fd Linux raid autodetect /dev/sdc2 19454 38906 156256222+ fd Linux raid autodetect /dev/sdc3 38907 38913 56227+ 82 Linux swap / Solaris Disk /dev/sdd: 320.0 GB, 320072933376 bytes 255 heads, 63 sectors/track, 38913 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Device Boot Start End Blocks Id System /dev/sdd1 1 19453 156256191 fd Linux raid autodetect /dev/sdd2 19454 38906 156256222+ fd Linux raid autodetect /dev/sdd3 38907 38913 56227+ 82 Linux swap / Solaris
まずswapの方から片付ける。swapは備えあれば憂いなし。容量は無いよりあっ た方がいい。しかも、速ければ速いほど良い。実は複数のswapエリアがあれば raid0のように並列化して高速に使える技がある。これだけいっぱいのハード ディスクが使えるなら、相当に高速化しそうだ。
swapに使っている領域はプライオリティ値が0に近い順番に使われていく。た とえば-1と-2であれば先に-1が使われる。1と2であれば1が先に使われる。プ ライオリティが同じ場合だと並列に使われる。つまりraid0のように並列化さ れswapのディスクへの読み書きが高速化される。
mkswapを使いフォーマットする。
# mkswap /dev/sda2 Setting up swapspace version 1, size = 4688404 kB no label, UUID=ce79d1b5-1010-4923-badb-8ebb76d0968e # mkswap /dev/sdb2 Setting up swapspace version 1, size = 4688404 kB no label, UUID=89cb4d9b-1b91-4e89-a044-174c3437596c # mkswap /dev/sdc3 Setting up swapspace version 1, size = 57569 kB no label, UUID=20cc4afc-f751-487a-b478-6e1072e31eef # mkswap /dev/sdd3 Setting up swapspace version 1, size = 57569 kB no label, UUID=ea64dc69-c54d-4590-906a-1a955756adf3
## # /dev/sda2 UUID=ce79d1b5-1010-4923-badb-8ebb76d0968e none swap sw,pri=1 0 0 # /dev/sdb2 UUID=89cb4d9b-1b91-4e89-a044-174c3437596c none swap sw,pri=1 0 0 # /dev/sdc3 UUID=20cc4afc-f751-487a-b478-6e1072e31eef none swap sw,pri=1 0 0 # /dev/sdd3 UUID=ea64dc69-c54d-4590-906a-1a955756adf3 none swap sw,pri=1 0 0尚、以前にswapに使っていた/dev/hda3も同じプライオリティに設定した。
# cat /proc/swaps Filename Type Size Used Priority /dev/hda3 partition 5221116 0 1 /dev/sda2 partition 4578516 0 1 /dev/sdb2 partition 4578516 0 1 /dev/sdc3 partition 56216 0 1 /dev/sdd3 partition 56216 0 1
ちなみに、このマシンは4GBのメモリを積んでいるので、約14.4Gのサイズとい うのは、極端に大きいswapサイズというわけではない。
# modprobe raid456
さてmdadmを使って作成。このインストールがびっくり。この先を読んでから 覚悟してインストールすること。
# apt-get install mdadm
何も考えずインストールしたら、いきなりinitrd.imgを作り始める。うぉーー、 びっくり。/bootの下に以前のものは.bakというファイルとしてバックアップ が取られていた。それを手動で元の名前にmvする。なんですかー、これは。 なんかオレ悪いことした?
ここから先は簡単。単純に指定するだけ。
# mdadm --verbose --create /dev/md0 --level=raid6 --raid-devices=4 /dev/sd[abcd]1 # mdadm --verbose --create /dev/md1 --level=raid1 --raid-devices=2 /dev/sd[cd]2
しばらく待つと、結果はこの通り。md0に約312GBのraid6が、md1に約156GBの raid1が作成される。
# cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4] [raid1]
md1 : active raid1 sdd2[1] sdc2[0]
156256128 blocks [2/2] [UU]
md0 : active raid6 sdd1[3] sdc1[2] sdb1[1] sda1[0]
312512128 blocks level 6, 64k chunk, algorithm 2 [4/4] [UUUU]
unused devices:
# mkfs -t jfs /dev/md0 mkfs.jfs version 1.1.11, 05-Jun-2006 Warning! All data on device /dev/md0 will be lost! Continue? (Y/N) y / Format completed successfully. 312512128 kilobytes total disk space. #ext3などと違い、すぐプロンプトが返ってくるけど、びっくりしないように。 テストに/mnt/tを作り、そこにマウントしてみる。
# mkdir /mnt/t # mount -t jfs /dev/md0 /mnt/t # df Filesystem 1K-ブロック 使用 使用可 使用% マウント位置 /dev/hda1 11686052 3154420 8531632 27% / tmpfs 1995148 0 1995148 0% /lib/init/rw udev 10240 108 10132 2% /dev tmpfs 1995148 0 1995148 0% /dev/shm /dev/hda2 63437900 1294496 62143404 3% /home /dev/md0 312469616 38312 312431304 1% /mnt/tというわけでraid6化完了と。
/etc/mdadm/mdadm.confを編集する。これでブート時にmd0とmd1をraidデバイスに してくれる。mdadm.confに以下の情報を加える。
# mdadm --detail --scan ARRAY /dev/md0 level=raid6 num-devices=4 UUID=5dd10094:c97d2c60:7b0c3db2:91db08b7 ARRAY /dev/md1 level=raid1 num-devices=2 UUID=e0c70df2:b6c02340:7b0c3db2:91db08b7
# hdparm -t /dev/md0 Password: /dev/md0: Timing buffered disk reads: 400 MB in 3.00 seconds = 133.14 MB/sec # hdparm -t /dev/md1 /dev/md1: Timing buffered disk reads: 196 MB in 3.03 seconds = 64.78 MB/sec比較対象として、他のマシンで使っているSATAハードディスクで速度を計って みる。尚、こちらはちょっとだけ古いATA-6である。
# hdparm -t /dev/sda /dev/sda: Timing buffered disk reads: 174 MB in 3.00 seconds = 57.95 MB/sec ATA Version is: 6
すずきひろのぶ Hironobu SUZUKI < hironobu -at- h2np -dot- net >
$Id: raid6.html,v 1.3 2007/09/09 09:28:24 hironobu Exp hironobu $