2014/09/02(Tue)Linux software RAIDでさらに安全なディスク交換方法
2014/09/02 23:12
システムをoperationalな状態でresyncしないのであればともかく、resync中にもRAID1上のディスクが刻々と更新されるのであれば、数時間busyでdegradedな状態が続くためよろしくない。
単に3台目を足してから2台に戻せば良いのだという事に気づき、今回、実際にオペレーションしてみた。
環境について
移行時の環境はFedora 20 (i686)で、カーネルは3.15.10-201.fc20.i686+PAE。ディスクは3発で、/がsingle、/homeを/dev/md0としてRAID1している。
$ cat /proc/mdstat Personalities : [raid1] md0 : active raid1 sdc1[4] sdb1[3] 976630488 blocks super 1.1 [2/2] [UU] bitmap: 0/4 pages [0KB], 131072KB chunk unused devices: <none>物理パーティション構成は、
- /dev/sda (160GB)
- /dev/sda1 = / (ext3)
- /dev/sda2 = swap
- /dev/sdb (1TB)
- /dev/sdb1 = /home (RAID1 member) (ext3)
- /dev/sdc (1TB)
- /dev/sdc1 = /home (RAID1 member) (ext3)
sdbは引き続き1TBのままなので、RAID1アレイ上の領域は1TBのままとし、sdbを2TB玉に入れ替えるまで、sdcの後ろ1TBは未使用状態となる。
移行手順概要
/dev/md0の移行- 何もせず一度シャットダウンし、新しいディスクを追加する(/dev/sdd)
- sddにfdiskでパーティション情報を作成し、/dev/md0に追加する
- このままだと/dev/sddは予備状態となるので、RAID1の構成台数を3台に変更する
- resyncを待ち、完了したら/dev/sdcをRAIDから脱退し、シャットダウン
- RAID1の構成台数を2台に変更する
なお、1TBのsyncには4時間程度かかった。
作業内容
バックアップ
今回はdegradedな状態になることがないので大丈夫だろうけど、念のためオフライン媒体にバックアップをとっておく。RAID 1ディスクの変更
- 新しいディスクを追加
シャットダウンして、新しいディスクをマウントすると/dev/sddに新しいディスクが見える。
- パーティション情報の作成
# LANG=C fdisk -l /dev/sdc Disk /dev/sdc: 1.8 TiB, 2000398934016 bytes, 3907029168 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 4096 bytes I/O size (minimum/optimal): 4096 bytes / 4096 bytes Disklabel type: dos Disk identifier: 0x105ba188 Device Boot Start End Blocks Id System /dev/sdc1 2048 3907029167 1953513560 fd Linux raid autodetect
- 新しいディスクをRAIDアレイへ参加
# mdadm /dev/md0 --add /dev/sdd1
RAID1を構成するディスク枚数を変更する
# mdadm /dev/md0 --grow --raid-devices=3この後は、cat /proc/mdstatを確認しながらしばらくsyncを待つ。
mdadm /dev/md0 --wait && beepとしておけば、作業完了時にbeepが鳴る。
- 古いディスクをRAIDアレイから脱退
外すデバイスが正しいかどうか、smartctlコマンド等を使用して型番・S/Nを確認すること。
# mdadm /dev/md0 --fail /dev/sdc1 # mdadm /dev/md0 --remove /dev/sdc1その後、RAID1を構成するディスク枚数を元に戻しておく。(missingとして空きっぱなし°radedな状態にしておいても問題はないが…)
# mdadm /dev/md0 --grow --raid-devices=2
- 古いディスクを外す
- リブート
PATAデバイスと異なり、SATAデバイスの場合は順番に詰めてデバイス名が振られるようである。
# mdadm --detail /dev/md0 [sudo] password for kero: /dev/md0: Version : 1.1 Creation Time : Sat Sep 25 23:53:33 2010 Raid Level : raid1 Array Size : 976630488 (931.39 GiB 1000.07 GB) Used Dev Size : 976630488 (931.39 GiB 1000.07 GB) Raid Devices : 2 Total Devices : 2 Persistence : Superblock is persistent Intent Bitmap : Internal Update Time : Tue Sep 2 23:08:29 2014 State : active Active Devices : 2 Working Devices : 2 Failed Devices : 0 Spare Devices : 0 Name : localhost.localdomain:0 UUID : d29f1877:8aa796ce:e307c1c3:f92b33e2 Events : 158283 Number Major Minor RaidDevice State 3 8 17 0 active sync /dev/sdb1 4 8 33 1 active sync /dev/sdc1
- 完了
$ cat /proc/mdstat Personalities : [raid1] md0 : active raid1 sdc1[4] sdb1[3] 976630488 blocks super 1.1 [2/2] [UU] bitmap: 0/4 pages [0KB], 131072KB chunk unused devices: <none>