RAID 配列からの起動と GRUB ブートレコード作成 — md デバイス移行手順
前提条件
- ルート権限で作業します(root)。
- 古いスタイルの GRUB を使用していること(GRUB2 の指示は別途参照)。
- 新旧ディスクのデバイス名(例: /dev/sda, /dev/sdb)を正確に把握していること。
- 作業前にバックアップを推奨します。
目的
この手順の主な目的は次のとおりです:
- /boot と / を新しい md デバイスのコピーに切り替える。
- /var と /home の既存行を保持しつつ、新しいデバイスの行を追加して安全に移行する。
- システムがどちらの物理ディスクからでも起動できるよう、両方に GRUB ブートレコードを作成する。
手順 14: UUID の確認と fstab の編集
- 別のコンソールウィンドウを開き、次を実行します。
blkid | grep /dev/md
ここで各 md タイプのファイルシステムの UUID が表示されます。例:
/dev/md0: UUID="0b0fddf7-1160-4c70-8e76-5a5a5365e07d" TYPE="ext2"
/dev/md1: LABEL="/ROOT" UUID="36d389c4-fc0f-4de7-a80b-40cc6dece66f" TYPE="ext4"
/dev/md2: UUID="47fbbe32-c756-4ea6-8fd6-b34867be0c84" TYPE="ext4"
/dev/md3: LABEL="/VAR" UUID="f92cc249-c1af-456b-a291-ee1ea9ef8e22" TYPE="ext4"
- /dev/md0 の UUID をメモして、以下の手順で fstab に貼り付けます。
マウントしている場合はまず md1 をマウントします:
mount /dev/md1 /mnt/raid
- /mnt/raid/etc/fstab を編集し、/boot のマウント行を新しい /dev/md0 の UUID に置き換えます:
UUID=0b0fddf7-1160-4c70-8e76-5a5a5365e07d /boot ext2 defaults 1 1
- 同様に / の行も新しい md デバイスの UUID に置き換えます。見つけて貼り付けてください:
UUID=36d389c4-fc0f-4de7-a80b-40cc6dece66f / ext4 defaults 1 1
- 後で使用するため、まだ使用しない行はコメントアウトしたままにしておきます。/var と /home の既存の行はそのまま保持してください。
新しい /var 用の行(例):
/dev/sdb5 /var ext4 defaults 1 2
#UUID=47fbbe32-c756-4ea6-8fd6-b34867be0c84 /var ext4 defaults 1 2
新しい /home 用の行(例):
/dev/sdb6 /home ext4 defaults 1 2
#UUID=f92cc249-c1af-456b-a291-ee1ea9ef8e22 /home ext4 defaults 1 2
- 編集が終わったら、/mnt/raid をアンマウントします:
umount /mnt/raid
手順 15: md0 を再度マウントし、GRUB の menu.lst を更新
/dev/md0 を /mnt/raid にマウントし直します(必要に応じて)。
/mnt/raid/grub/menu.lst のカーネルエントリを次のように変更します(PATH-TO-KERNEL 部分は実際のパスに置換してください):
kernel PATH-TO-KERNEL ro root=/dev/md1 SOME OPTIONS
重要: md デバイスを除外するオプションがなくなっていることを確認してください。
- システムが RAID のコピーから起動することを確実にするため、次の 2 つのファイルをコピーします(必要に応じてバックアップを作成しても構いません)。
- /mnt/raid/grub/menu.lst を /boot/grub/menu.lst へ
- /mnt/raid/etc/fstab を /etc/fstab へ
注意: 安全のためのコピーを作ることはできますが、それは慎重すぎる方法だと説明されています。
- システムを再起動します。
reboot
- BIOS に入り、システムが新しいディスクから起動するように設定します。BIOS 設定を保存して再起動します。
手順 17: 古いドライブのパーティションを RAID 用に変更して配列に戻す
再起動が正常に終わったら、古いドライブの既存パーティションを RAIDs 用のパーティションに変更します。
まずパーティションテーブルを確認して、どのディスクが古いシステムディスクか確認します:
fdisk -l
出力を調べて、タイプが 83(Linux)になっているディスクが旧システムディスクです。
fdisk, cfdisk, parted のいずれかで、そのディスク上の sdb1, sdb2, sdb5, sdb6 などのパーティションタイプを 0xfd(Linux RAID)に変更します。ここでは例として /dev/sdb を仮定しています。
変更後、パーティションテーブルをカーネルに反映させます:
partprobe
- 変更したパーティションを RAIDs に追加して配列を完成させます(以下の例では再び /dev/sdb を想定):
mdadm /dev/md0 -a /dev/sdb1
mdadm /dev/md1 -a /dev/sdb2
mdadm /dev/md2 -a /dev/sdb5
mdadm /dev/md3 -a /dev/sdb6
- 別の root コンソールで RAID の同期状況を監視します:
watch -n 5 cat/proc/mdstat
5 秒ごとに更新され、以下のような出力が表示されます(例):
Personalities : [raid1]
md1 : active raid1 sdb3[1] sda3[0]
473792 blocks [2/2] [UU]
[===>……………..] recovery 25.0% (118448/473792) finish=2.4min speed=2412
md2 : active raid1 sdb5[1] sda5[0]
4980032 blocks [2/2] [UU]
resync=DELAYED
md3 : active raid1 sdb6[1] sda6[0]
3349440 blocks [2/2] [UU]
resync=DELAYED
md0 : active raid1 sdb1[1] sda1[0]
80192 blocks [2/2] [UU]
unused devices:
すべての md デバイスのリカバリが完了すれば、システムは実質的に稼働状態になります。
手順 18: 第二ディスクにブートレコードを作成して冗長化
重要: ここでの手順は旧スタイル GRUB を前提としています。GRUB2 を使っている場合は別途手順を参照してください。
- grub シェルを起動します:
# grub
プロンプトが表示されます:
grub>
- 一時的にルートデバイスを第 2 ドライブに設定します(hd1 のパーティション 0 を指定):
grub> root (hd1,0)
出力例:
Filesystem type is ext2fs, partition type is 0xfd
- 第 2 ドライブにセットアップします:
grub> setup (hd1)
出力例(存在確認とインストール処理):
Checking if “/boot/grub/stage1” exists … no
Checking if “/grub/stage1” exists … yes
Checking if “/grub/stage2” exists … yes
Checking if “/grub/e2fs_stage1_5” exists … yes
Running “embed /grub/e2fs_stage1_5 (hd1)” … 16 sectors embedded.
succeeded
Running “install /grub/stage1 (hd1) (hd1)1+16 p (hd1,0)/grub/stage2 /grub/grub.conf”… succeeded
Done.
- 第 1 ドライブにも同じ手順を繰り返します:
grub> root (hd0,0)
出力例:
Filesystem type is ext2fs, partition type is 0xfd
grub> setup (hd0)
出力例:
Checking if “/boot/grub/stage1” exists … no
Checking if “/grub/stage1” exists … yes
Checking if “/grub/stage2” exists … yes
Checking if “/grub/e2fs_stage1_5” exists … yes
Running “embed /grub/e2fs_stage1_5 (hd1)” … 16 sectors embedded.
succeeded
Running “install /grub/stage1 (hd0) (hd0)1+16 p (hd0,0)/grub/stage2 /grub/grub.conf”… succeeded
Done.
5. grub シェルを終了します:
grub> quit
6. システムを再起動します:
reboot
再起動が問題なく行えれば成功です。次に、片方のディスクを物理的に外して起動を試し、もう片方に差し替えて同様に確認します。
## 重要な注意点
- コマンドを実行する前に、対象のデバイス名を必ず確認してください。デバイス名の取り違えはデータ消失の原因になります。
- GRUB のバージョンが GRUB2 の場合、setup コマンドやファイル構成が異なります。GRUB2 用手順を参照してください。
- fstab の編集ミスで起動不良になる可能性があるため、fstab を /etc/fstab に上書きする前に必ずバックアップを取得してください。
## 役割別チェックリスト
- オペレータ(作業前):
- 重要データのバックアップを取得済み
- ディスクの物理ラベルとデバイス名をメモ
- メンテナンスウィンドウの確保
- 実施者(作業中):
- blkid、fdisk -l の結果を保存
- /mnt/raid/etc/fstab の変更をコミット前にレビュー
- mdadm の同期状況を監視
- 検証担当(作業後):
- 片方のディスクを抜いて再起動テスト
- /boot と / が正しい md デバイスからマウントされることを確認
- dmesg と syslog にエラーがないことを確認
## トラブルシューティング(よくある問題と対処)
- システムが起動しない:
- BIOS のブート順を確認しているか。
- /etc/fstab の UUID が正しいか確認。誤って別の UUID を指定している可能性。
- GRUB の stage ファイルが欠けていないかを確認。必要なら再インストール。
- RAID の同期が始まらない:
- mdadm で配列の状態を確認(mdadm --detail /dev/mdX)。
- partprobe を実行してカーネルにパーティションを再読み込み。
- GRUB setup でエラーが出る:
- 対象パーティションが ext2/ext3/ext4 でない場合、embed に失敗することがある。
- GRUB とカーネルの互換性を確認。
## 受け入れ基準
- システムは sda を抜いても起動する。
- システムは sdb を抜いても起動する。
- /etc/fstab に書かれた UUID が現在の md デバイスと一致する。
- mdadm による配列は [UU](両方のメンバーが正常)になっている。
## リスクと軽減策
- 誤ったデバイス操作によるデータ損失
- 軽減: 作業前フルバックアップ、作業手順のレビュー、役割分担
- GRUB バージョン不一致による起動障害
- 軽減: 現行 GRUB のバージョン確認、GRUB2 の場合は別手順を用意
- RAID 再同期中のディスク障害
- 軽減: 再同期は最長時間を想定して監視し、重要処理は同期完了後に行う
## 1行用語集
- md デバイス: Linux のソフトウェア RAID が作る論理デバイス(例: /dev/md0)
- UUID: ファイルシステムごとの一意識別子(fstab で使用)
- GRUB: ブートローダ(旧スタイルと GRUB2 がある)
- partprobe: カーネルにパーティションテーブルの変更を通知するコマンド
## まとめ
- この手順では、md 上の /boot と / を新しい RAID コピーに切り替え、fstab と GRUB を正しく更新して両ディスクから起動できるようにしました。
- 変更前にバックアップを取り、同期状況を監視し、ブートテスト(片方ずつディスクを外す)で検証してください。
重要: GRUB の種類(旧式か GRUB2 か)をまず確認し、適切な手順を使用して下さい。