RAID1の片方が逝ったのでストレージを差し替えた

久々にまともなネタが出来た。

以前、NASのためにRAID1を組んだが、とうとう壊れた模様。差し替え作業は初めてかもしれない。

mdadmを使っているが、これはオンラインのまま差し替えができるはず。やっていきましょう。

行ったストレージ交換の要点

  • cat /proc/mdstatmdadm --detail RAIDデバイス名 で faulty なストレージデバイスがないか確認する
  • mdadm --remove RAIDデバイス名 ストレージデバイス名RAIDバイスの構成から切り離す
  • echo 1 > /sys/block/ストレージデバイス名/device/delete でストレージデバイスを削除してLinuxの管理から外す(?)
  • ストレージデバイスを物理的に差し替える
  • fdiskなどで新たなストレージデバイスが認識したことを確認する
  • mdadm --add RAIDデバイス名 ストレージデバイス名RAID構成に戻す
  • cat /proc/mdstat でちゃんと同期していることを確認する

マシンを止めることなくできた。

今回はRAIDバイス名が/dev/md1、ストレージデバイス名が/dev/sdd(sdd)です。

以下は作業ログとか駄文。

ある日のmdstatの様子を見る(監視とかしていないので、気が向いた時に見ている)

# cat /proc/mdstat
Personalities : [raid1]
md0 : active raid1 sdb[1] sda[0]
      1953513424 blocks super 1.2 [2/2] [UU]

md1 : active raid1 sdd[1](F) sdc[0]
      1953513424 blocks super 1.2 [2/1] [U_]

unused devices: <none>

ん?

# mdadm --detail /dev/md1
/dev/md1:
        Version : 1.2
  Creation Time : Sun Jan 20 07:16:16 2013
     Raid Level : raid1
     Array Size : 1953513424 (1863.02 GiB 2000.40 GB)
  Used Dev Size : 1953513424 (1863.02 GiB 2000.40 GB)
   Raid Devices : 2
  Total Devices : 2
    Persistence : Superblock is persistent

    Update Time : Sun Feb  3 01:00:08 2019
          State : clean, degraded
 Active Devices : 1
Working Devices : 1
 Failed Devices : 1
  Spare Devices : 0

           Name : localhost.localdomain:1  (local to host localhost.localdomain)
           UUID : 7d573415:7fb6d27b:2b2553d6:c8be5452
         Events : 373

    Number   Major   Minor   RaidDevice State
       0       8       32        0      active sync   /dev/sdc
       2       0        0        2      removed

       1       8       48        -      faulty   /dev/sdd

Oh...

あれ、少し前は元気に動いてた気がするんだけども・・・ちゃんと監視しないとダメっすね・・・

RAIDバイスの構成から外す

とりあえず外す。/dev/md1にぶらさがっている/dev/sddがダメになっている。

# mdadm --remove /dev/md1 /dev/sdd
mdadm: hot removed /dev/sdd from /dev/md1


# dadm --detail /dev/md1
/dev/md1:
        Version : 1.2
  Creation Time : Sun Jan 20 07:16:16 2013
     Raid Level : raid1
     Array Size : 1953513424 (1863.02 GiB 2000.40 GB)
  Used Dev Size : 1953513424 (1863.02 GiB 2000.40 GB)
   Raid Devices : 2
  Total Devices : 1
    Persistence : Superblock is persistent

    Update Time : Tue Feb  5 02:22:01 2019
          State : clean, degraded
 Active Devices : 1
Working Devices : 1
 Failed Devices : 0
  Spare Devices : 0

           Name : localhost.localdomain:1  (local to host localhost.localdomain)
           UUID : 7d573415:7fb6d27b:2b2553d6:c8be5452
         Events : 374

    Number   Major   Minor   RaidDevice State
       0       8       32        0      active sync   /dev/sdc
       2       0        0        2      removed

/dev/sddが外れた事がわかる。

この壊れた奴をもう一度追加したらどうなるんだろう?復活とかしないかな?

# mdadm --add /dev/md1 /dev/sdd
mdadm: Failed to write metadata to /dev/sdd

うーん、ダメっぽい。 見たことないけど、書き込みが出来ない状態っぽいからきっともうだめなやつだろう。

バイスを外す前準備

echo 1 > /sys/block/sdd/device/delete

これで物理的に引っこ抜いても良いみたい。

物理的に引っこ抜く

でも交換とか初めてなんだけど、電気入っているまま引っこ抜いても大丈夫かな・・・ そもそも/dev/sddってどれだろう・・・5年前に組んだやつだから覚えてない・・・

4台刺さってて/dev/sddだから端っこだろうけど・・・

まぁ、引っこ抜いた後、fdisl -lで情報が取れないやつが当たりだろう!!

~~物理的に引っこ抜く音~~

さてどうだ?

# fdisk -l | grep /dev/s

