HDDを流用しようと思って間違ったHDDを初期化しちゃった話

# 概要

自宅にあるマイクラサーバーで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/sd<font color="yellow">d</font>でパーティションを削除しようとしたら、sudo fdisk /dev/sd<font color="red">b</font>でパーティション削除しちゃった

## 対処

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で使われていることが確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/238748/ac7efa0f-3975-93c0-8598-beb3860f97f4.png)
1TBなのでそんなに時間はかからないんじゃないかなと思ってます。
まさかこんなミスをするとは思っていませんでしたが、RAID1に助けられました。よく見て作業をしましょう…。

## 教訓

* デバイス名はよく見よう
* 目的が取り外しなら、本番環境で初期化とか怖いことはしないようにしよう
* mdadmの理解を深めよう

## 参考

* [空飛ぶラズベリーパイ - RAIDをやめようと思ってスーパーブロックを削除しちゃった話（解決済み）](https://ppdr.softether.net/raid-superblock-recovery)
*  [ぺんぎんや - 【Linux】mdadmを用いたソフトウェアRAID構築](https://e-penguiner.com/software-raid-using-mdadm-on-linux/)