LinuxでのSoftwareRAID再構築メモ

自宅のサーバーはSSDでRAID1構成をしているのですが、SSDはたまにゼロライトしてやらないと速度が低下します。RAID1構成なので片方切り離し→ゼロライト→再構築という技が使えるので、その時の操作メモを残しておきます。SoftwareRAIDな為、マシンを停止する事なく再構築を行う事ができます。(ここの操作はリスクが大きいので必ずバックアップを行ってから操作してください。また、正しいという保証もしませんのであらかじめご了承下さい。)

現在自宅のサーバーでは、sda、sdb、sdc、sddがSSD(全て同型の120G)、sde、sdfがHDD(WD 3TB)になっており、[sda2,sdb2]、[sdc1,sdd1]、[sde1、sdf1]という構成でRAID1を3アレイ構成しています。sda1、sdb1は/bootなのですが、このパーテーションはRAIDにしていません。今回は[sdc1,sdd1]で構成されるmd1をゼロライトし再構築してみます。sdcとsddは全く同じパーテーション構成になっており、それを前提に操作を行います。RAIDを構成する物理ハードディスクのパーテーション構成がそれぞれ違う場合は絶対にこの操作は実行しないで下さい。

# cat /proc/mdstat 
Personalities : [raid1] 
md2 : active raid1 sde1[0] sdf1[1]
      2930263928 blocks super 1.2 [2/2] [UU]
      
md1 : active raid1 sdc1[0] sdd1[1]
      117218176 blocks [2/2] [UU]
      
md0 : active raid1 sda2[2] sdb2[3]
      116693948 blocks super 1.1 [2/2] [UU]
      bitmap: 1/1 pages [4KB], 65536KB chunk

▲現在のRAID構成

まずはゼロライトするディスクを停止し切り離す操作を行います。mdadmコマンドを使い下記のように操作します。

# mdadm --manage /dev/md1 --fail /dev/sdd1
# cat /proc/mdstat 
Personalities : [raid1] 
(略)
md1 : active raid1 sdc1[0] sdd1[2](F)
      117218176 blocks [2/1] [U_]
# mdadm --manage /dev/md1 --remove /dev/sdd1

切り離したらddでゼロライトを行います。ゼロライトする前にfsckでもした方がいいかなと思ったのですが、fsckはRAIDの構成デバイスでは使えないようです。今回はデバイス全体をゼロライトしました。特に起動ドライブをゼロライトする時はリスクが大きいのでパーテーション単位で行うのが無難な気もします…。

# dd if=/dev/zero of=/dev/sdd bs=1M
dd: writing `/dev/sdd': デバイスに空き領域がありません
114474+0 records in
114473+0 records out
120034123776 bytes (120 GB) copied, 899.387 s, 133 MB/s
# partprobe /dev/sdd

デバイスを完全にゼロライトしてしまったのでパーテーションテーブルも消えてしまいます。その為ゼロライトが終わったらRAIDを構成しているもう片方のディスクからMBRをコピーし、partprobeコマンドを実行しパーテーション情報を更新します。

# dd if=/dev/sdc of=/dev/sdd bs=512 count=1
1+0 records in
1+0 records out
512 bytes (512 B) copied, 0.00101181 s, 506 kB/s
# partprobe /dev/sdd
# cat /proc/partitions 
major minor  #blocks  name

(略)
   8       48  117220824 sdd
   8       49  117218241 sdd1

パーテーション情報が更新されたら後は再びRAIDアレイに追加し再構築するだけです。mdadmコマンドでaddするとすぐに再構築が始まります。その様子は/proc/mdstatで確認する事ができます。

# mdadm --manage /dev/md1 --add /dev/sdd1
mdadm: added /dev/sdd1
# cat /proc/mdstat
Personalities : [raid1] 
(略)
md1 : active raid1 sdd1[2] sdc1[0]
      117218176 blocks [2/1] [U_]
      [>....................]  recovery =  0.5% (685248/117218176) finish=25.5min speed=76138K/sec

再構築が完了すれば操作は完了です。このサーバーの場合30分程度で再構築が完了しました。完了後エラーが出ていない事を確認してもう片方のディスクでも同じ事を実行すればOKです。最後に念のため再起動した方が良いと思います。起動ディスクでゼロライトを実行したら起動しなくなってしまう可能性もあるので…。

コメントを残す