警告: GPT (GUID パーティションテーブル) が '/dev/md1' に検出されました! この fdisk ユーティリティは GPT をサポートしません。GNU Parted を使ってください。

ディスク /dev/sdb: 2000.4 GB, 2000398934016 バイト
/dev/sdb1               1      243202  1953513472   8e  Linux LVM
ディスク /dev/sdc: 2000.4 GB, 2000398934016 バイト
/dev/sdc1               1      243202  1953513472   8e  Linux LVM
ディスク /dev/sda: 2000.4 GB, 2000398934016 バイト
/dev/sda1               1      243202  1953513472   8e  Linux LVM
ディスク /dev/sde: 320.1 GB, 320072933376 バイト
/dev/sde1   *           1          64      512000   83  Linux
/dev/sde2              64       38914   312057856   8e  Linux LVM

よし。/dev/sddは居ないな。

新しいストレージに差し替え

~~物理的に差し込む音~~

換装完了!

・・・なお、換装したストレージは過去に別のマシンでRAIDで使っており、壊れた時の残骸エラーを起こしたやつ・・・

なので、壊れた時の残骸が残ってる。

いやまあ使っちゃダメなのは分かっているのだけど、RAID0で壊れた奴の片割れなので使えるんじゃないかなって・・・いやちゃんと買いなおします。今週末には・・・忙しいけど・・・

Linux側のご機嫌はいかがかな?

# fdisk -l | grep /dev/s

警告: GPT (GUID パーティションテーブル) が '/dev/md1' に検出されました! この fdisk ユーティリティは GPT をサポートしません。GNU Parted を使ってください。

ディスク /dev/sdb: 2000.4 GB, 2000398934016 バイト
/dev/sdb1               1      243202  1953513472   8e  Linux LVM
ディスク /dev/sdc: 2000.4 GB, 2000398934016 バイト
/dev/sdc1               1      243202  1953513472   8e  Linux LVM
ディスク /dev/sda: 2000.4 GB, 2000398934016 バイト
/dev/sda1               1      243202  1953513472   8e  Linux LVM
ディスク /dev/sde: 320.1 GB, 320072933376 バイト
/dev/sde1   *           1          64      512000   83  Linux
/dev/sde2              64       38914   312057856   8e  Linux LVM
ディスク /dev/sdd: 2000.4 GB, 2000398934016 バイト
/dev/sdd1               1      243202  1953513472   8e  Linux LVM

新しい /dev/sdd が認識されてる。よしよし。

中古品を使うから無駄なトラブルを生む

mdadm --addしようとしてもDevice or resource busyでダメだった。アアン?

# mdadm --add /dev/md1 /dev/sdd
mdadm: Cannot open /dev/sdd: Device or resource busy

刺したばっかりなのにマウントもせずに勝手に誰かが使うわけないだろ!!バグってんのか!!!

と思って色々コマンド叩いてたら多分、RAIDとして動こうとしてた。こわい

# mdadm --detail --scan
...
INACTIVE-ARRAY /dev/md127 metadata=1.2 name=localhost.localdomain:1 UUID=d5d49c53:6a939df9:891016b8:57c97042

で、ふとmdadm --createはできるけど削除はどうするんだ?と気になって調べたら--misc --zero-superblockで初期化的な事をするとよいらしい。--removeじゃないのか。

コマンドはこんな感じ。

# mdadm --misc --zero-superblock /dev/sdd

すると、mdadm --detail --scanからも消えた。多分これで大丈夫だろう。

本当は新品を使うはずなので、こんな作業は不要なんだけども、RAIDで使ってた中古の残骸を使う場合は役に立つかな・・・

RAIDバイスの構成に新しいストレージを戻す

さて、戻しましょう。

# mdadm --add /dev/md1 /dev/sdd
mdadm: added /dev/sdd

直後「パーティションの初期化的なやつっていらなかったっけ?大丈夫かな?」と不安になるが、とりあえず同期が始まったか確認してみる。

# cat /proc/mdstat
Personalities : [raid1]
md0 : active raid1 sdb[1] sda[0]
      1953513424 blocks super 1.2 [2/2] [UU]

md1 : active raid1 sdd[2] sdc[0]
      1953513424 blocks super 1.2 [2/1] [U_]
      [>....................]  recovery =  1.7% (33729600/1953513424) finish=223.4min speed=143176K/sec

同期がはじまってる。大丈夫そうだ。よかったよかった。

まぁ中古の残骸を使ってるので早めに新品に換装しないとね・・・2TBまだ売ってるかなぁ。 でも、2TB * 2個もいっぱいになってきたし、乗り換え時か。 ディスク容量を増やしたい時はどうやるんだろう。GPTパーティションならうまく拡張できるのかな。それとももう1台用意して引っ越しがよいのかな。

(追記) SMARTの値とかみればよかった