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 は光らないね. メールは来るけど.