概要
自宅にあるマイクラサーバーでRAID1をしているストレージをSynologyに移行しようと思って、RAIDを切り離してHDDをNASに流用しようとしてたら別のHDDを初期化しちゃった。
構成
- Ubuntu 22.04.3
- mdadmで/dev/md0と/dev/md1を構築してあり、今回切り離して取り外す予定はmd1
- md0→/dev/sda1 /dev/sdb1
- md1→/dev/sdc1 /dev/sdd1
なにしちゃったの?
RAIDを止めて切り離した後に初期化をしようとしてsudo fdisk /dev/sddでパーティションを削除しようとしたら、sudo fdisk /dev/sdbでパーティション削除しちゃった
対処
RAID1なのでなんとかなるやろと思って一回再起動したらレスキューモードになりました。レスキューモードでは強制的にrootになっていたので、とりあえずメッセージに従ってsystemd rebootするもそんな物無いというメッセージがでました。どうしようもないのでハードリセット。
そもそもどうしてレスキューになるのかと起動時のメッセージを見ていると、マウントに失敗しているためだったのでまずはレスキューモードで
vim /etc/fstab
をしてmd0にマウントしているものをコメントアウトしました。
すると正常に起動しました。
起動後md0の状態をみるとsdbがロストした状態(sdaしか表示されていない状態)でinactiveになっていたので、
sudo mdadm --stop /dev/md0
をしました。その後、sudo fdisk /dev/sdbでパーティションを削除・作成しなおして、md0を組み直そうとしましたが失敗しました。
$ sudo mdadm --create /dev/md0 --level=raid1 --raid-devices=2 /dev/sda1 /dev/sdb1
mdadm: /dev/sda1 appears to contain an ext2fs file system
size=976761540K mtime=Tue Aug 30 21:31:47 2022
mdadm: /dev/sda1 appears to be part of a raid array:
level=raid1 devices=2 ctime=Sun Dec 11 18:10:12 2022
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
mdadm: super1.x cannot open /dev/sdb1: Device or resource busy
mdadm: /dev/sdb1 is not suitable for this array.
mdadm: create aborted
調べてみるとスーパーブロックを消してしまった話をまとめられていた方がいらっしゃったのでその方の記事を参考に、一度RAID1をsdaのみで組んでadbを後から追加してリビルドしたらどうかと考えました。
$ sudo mdadm --create /dev/md0 --level=raid1 --raid-devices=2 /dev/sda1 missing
mdadm: /dev/sda1 appears to contain an ext2fs file system
size=976761540K mtime=Tue Aug 30 21:31:47 2022
mdadm: /dev/sda1 appears to be part of a raid array:
level=raid1 devices=2 ctime=Sun Dec 11 18:10:12 2022
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?
Continue creating array? (y/n) y
mdadm: Fail to create md0 when using /sys/module/md_mod/parameters/new_array, fallback to creation via node
mdadm: /dev/md0 is already in use.
「アレイが組めない」みたいなエラーが出ていますが、1台だけなのでこうなるのかなと思いました。ついでにマウントもできました。
sudo mount /dev/md0 /backup
このままだと、RAID1といいつつ1台なので何の冗長性もありません。間違って消してしまったsdbを使って早いところリビルドをしようと思いましたが、リビルドをしたことがなかったので検索をしました。
mdadmのRAID構築についてまとめてくださっている方がいらっしゃったのでその方の記事を参考にリビルドをしました。リビルドと言ってもHDDを追加するだけでした。
$ sudo mdadm --manage /dev/md0 --add /dev/sdb1
mdadm: added /dev/sdb1
追加をすると自動でリビルドが始まりました。
$ sudo mdadm --detail /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Sun Feb 11 16:33:55 2024
Raid Level : raid1
Array Size : 976628736 (931.39 GiB 1000.07 GB)
Used Dev Size : 976628736 (931.39 GiB 1000.07 GB)
Raid Devices : 2
Total Devices : 2
Persistence : Superblock is persistent
Intent Bitmap : Internal
Update Time : Sun Feb 11 16:35:57 2024
State : clean, degraded, recovering
Active Devices : 1
Working Devices : 2
Failed Devices : 0
Spare Devices : 1
Consistency Policy : bitmap
Rebuild Status : 0% complete
Name : ---:0 (local to host minecraftserver)
UUID : ---
Events : 8
Number Major Minor RaidDevice State
0 8 1 0 active sync /dev/sda1
2 8 17 1 spare rebuilding /dev/sdb1
lsblkをしてみるとちゃんとmd0で使われていることが確認できます。
1TBなのでそんなに時間はかからないんじゃないかなと思ってます。
まさかこんなミスをするとは思っていませんでしたが、RAID1に助けられました。よく見て作業をしましょう…。
教訓
- デバイス名はよく見よう
- 目的が取り外しなら、本番環境で初期化とか怖いことはしないようにしよう
- mdadmの理解を深めよう