稼働中のLVMシステムでソフトウェアRAID1とGRUB2を正しくセットアップする
重要: この手順は本番システムでの作業を想定しています。実行前に完全なバックアップを取得してください。リスクを理解した上で慎重に操作してください。
目的と関連クエリ
このドキュメントは、稼働中のLVMを維持しつつソフトウェアRAID1を導入し、GRUB2ブートローダを冗長化して確実な起動を実現するための具体的手順です。 関連クエリ例: 稼働中にRAIDを作る方法, LVM上でのRAID1移行, GRUB2をRAID上にインストール, mdadm md0 md1 の確認方法
前提条件
- ルート権限で操作できること
- 2台以上のディスク(例: /dev/sda, /dev/sdb)が利用可能で、既に一部パーティションが RAID 用に使われていること
- mdadm, lvm2, grub2 がインストール済みであること
- 作業中に再起動が必要になるため、メンテナンス時間を確保していること
6 GRUB2 の準備
まず、GRUB2 ブートローダが両方の物理ディスクにインストールされていることを確認します。例:
grub-install /dev/sda
grub-install /dev/sdb
準備が整ったらシステムを再起動して、RAID 配列から正常に起動するか確認します。
reboot
再起動後、以下の節で示すように /dev/md0 が存在し、/boot が RAID 上にマウントされていることを確認します。
7 /dev/sda の準備
すべてが正常であれば、次のコマンドの出力に /dev/md0 が現れます。
df -h
出力例:
root@server1:~# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/server1-root
4.5G 722M 3.6G 17% /
tmpfs 249M 0 249M 0% /lib/init/rw
udev 244M 128K 244M 1% /dev
tmpfs 249M 0 249M 0% /dev/shm
/dev/md0 236M 18M 206M 8% /boot
root@server1:~#
また、ソフトウェアRAIDの状態は以下で確認します。
cat /proc/mdstat
期待される出力例:
root@server1:~# cat /proc/mdstat
Personalities : [raid1]
md1 : active raid1 sda5[2] sdb5[1]
4989940 blocks super 1.2 [2/2] [UU]
md0 : active raid1 sdb1[1]
248820 blocks super 1.2 [2/1] [_U]
unused devices:
root@server1:~#
LVM の物理ボリューム、ボリュームグループ、論理ボリュームの情報はそれぞれ次で確認します。
pvdisplay
vgdisplay
lvdisplay
出力の例(省略せず確認してください):
root@server1:~# pvdisplay
--- Physical volume ---
PV Name /dev/md1
VG Name server1
PV Size 4.76 GiB / not usable 1012.00 KiB
Allocatable yes (but full)
PE Size 4.00 MiB
Total PE 1218
Free PE 0
Allocated PE 1218
PV UUID W4I07I-RT3P-DK1k-1HBz-oJvp-6in0-uQ53KS
root@server1:~#
root@server1:~# vgdisplay
--- Volume group ---
VG Name server1
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 9
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 2
Open LV 2
Max PV 0
Cur PV 1
Act PV 1
VG Size 4.76 GiB
PE Size 4.00 MiB
Total PE 1218
Alloc PE / Size 1218 / 4.76 GiB
Free PE / Size 0 / 0
VG UUID m99fJX-gMl9-g2XZ-CazH-32s8-sy1Q-8JjCUW
root@server1:~#
root@server1:~# lvdisplay
--- Logical volume ---
LV Name /dev/server1/root
VG Name server1
LV UUID 8SNLPE-gHqA-a2LX-BO9o-0QQO-DV2z-3WvTYe
LV Write Access read/write
LV Status available
# open 1
LV Size 4.51 GiB
Current LE 1155
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 253:0
--- Logical volume ---
LV Name /dev/server1/swap_1
VG Name server1
LV UUID kYaKtb-vkkV-TDDE-me1R-nnER-dzN8-BcVTwz
LV Write Access read/write
LV Status available
# open 1
LV Size 252.00 MiB
Current LE 63
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 253:1
root@server1:~#
/dev/sda1 のパーティションタイプ変更
ここで /dev/sda1 のパーティションタイプを Linux raid autodetect (hex fd) に変更します。
fdisk /dev/sda
fdisk の対話例:
root@server1:~# fdisk /dev/sda
WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
switch off the mode (command 'c') and change display units to
sectors (command 'u').
Command (m for help): <-- t
Partition number (1-5): <-- 1
Hex code (type L to list codes): <-- fd
Changed system type of partition 1 to fd (Linux raid autodetect)
Command (m for help): <-- w
The partition table has been altered!
Calling ioctl() to re-read partition table.
WARNING: Re-reading the partition table failed with error 16: Device or resource busy.
The kernel still uses the old table. The new table will be used at
the next reboot or after you run partprobe(8) or kpartx(8)
Syncing disks.
root@server1:~#
警告: 既にマウント中のパーティションや使用中のデバイスでは再読み込みが失敗することがあります。上記メッセージが出た場合は partprobe や kpartx を使うか、システムの再起動で新しいパーティションテーブルを反映させます。
/dev/sda1 を /dev/md0 に追加
パーティションタイプを変更したら、mdadm で /dev/sda1 を md0 に追加します。
mdadm --add /dev/md0 /dev/sda1
追加後、/proc/mdstat を確認して RAID が正しく同期されていることを確かめます。
cat /proc/mdstat
期待される出力例:
root@server1:~# cat /proc/mdstat
Personalities : [raid1]
md1 : active raid1 sda5[2] sdb5[1]
4989940 blocks super 1.2 [2/2] [UU]
md0 : active raid1 sda1[2] sdb1[1]
248820 blocks super 1.2 [2/2] [UU]
unused devices:
root@server1:~#
mdadm.conf の更新
現在の mdadm 設定ファイルをバックアップし、新しい配列情報を追記します。
cp /etc/mdadm/mdadm.conf_orig /etc/mdadm/mdadm.conf
mdadm --examine --scan >> /etc/mdadm/mdadm.conf
結果として /etc/mdadm/mdadm.conf は次のようになります(例):
# mdadm.conf
#
# Please refer to mdadm.conf(5) for information about this file.
#
# by default, scan all partitions (/proc/partitions) for MD superblocks.
# alternatively, specify devices to scan, using wildcards if desired.
DEVICE partitions
# auto-create devices with Debian standard permissions
CREATE owner=root group=disk mode=0660 auto=yes
# automatically tag new arrays as belonging to the local system
HOMEHOST
# instruct the monitoring daemon where to send mail alerts
MAILADDR root
# definitions of existing MD arrays
# This file was auto-generated on Tue, 24 May 2011 21:11:37 +0200
# by mkconf 3.1.4-1+8efb9d1
ARRAY /dev/md/0 metadata=1.2 UUID=6cde4bf4:7ee67d24:b31e2713:18865f31 name=server1.example.com:0
ARRAY /dev/md/1 metadata=1.2 UUID=3ce9f2f2:ac89f75a:530c5ee9:0d4c67da name=server1.example.com:1
GRUB の再設定と不要スクリプトの削除
古い RAID 用の GRUB スクリプトを削除して、GRUB2 の設定と initramfs を更新します。
rm -f /etc/grub.d/09_swraid1_setup
update-grub
update-initramfs -u
/boot/grub/grub.cfg の中の ### BEGIN /etc/grub.d/10_linux ### セクションを見ると、以前の 09_swraid1_setup と同等の menuentry が md0 を指すように生成されているはずです。そのため 09_swraid1_setup は不要になります。
その後、もう一度両ディスクに GRUB をインストールしておきます。
grub-install /dev/sda
grub-install /dev/sdb
最後に再起動して、正常に起動することを確認してください。
reboot
正常に起動すれば作業完了です。これで稼働中のLVMシステム上にソフトウェアRAID1を構築し、GRUB2を両ディスクにインストールして冗長化できました。
受入基準
- /dev/md0 が /boot にマウントされていること
- cat /proc/mdstat で各アレイが [UU] など正常状態を示すこと
- /etc/mdadm/mdadm.conf に ARRAY 行が存在すること
- GRUB2 が /dev/sda と /dev/sdb の両方にインストールされていること
- 再起動後にシステムが正常に起動すること
トラブルシューティングと対処例
- パーティションテーブルの再読み込みで “Device or resource busy” が出る
- partprobe / kpartx を試す。解決しない場合はメンテナンスウィンドウで再起動して反映させる。
- grub-install が失敗する
- エラー内容を確認。UEFI 環境では grub-install のオプションや EFI パーティションのマウントを確認する。BIOS/MBR と UEFI/GPT の違いに注意。
- 起動しない(GRUB が見つからない、kernel panic 等)
- Live メディアで起動して chroot 環境に入り、update-grub と grub-install を再度実行する。/boot が RAID にマウントされていることを確認する。
ロール別チェックリスト(運用担当)
- 変更前: 完全なバックアップを実施
- 変更前: 作業時間(再起動含む)を確保
- 実施中: mdadm, lvm, grub のバージョンを記録
- 実施中: /proc/mdstat と lvdisplay の出力をログとして保存
- 実施後: 再起動してサービス稼働を確認
- 実施後: 監視アラート設定を検討(mdadm の監視、SMART)
簡易SOP(実行順)
- バックアップ取得
- grub-install を両ディスクに実行(必要であれば実行前に chroot)
- fdisk で /dev/sda のパーティションタイプを fd に変更
- mdadm –add で /dev/sda1 を md0 に追加
- mdadm の同期を確認(/proc/mdstat)
- mdadm.conf を更新(mdadm –examine –scan を追記)
- /etc/grub.d/09_swraid1_setup を削除
- update-grub と update-initramfs -u を実行
- 両ディスクへ grub-install を実行
- 再起動して動作確認
代替アプローチと注意点
- 完全なディスク複製を作成してから切り替える方法は downtime を伴うがより安全
- UEFI の場合は grub2 のインストール手順が異なる。EFI システムパーティション(ESP)を RAID に含めない構成も検討する
- mdadm metadata バージョン(1.0 / 1.2 など)によりデバイスの配置やパーティション開始位置の要件が異なる
マインドセットとヒューリスティック
- 小さな変更ごとに状態を確認し、同期中に次の重大な変更を加えない
- ブートローダ周りは冗長化しておく(最低でも2台のディスクに grub を入れる)
- まず読み出しで正しくマウント・起動できることを確認してから書き込み系のテストを行う
受入テスト(簡易)
- 再起動後に /boot の中身が正しく読み出され、カーネルがロードされること
- 片方のディスクを取り外して再起動しても起動できること
- mdadm –detail /dev/md0 で正常にメンバーが認識されること
互換性と移行時のヒント
- BIOS + MBR と UEFI + GPT で手順が異なる可能性が高い。UEFI 環境では EFI 用のESPと grubx64.efi の場所を明示する
- LVM と mdadm の順序(md 上に LVM を置く構成)は本手順で想定している。LVM の上に md を置くような異なるアーキテクチャの場合は設計を再検討する
要点まとめ
- /dev/sda と /dev/sdb の両方に grub-install を行う
- mdadm 設定と initramfs を更新して、再起動後に RAID 上から確実に起動できることを確認する
- 問題発生時は Live 環境で chroot して再設定する
短い告知文: 稼働中のLVM環境を停止せずにソフトウェアRAID1へ移行し、GRUB2を両ディスクへインストールしてブートを冗長化する手順をまとめました。作業前はバックアップを必ず取得してください。
重要なノート: 本稿は操作手順と注意点をまとめたものであり、システム環境によって追加の手順や調整が必要になることがあります。状況に応じて保守窓口と調整してください。