はじめに
今回は、RAID1の片側SSDが故障してしまった場合を想定して、復旧作業をしてみます。
あわせて、RAID1の拡張も行います。
手順を図で表すと、こんな感じです。SSD1が故障した想定です。

故障の状況により、/dev/sda、/dev/sdbがかわります。
どのデバイスが正常で、どのデバイスが異常かよく確認したうえ、読み替えて実施ください。
著者の環境では、この内容でうまくできておりますが、ご自分の環境で事前テストするのが確実です。
もしトラブルや損害が発生しましても、一切の責任を負い兼ねますのでご了承下さい。
Ubuntu Server は、24.04.2LTSを使用しています。
RAID1 正常時と、SSD1異常時の状態

RAIDの状態は、コマンド「cat /proc/mdstat」で確認できます。


今回は、/dev/sdaとして認識されていた、SSD1が異常で認識しなかった場合を想定してますので、
md0 : active raid1 sdb2[1] と sda2[0]が消えており、
116050944 blocks super 1.2 [2/1] [_U] と、[2/2] [UU] からかわっています。
復旧作業
SSD交換
異常があったSSD1を取り外し、新しいSSD3を接続します。
今回新しく使用したのは、SSD1の120GBより容量の大きな256GBのSSDを使用しています。

SSD3パーティション分割
新しいSSD(SSD3)をパーティション分割しますが、SSD2のレイアウトを一部複製する形で実施します。

パーティションレイアウト情報の書き出し
パーティションレイアウトを、問題の出ていないSSD(SSD2・・・/dev/sdb)から書き出し、ファイルとして保存します。
sudo sfdisk -d /dev/sdb > sdb.partinfo
sdbは、問題の出ていないSSDです。
sdb.partinfo は、保存するファイル名なので、何でもよいです。
結果は以下のようになります。
sdb.partinfoの内容 |
label: gpt label-id: E071FA00-049C-46BF-A51B-D52C17B005A2 device: /dev/sdb unit: sectors first-lba: 34 last-lba: 250069646 sector-size: 512 /dev/sda1 : start= 2048, size= 2201600, type=C12A7328-F81F-11D2-BA4B-00A0C93EC93B, uuid=84284536-B6E9-46F4-BA88-789987C05BE1 /dev/sda2 : start= 2203648, size= 247863296, type=0FC63DAF-8483-4772-8E79-3D69D8477DE4, uuid=3195D86A-9552-4F6D-9771-5450411DAB44 |
パーティションレイアウト情報の編集
読み出した情報、sdb.partinfo から赤字部分を削除します。
やっていることは、
label-idやuuid等がSSD3(/dev/sda)とSSD2(/dev/sdb)で同じにならないように、削除。
容量違いのSSDを使うので、last-lbaや、第2パーティションのサイズ情報も消してしまい、第2パーティションが最大容量となるようにする。
sudo nano ./sdb.partinfo
編集済みsdb.partinfoの内容 |
label: gpt device: /dev/sdb unit: sectors first-lba: 34 sector-size: 512 /dev/sda1 : start= 2048, size= 2201600, type=C12A7328-F81F-11D2-BA4B-00A0C93EC93B /dev/sda2 : start= 2203648, size= , type=0FC63DAF-8483-4772-8E79-3D69D8477DE4 |
SSD3にパーティション情報の反映(パーティション分割)
sudo sfdisk /dev/sda < ./sdb.partinfo
くれぐれも、sda と sdb を間違えないようにしてください。
結果

RAID1にSSD3の第2パーティション/dev/sda2を追加して復旧

sudo mdadm --add /dev/md0 /dev/sda2
くれぐれも、sda と sdb を間違えないようにしてください。

cat /proc/mdstat

RAID1の復旧自体は、これが100%になれば完了です。
ESPの復旧 (/dev/sda1の復旧)
SSD3の/dev/sda1とSSD2の/dev/sdb1はRAID1になっていないので、これを復旧します。
ここには、起動時に必要なファイルが入っています。
SSD3 /dev/sda1 をフォーマット
FAT形式でフォーマットします。
sudo mkfs.vfat /dev/sda1

grub-efiの再設定・・・ESP(/dev/sda1)の復旧
sudo dpkg-reconfigure grub-efi-$(dpkg --print-architecture)

途中、5つほど問い合わせがありますが、4つ目まではデフォルトのまま、5つめのインストール先の設定で、RAIDを構成している2つのSSDを選択します。





RAID1拡張
RAID1の容量を、容量の少ない方、今回はSSD2の第2パーティションいっぱいまで広げます。

sudo mdadm --grow --size=max /dev/md0

sudo mdadm --detail /dev/md0

もともとは、SSD1の容量にあわせて設定されていた118.84GB(110.67GiB)が、126.84GB(118.13GiB)まで広がりました。
再起動
SSD1が故障したため、/boot/efi がマウントされていない状態のままです。
再起動して、マウントします。

/etc/fstab を変更して、/boot/efiには、/dev/sda1をマウントするようにしています。
詳しくは、前回記事のこちらを参照ください。
以上で、復旧作業は完了になります。
おまけ
grub-efiの再設定・・・ESP(/dev/sda1)の復旧で、警告がでた場合
本記事の作業を、何回か繰り替えしためしましたが、まれに発生しました。(下図赤字部分)
よく分かりませんでしたが、この状態でも起動はします。
再起動後に再び「grub-efiの再設定・・・ESP(/dev/sda1)の復旧」の
sudo dpkg-reconfigure grub-efi-$(dpkg --print-architecture)
を実行したらエラーは出ずに終了したので、よしとしてます。

RAID1領域の縮小
RAID1領域は、縮小もできます。ただし、実際に使用している容量より小さくはできません。
sudo mdadm --grow --size=<size_Kilobytes> /dev/md0
--size=のあとに、サイズをキロバイト単位で指定します。
実施例)123865088 (118.13 GiB 126.84 GB)から、116050944 (110.67 GiB 118.84 GB)に縮小

コメント