Slackware 10.2 の RAID 1 デバイスを再編成する
SOFTWARE REPORT
ミラーリングを再構成する
Slackware 10.2 のシステムパーティションを RAID 1 にしてみる にて SCSI デバイスを RAID 構成にしたのですけど、まだ Linux システム環境の構成中であったせいもあって、SCSI ドライバ周りの調整をしていたところ、ミラーリングの再同期処理が絶えない感じになってしまいました。
しかも Microsoft Virtual Server 2005 R2 を用いていて、標準のデバイスドライバを使ってしまうと、再同期の完了に 8GB 程度のディスクであっても 3 日ほどと、多大な時間がかかってしまうのも、そしてその間にディスクアクセスを行おうとすると、とても待ち時間がかかってしまうのも厄介どころだったのでした。
そこで、とりあえずミラーリングを解消してみることにしました。
前提
たとえば /etc/raidtab が次のように設定され、/dev/md1 がミラーリングされているとします。
raiddev /dev/md1
raid-level 1
nr-raid-disks 2
nr-spare-disks 0
chunk-size 32
presistent-superblock 1
device /dev/sdc1
raid-disk 0
device /dev/sdg1
raid-disk 1
この時の /proc/mdstat の内容は次のような感じです。
md1 : active raid sdg1[1] sdc1[0]
4000640 blocks [2/2] [UU]
構成デバイスを取り外す
このデバイスから例えば /dev/sdg1 を取り外したい場合は、まずは次のようにして /dev/sdg1 を非稼動状態にさせます。
raidsetfaulty /dev/md1 /dev/sdg1
こうすることで /dev/sdg1 が非稼動状態としてマークされ、RAID デバイスのデータ編成から除外されます。このとき /proc/mdstat の状態を確認すると、パーティション名の後ろに "(F)" という記号が表示され、そのデバイスが有効ではないことが分かります。
md1 : active raid sdg1[1](F) sdc1[0]
4000640 blocks [2/2] [UU]
こうしたらあとは次のようにして、/dev/sdg1 を /dev/md1 の構成要素から除外すれば取り外し手続きは完了です。
raidhotremove /dev/md1 /dev/sdg1
ここでもし "raidsetfaulty" をまだ実行していなかったとすると、"/dev/md1: can not hot-remove disk: disk busy!" というエラーメッセージが表示されてしまうだけなので気を付けましょう。
そして取り外した後は、特に新しいデバイスを追加する予定がなかったりなど、そのまま放っておいて変に RAID 0 へ巻き込んでしまったりなどのないように、"/etc/raidtab" の取り外したディスクのところを "raid-disk" から "failed-disk" に設定しておくと安心かもしれません。
raiddev /dev/md1
raid-level 1
nr-raid-disks 2
nr-spare-disks 0
chunk-size 32
presistent-superblock 1
device /dev/sdc1
raid-disk 0
device /dev/sdg1
failed-disk 1
新しいデバイスを追加するには
新しく "/dev/sdg" を用意して、先ほどの "/dev/md1" に再び追加したい場合には、次のような感じになるでしょうか。
現在の "/dev/md1" よりも容量の多いハードディスクを用意して、故障したハードディスクと交換します。そしてシステムをしたら "fdisk" を用いてパーティションを作成します。パーティションを作成する際の注意としては、同じ容量のディスクを買ったとしても、シリンダー数やセクタサイズなどの違いによっては容量が足りなかったりすることがあるようなので気を付けましょう。
fdisk /dev/sdg
適切にパーティションを区切るのと合わせて、そのパーティションタイプを "Linux raid autodetect" (0xFD) に変更すること、そして念のため設定後には Linux をいちど再起動しておいた方が良さそうな感じでした。
それらが終わったら、"/etc/raidtab" を調整します。
raiddev /dev/md1
raid-level 1
nr-raid-disks 2
nr-spare-disks 0
chunk-size 32
presistent-superblock 1
device /dev/sdc1
raid-disk 0
device /dev/sdg1
raid-disk 1
今回は、同じデバイス名のハードディスクを使うことと仮定して、調整箇所は /dev/sdg1 の "failed-disk" としていたところを "raid-disk" と書き換えてあげる感じです。
あとは次のようにして、/dev/sdg1 を /dev/md1 に参加させてあげれば、自動的にデータが複製されます。
raidhotadd /dev/md1 /dev/sdg1
データの複製中も問題なく /dev/md1 を利用することができますが、その状況を確認したい場合には "/proc/mdstat" の内容を表示することで確認できます。