Open17

mdadmを使用したソフトウェアRaid構築

でぶねこでぶねこ

下記コマンドでHDDの認識状況を確認

sudo fdisk -l

自分の環境では「/dev/sdb」と「/dev/sdc」に割り当てられていることを確認

でぶねこでぶねこ

「parted」コマンドを使用し、GPTで全容量を指定したパーティション作成

sudo parted --script /dev/sdb "mklabel gpt"
sudo parted --script /dev/sdc "mklabel gpt"
sudo parted --script /dev/sdb "mkpart primary 0% 100%"
sudo parted --script /dev/sdc "mkpart primary 0% 100%"

続いてパーティションにraidフラグを付与する
付与しないとカーネルにraidアレイとして認識されないらしい

sudo parted --script /dev/sdb "set 1 raid on"
sudo parted --script /dev/sdc "set 1 raid on"

fdiskを使用して下記のようにフラグが立っていることを確認

Device     Start        End    Sectors  Size Type
/dev/sdb1   2048 3907028991 3907026944  1.8T Linux RAID
~~
Device     Start        End    Sectors  Size Type
/dev/sdc1   2048 3907028991 3907026944  1.8T Linux RAID
でぶねこでぶねこ

「mdadm」を使用してRaidを構築する

sudo mdadm --create /dev/md0 --level=raid1 --raid-devices=2 /dev/sdb1 /dev/sdc1

続けるか問われるので「y」

Continue creating array? y 
でぶねこでぶねこ

下記コマンドで同期の状態が確認できる
「Resync」が100%になれば同期完了

$ sudo mdadm --detail /dev/md0
/dev/md0:
           Version : 1.2
     Creation Time : Wed Dec  6 12:53:41 2023
        Raid Level : raid1
        Array Size : 1953381376 (1862.89 GiB 2000.26 GB)
     Used Dev Size : 1953381376 (1862.89 GiB 2000.26 GB)
      Raid Devices : 2
     Total Devices : 2
       Persistence : Superblock is persistent

     Intent Bitmap : Internal

       Update Time : Wed Dec  6 12:58:08 2023
             State : clean, resyncing 
    Active Devices : 2
   Working Devices : 2
    Failed Devices : 0
     Spare Devices : 0

Consistency Policy : bitmap

     Resync Status : 1% complete

              Name : hoge:0  (local to host hoge)
              UUID : ea4e713e:82be639e:88134145:98c2a87c
            Events : 53

    Number   Major   Minor   RaidDevice State
       0       8       17        0      active sync   /dev/sdb1
       1       8       33        1      active sync   /dev/sdc1
でぶねこでぶねこ

ext4を指定してフォーマット

$ sudo mkfs -t ext4 /dev/md0
mke2fs 1.46.5 (30-Dec-2021)
Creating filesystem with 488345344 4k blocks and 122093568 inodes
Filesystem UUID: 19990bb6-df17-4688-9989-b9445c4b130d
Superblock backups stored on blocks: 
        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 
        4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968, 
        102400000, 214990848

Allocating group tables: done                            
Writing inode tables: done                            
Creating journal (262144 blocks): done
Writing superblocks and filesystem accounting information: done
でぶねこでぶねこ

マウント用フォルダを作成し「/dev/md0」をマウントする

sudo mkdir /mnt/raid1
sudo chown -R username:username /mnt/raid1
sudo mount /dev/md0 /mnt/raid1

dfで確認

$ df
Filesystem                         1K-blocks    Used  Available Use% Mounted on
~略~
/dev/md0                          1921594568      28 1823909088   1% /mnt/raid1

OK

でぶねこでぶねこ

fstabに追記して再起動時でもマウントするように設定する
作成した「/dev/md0」は勝手に名前が変わることがあるらしいのでUUIDで指定する

$ blkid | grep md
/dev/md0: UUID="19990bb6-df17-4688-9989-b9445c4b130d" BLOCK_SIZE="4096" TYPE="ext4"

これを使用して下記を追記する

$ sudo vim /etc/fstab
+ /dev/disk/by-uuid/19990bb6-df17-4688-9989-b9445c4b130d /mnt/raid1 ext4 defaults 0 0

エラーがないか確認する

sudo mount -a
でぶねこでぶねこ

再起動してもマウントされていることを確認
md127になっていますね

$ df /mnt/raid1
Filesystem      1K-blocks  Used  Available Use% Mounted on
/dev/md127     1921594568    28 1823909088   1% /mnt
でぶねこでぶねこ

マウントしたフォルダの所有者がrootのため作業ユーザでファイル作成ができない
適切ではない気がするが下記のように対処する

cd /mnt/raid1
sudo chown -R username:username ./

これで作業ユーザの所有になり、再起動後でも編集ができる
…もっと適切な対処はないものか

でぶねこでぶねこ

今回は「/dev/sdb1」を故障したものとして練習する

$ sudo mdadm --fail /dev/md127 /dev/sdb1
mdadm: set /dev/sdb1 faulty in /dev/md127

raidアレイの状態を確認する

$ sudo mdadm --detail /dev/md127
〜〜
    Number   Major   Minor   RaidDevice State
       0       8       33        0      active sync   /dev/sdc1
       -       0        0        1      removed

       1       8       17        -      faulty   /dev/sdb1

OKのよう
またこの状態でもマウントしたフォルダにアクセスできることを確認

でぶねこでぶねこ

続いて故障扱いした「/dev/sdb1」をアレイから取り除く

$ sudo mdadm --remove /dev/md127 /dev/sdb1
mdadm: hot removed /dev/sdb1 from /dev/md127
でぶねこでぶねこ

取り除いたsdbのパーティションを削除する

$ sudo fdisk /dev/sdb
Command (m for help): d
Selected partition 1
Partition 1 has been deleted.

続いてパーティションテーブルを削除する

$ sudo wipefs -af /dev/sdb

これでHDDが綺麗になったはず

でぶねこでぶねこ

再度HDDのパーティション等の設定を行う

$ sudo parted --script /dev/sdb "mklabel gpt"
$ sudo parted --script /dev/sdb "mkpart primary 0% 100%"
$ sudo parted --script /dev/sdb "set 1 raid on"
でぶねこでぶねこ

作成しなおしたHDD(/dev/sdb1)をアレイに追加する

$ sudo mdadm --add /dev/md127 /dev/sdb1
mdadm: re-added /dev/sdb1

…re-addですって
パーティションを同じように作り直したので同じHDDと認識されたのかな

でぶねこでぶねこ

詳細を確認、同期はできているようですね

$ sudo mdadm --detail /dev/md127
/dev/md127:
           Version : 1.2
     Creation Time : Wed Dec  6 12:53:41 2023
        Raid Level : raid1
        Array Size : 1953381376 (1862.89 GiB 2000.26 GB)
     Used Dev Size : 1953381376 (1862.89 GiB 2000.26 GB)
      Raid Devices : 2
     Total Devices : 2
       Persistence : Superblock is persistent

     Intent Bitmap : Internal

       Update Time : Sat Dec 16 09:35:10 2023
             State : clean 
    Active Devices : 2
   Working Devices : 2
    Failed Devices : 0
     Spare Devices : 0

Consistency Policy : bitmap

              Name : garnet:0  (local to host garnet)
              UUID : ea4e713e:82be639e:88134145:98c2a87c
            Events : 3939

    Number   Major   Minor   RaidDevice State
       0       8       33        0      active sync   /dev/sdc1
       1       8       17        1      active sync   /dev/sdb1