soft-RAID構成でsystem drive(/boot,/など)を作ってみた
ESXiで構築して、片方のディスクイメージを削除して再駆動. 再度ディスクイメージを追加して復旧ができた.
その作業を下記に示す
ディスクイメージは2つ用意します。ここでは16GBを2つです。
あと仮想マシンのプロパティから「オプション」タブの「詳細」-「起動オプション」で
指定可能なブートファームウエアは、BIOSです。
*EFIでは試してないが、、、無理っぽい気がする
OSのインストールは画面に従い進めて、「インストール先」の画面で2つのHDDを選択して、「パーティションを自分で構成する」を有効にします。
ディスクの空きサイズが992.5KiBとあるが、仮想ディスクなので..
そして、画面左上の「完了(D)」ボタンを押下します。
「手動パーティション設定」画面に移ります。
ここでは
とします。
まず「/boot」を作ります。画面左下の「+」ボタンを押下して、
「新規のマウントポイントの追加」画面からマウントポイント欄に「/boot」(プルダウンから選択)、割り当てる領域には「512」を指定して「マウントポイントの追加」ボタンを押下します
「手動でパーティション設定」画面に戻り、作った「/boot」領域をデバイスタイプ「RAID」に変更します。自動的にRAIDレベルは「RAID1」になります
次に「swap」領域
こちらも同じように画面左下の「+」ボタンを押下して、現れた「新規のマウントポイントの追加」画面で今度はマウントポイント欄を「swap」、領域のサイズを「512」にして「マウントポイントの追加」ボタンを押下します
「手動でパーティション設定」画面に戻り、こちらも作った「swap」領域のデバイスタイプを「RAID」に変更します。そして「設定の更新」ボタンを押下します。
最後に「/(root)」領域
こちらも同じように画面左下の「+」ボタンを押下して、「新規のマウントポイントの追加」画面を表示させ、今度はマウントポイント欄に「/」をブルダウンから選択して、領域サイズには何も記載せず、そのまま「マウントポイントの追加」ボタンを押下します
これで残りの領域がすべて「/(root)」に渡ることになります
「手動でパーティション設定」画面に戻り、先ほどの「swap」領域と同様の選択肢にして、「設定の更新」ボタンを押下します。
これで画面左上の「完了」ボタンを押下します
「変更の概要」画面が表示され、「変更を許可する」ボタンを押下します
ここらが重要な場所。あとは通常のインストールを進めます
稼動確認といっても各種設定内容を示す
[root@c101 ~]# df -lTh
ファイルシス タイプ サイズ 使用 残り 使用% マウント位置
/dev/md125 xfs 15G 1.2G 14G 8% /
devtmpfs devtmpfs 911M 0 911M 0% /dev
tmpfs tmpfs 920M 0 920M 0% /dev/shm
tmpfs tmpfs 920M 8.5M 912M 1% /run
tmpfs tmpfs 920M 0 920M 0% /sys/fs/cgroup
/dev/md127 xfs 510M 169M 342M 34% /boot
tmpfs tmpfs 184M 0 184M 0% /run/user/0
[root@c101 ~]#
[root@c101 ~]# cat /proc/mdstat
Personalities : [raid1]
md125 : active raid1 sdb3[1] sda3[0]
15717376 blocks super 1.2 [2/2] [UU]
bitmap: 1/1 pages [4KB], 65536KB chunk
md126 : active raid1 sdb2[1] sda2[0]
524736 blocks super 1.2 [2/2] [UU]
md127 : active raid1 sdb1[1] sda1[0]
525248 blocks super 1.0 [2/2] [UU]
bitmap: 1/1 pages [4KB], 65536KB chunk
unused devices: <none>
[root@c101 ~]#
どうしてmd125とかな数字なのかと、、、
HDDのパーティション情報を提示する
[root@c101 ~]# parted /dev/sda
GNU Parted 3.1
/dev/sda を使用
GNU Parted へようこそ! コマンド一覧を見るには 'help' と入力してください。
(parted) p
モデル: VMware Virtual disk (scsi)
ディスク /dev/sda: 17.2GB
セクタサイズ (論理/物理): 512B/512B
パーティションテーブル: msdos
ディスクフラグ:
番号 開始 終了 サイズ タイプ ファイルシステム フラグ
1 1049kB 539MB 538MB primary xfs boot, raid
2 539MB 1077MB 538MB primary raid
3 1077MB 17.2GB 16.1GB primary raid
(parted) q
[root@c101 ~]#
もう片方の/dev/sdbも同じ内容であった
片方のdiskにエラーが発生した場合を想定。mdadmで意図的に障害を発生させてみる
[root@c101 ~]# mdadm --manage /dev/md125 --fail /dev/sda3
mdadm: set /dev/sda3 faulty in /dev/md125
[root@c101 ~]#
っで、/proc/mdstatを確認すると
[root@c101 ~]# cat /proc/mdstat
Personalities : [raid1]
md125 : active raid1 sdb3[1] sda3[0](F)
15717376 blocks super 1.2 [2/1] [_U] <---
bitmap: 1/1 pages [4KB], 65536KB chunk
(略)
確かに障害が確認。同時にメールも飛んできた。
っで、故障した領域(/dev/sda3)を外します
[root@c101 ~]# mdadm --manage /dev/md125 --remove /dev/sda3
mdadm: hot removed /dev/sda3 from /dev/md125
[root@c101 ~]#
っでまた/proc/mdstatを確認すると、「sda3[0](F)」が除かれたことが分かる
[root@c101 ~]# cat /proc/mdstat
Personalities : [raid1]
md125 : active raid1 sdb3[1]
15717376 blocks super 1.2 [2/1] [_U]
bitmap: 1/1 pages [4KB], 65536KB chunk
(略)
っで、再度/dev/sda3を繋げてみる
[root@c101 ~]# mdadm --manage /dev/md125 --add /dev/sda3
mdadm: re-added /dev/sda3
[root@c101 ~]#
[root@c101 ~]# cat /proc/mdstat
Personalities : [raid1]
md125 : active raid1 sda3[0] sdb3[1]
15717376 blocks super 1.2 [2/1] [_U]
[==========>..........] recovery = 51.8% (8144320/15717376) finish=1.6min speed=75960K/sec
bitmap: 1/1 pages [4KB], 65536KB chunk
(略)
とリビルドが自動的に開始され復旧が行われる。これは既定どおりの動作です。
次に、稼働中に片方のディスクを丸ごと削除してみる。だが、削除方法が分からないので、
マシンを一旦停止して、片方のディスクイメージファイルを削除してみた。
そしてディスク1枚だけで起動してみた
起動には少々時間が掛かるが起動に成功。(3minくらい)
片方が無くなったので/proc/mdstatは下記のような感じになる
[root@c101 ~]# cat /proc/mdstat
Personalities : [raid1]
md125 : active raid1 sda3[1]
15717376 blocks super 1.2 [2/1] [_U]
bitmap: 1/1 pages [4KB], 65536KB chunk
md126 : active (auto-read-only) raid1 sda2[1]
524736 blocks super 1.2 [2/1] [_U]
md127 : active raid1 sda1[1]
525248 blocks super 1.0 [2/1] [_U]
bitmap: 1/1 pages [4KB], 65536KB chunk
unused devices: <none>
[root@c101 ~]#
swap領域も片方運転だが、機能は保持されている
[root@c101 ~]# cat /proc/swaps
Filename Type Size Used Priority
/dev/md126 partition 524732 0 -1
[root@c101 ~]#
稼動そのものには影響はない。いつもどおり使用できる状態である。
ディスクの片方がなく片肺運転だけど
ESXiの操作でディスクイメージを追加します。そうして起動を行うとブートディスクが見つからない状態になります。
恐らく/dev/sdaを削除したため、/dev/sdb側を削除していれば発生しないかも知れない
その場合、BIOS画面で/dev/sdbを起動ディスクに指定します
下記画面だと(0:1)が/dev/sdbで削除されていないデバイスに該当します
すると起動します。新しいディスクを入れたためか、swapがありません
[root@c101 ~]# cat /proc/swaps
Filename Type Size Used Priority
[root@c101 ~]#
各ディスクのパーティションは下記のようになります
留意 software-raidのデバイス名が変わっていることに留意
[root@c101 ~]# cat /proc/partitions
major minor #blocks name
2 0 4 fd0
8 0 16777216 sda
8 16 16777216 sdb
8 17 525312 sdb1
8 18 525312 sdb2
8 19 15725568 sdb3
9 126 525248 md126
9 125 15717376 md125
11 0 1048575 sr0
[root@c101 ~]#
追加した/dev/sdaがあります。
このデバイス/dev/sda に /dev/sdb と同じようにパーティションを作成します。
まず、/dev/sdbのパーティション情報を参照
[root@c101 ~]# parted /dev/sdb
:
(parted) unit s
(parted) print
モデル: VMware Virtual disk (scsi)
ディスク /dev/sdb: 33554432s
セクタサイズ (論理/物理): 512B/512B
パーティションテーブル: msdos
ディスクフラグ:
番号 開始 終了 サイズ タイプ ファイルシステム フラグ
1 2048s 1052671s 1050624s primary xfs boot, raid
2 1052672s 2103295s 1050624s primary raid
3 2103296s 33554431s 31451136s primary raid
(parted)
なので、/dev/sdaもmsdosパーティションテーブルにしてパーティションを作成します。
[root@c101 ~]# parted /dev/sda
(parted) mklabel msdos
(parted) unit s
(parted)
(parted) mkpart
パーティションの種類? primary/プライマリ/extended/拡張? primary
ファイルシステムの種類? [ext2]? xfs
開始? 2048s
終了? 1052671s
(parted)
(parted) mkpart
パーティションの種類? primary/プライマリ/extended/拡張? primary
ファイルシステムの種類? [ext2]?
開始? 1052672s
終了? 2103295s
(parted)
(parted) mkpart
パーティションの種類? primary/プライマリ/extended/拡張? primary
ファイルシステムの種類? [ext2]?
開始? 2103296s
終了? 33554431s
(parted)
(parted) set 1 boot on
(parted) set 1 raid on
(parted) set 2 raid on
(parted) set 3 raid on
(parted) p
モデル: VMware Virtual disk (scsi)
ディスク /dev/sda: 33554432s
セクタサイズ (論理/物理): 512B/512B
パーティションテーブル: msdos
ディスクフラグ:
番号 開始 終了 サイズ タイプ ファイルシステム フラグ
1 2048s 1052671s 1050624s primary boot, raid
2 1052672s 2103295s 1050624s primary raid
3 2103296s 33554431s 31451136s primary raid
(parted)
と同じようなパーティションが作成できた。あとはmdadmを使ってraidを修理します
[root@c101 ~]# mdadm --manage /dev/md126 --add /dev/sda1
[root@c101 ~]# mdadm --manage /dev/md125 --add /dev/sda3
これで/dev/md126(/boot)と/dev/md125(/)の復旧が完了。
このりはswapである。swapが既に使われていない状態なので、swapとして存在している/dev/md127は捨てる。
[root@c101 ~]# mdadm --stop /dev/md127
mdadm: stopped /dev/md127
[root@c101 ~]#
/proc/mdstatからも消えていることを確認します
[root@c101 ~]# cat /proc/mdstat
Personalities : [raid1]
md125 : active raid1 sda3[2] sdb3[1]
15717376 blocks super 1.2 [2/2] [UU]
bitmap: 0/1 pages [0KB], 65536KB chunk
md126 : active raid1 sda1[2] sdb1[1]
525248 blocks super 1.0 [2/2] [UU]
bitmap: 0/1 pages [0KB], 65536KB chunk
unused devices: <none>
[root@c101 ~]#
その上で再度ボリュームを作成してswapボリュームに仕立て上げます
[root@c101 ~]# swapoff /dev/md127
[root@c101 ~]# mdadm --stop /dev/md12
[root@c101 ~]# mdadm --misc --zero-superblock /dev/sdb2 /dev/sda2
[root@c101 ~]# mdadm --create --level=1 --raid-devices=2 --metadata=0.90 /dev/md127 /dev/sdb2 /dev/sda2
[root@c101 ~]# mkswap /dev/md127
[root@c101 ~]# swapon /dev/md127
で最終的に
[root@c101 ~]# cat /proc/mdstat
Personalities : [raid1]
md127 : active raid1 sda2[1] sdb2[0]
525248 blocks [2/2] [UU]
md125 : active raid1 sda3[2] sdb3[1]
15717376 blocks super 1.2 [2/2] [UU]
bitmap: 0/1 pages [0KB], 65536KB chunk
md126 : active raid1 sda1[2] sdb1[1]
525248 blocks super 1.0 [2/2] [UU]
bitmap: 0/1 pages [0KB], 65536KB chunk
unused devices: <none>
[root@c101 ~]#
となる。
swap領域もraid1にする必要があるかと思うが、片方のディスクが故障した場合でも
稼動し続ける必要があるので、raid1にしている。未検証ではあるが、もしraid0なら
片方のディスクの故障で稼動が止まってしまうのでは?と。まぁ検証すればいいだけのお話
あ、再度ディスクイメージを削除したら起動しなくなった....MBR関係かな?
ここから修正可能となりましたgrub