debian インストール後に Software RAID を設定
概要
installer の software RAID では, grub のインストールに失敗するため, ひとまず OS を一つの HDD (ほんとは SSD だけど) にインストールして, その後に RAID1 化する.
参考
準備
- OS を RAID1 でインストールする予定のデバイス
- /dev/sda
- /dev/sdb
- OS を一つの HDD (SSD) にインストールする.
- インストールする OS
- インストールしたデバイス
/dev/sda
$ sudo cfdisk /dev/sda Device Boot Start End Sectors Size Id Type >> /dev/sda1 * 2048 401981439 401979392 191.7G 83 Linux /dev/sda2 401983486 468860927 66877442 31.9G 5 Extended mq/dev/sda5 401983488 468860927 66877440 31.9G 82 Linux swap / Solari
必要なパッケージをインストール
$ sudo apt-get install mdadm rsync initramfs-tools
/dev/sdb のパーティショニング
/dev/sda と同じパーティションにする. ただし, Type は Linux raid autodetect にするらしい. (注意: 後でわかったことだが, パーティションのサイズの指定はセクター単位 (S) にする方が良いかもしれない.)
$ sudo cfdisk /dev/sdb Device Boot Start End Sectors Size Id Type >> /dev/sdb1 * 2048 401991679 401989632 191.7G fd Linux raid autodete /dev/sdb2 401991680 468862127 66870448 31.9G 5 Extended mq/dev/sdb5 401993728 468862127 66868400 31.9G fd Linux raid autodete
/dev/sdb を使って RAID の設定
$ sudo mdadm --create /dev/md0 --level=1 --raid-devices=2 missing /dev/sdb1 mdadm: /dev/sdb1 appears to contain an ext2fs file system size=189274112K mtime=Sat Jul 20 17:57:32 2019 mdadm: Note: this array has metadata at the start and may not be suitable as a boot device. If you plan to store '/boot' on this device please ensure that your boot-loader understands md/v1.x metadata, or use --metadata=0.90 Continue creating array? y mdadm: Defaulting to version 1.2 metadata mdadm: array /dev/md0 started. $ sudo mdadm --create /dev/md1 --level=1 --raid-devices=2 missing /dev/sdb5 mdadm: Note: this array has metadata at the start and may not be suitable as a boot device. If you plan to store '/boot' on this device please ensure that your boot-loader understands md/v1.x metadata, or use --metadata=0.90 Continue creating array? yes mdadm: Defaulting to version 1.2 metadata mdadm: array /dev/md1 started.
(/dev/sdb2 は上手くできない.)
ファイルシステム構築
$ sudo mkfs -t ext4 /dev/md0 mke2fs 1.44.5 (15-Dec-2018) Found a dos partition table in /dev/md0 Proceed anyway? (y,N) y Discarding device blocks: done Creating filesystem with 50215680 4k blocks and 12558336 inodes Filesystem UUID: a86c167e-2725-47e6-863c-bf77170548c1 Superblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 4096000, 7962624, 11239424, 20480000, 23887872 Allocating group tables: done Writing inode tables: done Creating journal (262144 blocks): done Writing superblocks and filesystem accounting information: done $ sudo mkswap /dev/md1 Setting up swapspace version 1, size = 31.9 GiB (34218766336 bytes) no label, UUID=03a3d12a-a6b8-4469-b8ac-11ce2da38865
/etc/mdadm/mdadm.conf の更新
$ sudo cp /etc/mdadm/mdadm.conf /etc/mdadm/mdadm.conf.bk01 $ sudo -s # /usr/share/mdadm/mkconf > /etc/mdadm/mdadm.conf # exit $ sudo dpkg-reconfigure mdadm
RAID の状態確認
$ cat /proc/mdstat Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10] md1 : active raid1 sdb5[1] 33416768 blocks super 1.2 [2/1] [_U] md0 : active raid1 sdb1[1] 200862720 blocks super 1.2 [2/1] [_U] bitmap: 2/2 pages [8KB], 65536KB chunk unused devices: <none>
GRUB のインストール
以下を実行して /dev/sda, /dev/sdb の両方に GRUB をインストールする.
$ sudo dpkg-reconfigure grub-pc
/dev/sdb にデータをコピー
$ sudo mkdir /tmp/mntroot $ sudo mount /dev/md0 /tmp/mntroot $ sudo rsync -auHxv --exclude=/proc/* --exclude=/sys/* --exclude=/tmp/* /* /tmp/mntroot/
/dev/sdb の中の /etc/fstab を書き換え
この後, /dev/sdb を使って再起動するため, /dev/sdb の中の /etc/fstab 中の UUID を書き換える.
情報確認
$ sudo blkid /dev/md0 /dev/md0: UUID="a86c167e-2725-47e6-863c-bf77170548c1" TYPE="ext4" $ sudo blkid /dev/md1 /dev/md1: UUID="03a3d12a-a6b8-4469-b8ac-11ce2da38865" TYPE="swap"
/tmp/mntroot/etc/fstab の当該 UUID を書き換え.
$ sudo vi /tmp/mntroot/etc/fstab
再起動 (と GRUB の設定の書き換え)
再起動.
GRUB のメニューで "e" を押し, 下の二つの箇所 ("(md/0)" と "/dev/md0") を書き換え.
set root='(md/0)' linux /boot/vmlinuz-4.19.0-5-amd64 root=/dev/md0 ro quiet
さらに確認.
$ sudo mount sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime) ... /dev/md0 on / type ext4 (rw,relatime,errors=remount-ro) ...
RAID の状況確認.
$ sudo mdadm --detail /dev/md0 /dev/md0: Version : 1.2 Creation Time : Sat Jul 27 14:49:08 2019 Raid Level : raid1 Array Size : 200862720 (191.56 GiB 205.68 GB) Used Dev Size : 200862720 (191.56 GiB 205.68 GB) Raid Devices : 2 Total Devices : 1 Persistence : Superblock is persistent Intent Bitmap : Internal Update Time : Sat Jul 27 15:38:29 2019 State : clean, degraded Active Devices : 1 Working Devices : 1 Failed Devices : 0 Spare Devices : 0 Consistency Policy : bitmap Name : chamomile:0 (local to host chamomile) UUID : 7330e70b:534bdb8e:4c550572:1808b8fb Events : 85 Number Major Minor RaidDevice State - 0 0 0 removed 1 8 17 1 active sync /dev/sdb1
ディスクが 1 台しかない.
$ sudo mdadm --add /dev/md0 /dev/sda1 mdadm: /dev/sda1 not large enough to join array
... あれ?
$ sudo mdadm --add /dev/md1 /dev/sda5 mdadm: added /dev/sda5
こちらは上手く行く.
ちなみに, add するとリビルドが始まり, リビルドの様子は
$ watch -n 1 cat /proc/mdstat
で観察できる.
/dev/sda のやり直し
どうやら微妙に /dev/sda1 のサイズが足らない.
仕方がないので /dev/sda のパーティションを切りなおす.
まず /dev/sda5 を外す.
$ sudo mdadm --remove /dev/md1 /dev/sda5 mdadm: hot remove failed for /dev/sda5: Device or resource busy $ sudo mdadm --fail /dev/md1 /dev/sda5 mdadm: set /dev/sda5 faulty in /dev/md1 $ sudo mdadm --remove /dev/md1 /dev/sda5 mdadm: hot removed /dev/sda5 from /dev/md1
まずは fail しないと外せないのね.
/dev/sdb を確認.
$ sudo cfdisk /dev/sdb Device Boot Start End Sectors Size Id Type >> /dev/sdb1 * 2048 401991679 401989632 191.7G fd Linux raid autodete /dev/sdb2 401991680 468862127 66870448 31.9G 5 Extended mq/dev/sdb5 401993728 468862127 66868400 31.9G fd Linux raid autodete
/dev/sda を同じように作ればよいはず. (サイズをセクター指定すればよいのかな.)
Device Boot Start End Sectors Size Id Type /dev/sda1 2048 401991679 401989632 191.7G fd Linux raid autodete /dev/sda2 401991680 468862127 66870448 31.9G 5 Extended
>> mq/dev/sda5 401993728 468862127 66868400 31.9G fd Linux raid autodete
繋いでみる.
$ sudo mdadm --add /dev/md0 /dev/sda1 mdadm: added /dev/sda1 $ sudo mdadm --add /dev/md1 /dev/sda5 mdadm: added /dev/sda5
上手く繋がったようだが, 念の為に
$ sudo dpkg-reconfigure grub-pc
をやっておく.
さらに
$ sudo update-grub
重複してる?
テスト
$ sudo shutdown -h now
まずは片方のディスクを抜いて起動. 時間がかかったような気がするけれど無事起動. 状態確認には,
$ cat /proc/mdstat
とする.
再び shutdown して, 抜いていたディスクを挿して起動. 途中でたくさんメッセージが出るけれど, 起動した. 起動後に確認してみると, /dev/md0 に /dev/sdb1 が繋がっていなかったので,
$ sudo mdadm --add /dev/md0 /dev/sdb1
してみる.
- 再び shutdown して, もう一つのディスクを抜いて起動. 起動した.
再び shutdown して, 両方のディスクを挿して起動. 途中でたくさんメッセージが出るけれど, 起動した. 起動後に確認してみると, /dev/md0 に /dev/sda1 が繋がっていなかったので,
$ sudo mdadm --add /dev/md0 /dev/sda1
してみる.
ちなみにテスト
/dev/sda1 に障害が起こったことにしてみる.
$ sudo mdadm --fail /dev/md0 /dev/sda1 mdadm: set /dev/sda1 faulty in /dev/md0 $ cat /proc/mdstat Personalities : [raid1] [linear] [multipath] [raid0] [raid6] [raid5] [raid4] [raid10] md0 : active raid1 sda1[2](F) sdb1[1] 200862720 blocks super 1.2 [2/1] [_U] bitmap: 2/2 pages [8KB], 65536KB chunk md1 : active (auto-read-only) raid1 sda5[2] sdb5[1] 33416768 blocks super 1.2 [2/2] [UU] unused devices: <none>
しかし, HDD (SSD) の LED は光らないね. メールは来るけど.