既存のdiskをソフトウェアRAIDに組み込む

子供のいたずらでPCの強制停止が頻繁に行われる昨今、いつHDDがお亡くなりになるかわからないので、自作PCソフトウェアRAIDを組んで、冗長化することにしました。

そのときのメモ。

まず、いま動いているHDDと同じ型のディスクを買ってきて、自作PCに組み込む。 (どうでもよいけれど、同じ型の2TBのディスクが2年前と同じ値段でした。)

partedで現状のディスクと同じパーティションを新しいディスクで区切る

[root@sv01 ~]# parted /dev/sda
GNU Parted 2.1
/dev/sda を使用
GNU Parted へようこそ! コマンド一覧を見るには 'help' と入力してください。
(parted) print
モデル: ATA WDC WD20EZRX-00D (scsi)
ディスク /dev/sda: 2000GB
セクタサイズ (論理/物理): 512B/4096B
パーティションテーブル: gpt

番号  開始  終了  サイズ  ファイルシステム  名前  フラグ

(parted)
(parted) mkpart primary 1049kB 600GB
(parted)
(parted) mkpart primary 600GB 1200GB
(parted)
(parted) mkpart primary 1200GB 2000GB

raidフラグをONに。

(parted) set 1 raid on
(parted) set 2 raid on
(parted) set 3 raid on
(parted)
(parted) print
モデル: ATA WDC WD20EZRX-00D (scsi)
ディスク /dev/sda: 2000GB
セクタサイズ (論理/物理): 512B/4096B
パーティションテーブル: gpt

番号  開始    終了    サイズ  ファイルシステム  名前     フラグ
 1    1049kB  600GB   600GB                     primary  raid
 2    600GB   1200GB  600GB                     primary  raid
 3    1200GB  2000GB  800GB                     primary  raid

(parted)

raidを組む。

※ここでは既存のディスクを組み込む準備をするため、初期をfault状態とする。 missingオプションがそれに当たるのだと思う。RAIDは1。デバイス数は2。

[root@sv01 ~]# mdadm --create /dev/md1 --level=1 --raid-devices=2 missing /dev/sda1
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: Defaulting to version 1.2 metadata
mdadm: array /dev/md1 started.
[root@sv01 ~]#
[root@sv01 ~]#
[root@sv01 ~]# mdadm --create /dev/md2 --level=1 --raid-devices=2 missing /dev/sda2
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: Defaulting to version 1.2 metadata
mdadm: array /dev/md2 started.
[root@sv01 ~]#
[root@sv01 ~]# mdadm --create /dev/md3 --level=1 --raid-devices=2 missing /dev/sda3
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: Defaulting to version 1.2 metadata
mdadm: array /dev/md3 started.

RAIDの状態表示(片方faultした状態になっている。)

[root@sv01 ~]# cat /proc/mdstat
Personalities : [raid1]
md3 : active raid1 sda3[1]
      781508416 blocks super 1.2 [2/1] [_U]

md2 : active raid1 sda2[1]
      585805632 blocks super 1.2 [2/1] [_U]

md1 : active raid1 sda1[1]
      585805632 blocks super 1.2 [2/1] [_U]

unused devices: <none>

RAIDを組んだディスクをフォーマットする。

mkfs -t ext4 /dev/md1
mkfs -t ext4 /dev/md2
mkfs -t ext4 /dev/md3

先ほどRAIDを組んだ新しいディスクと古いディスクの両方をmountして古いディスクからデータをコピーする

# 新しいディスク(RAID)のmount
mount /dev/md1 /mnt/hdd1
mount /dev/md2 /mnt/hdd2
mount /dev/md3 /mnt/hdd3
# 現行のディスクのmount
mount /dev/sdb1 /mnt/hdd11
mount /dev/sdb2 /mnt/hdd12
mount /dev/sdb3 /mnt/hdd13
# 現行のディスクからデータをコピーする
cp -rvp /mnt/hdd11/* /mnt/hdd1/.
cp -rvp /mnt/hdd12/* /mnt/hdd2/.
cp -rvp /mnt/hdd13/* /mnt/hdd3/.

現行のディスクをRAIDに組み込む

[root@sv01 ~]# mdadm --manage /dev/md1 -a /dev/sdb1
mdadm: added /dev/sdb1
[root@sv01 ~]#
[root@sv01 ~]#
[root@sv01 ~]# cat /proc/mdstat
Personalities : [raid1]
md3 : active raid1 sda3[1]
      781508416 blocks super 1.2 [2/1] [_U]

md2 : active raid1 sda2[1]
      585805632 blocks super 1.2 [2/1] [_U]

md1 : active raid1 sdb1[2] sda1[1]
      585805632 blocks super 1.2 [2/1] [_U]
      [>....................]  recovery =  0.0% (508992/585805632) finish=95.8min speed=101798K/sec

unused devices: <none>
[root@sv01 ~]#
[root@sv01 ~]#
[root@sv01 ~]# mdadm --manage /dev/md2 -a /dev/sdb2
mdadm: added /dev/sdb2
[root@sv01 ~]#
[root@sv01 ~]#
[root@sv01 ~]# mdadm --manage /dev/md3 -a /dev/sdb3
mdadm: added /dev/sdb3

リビルドが終わったらこんな感じ。放置して寝てたからわからないけれど、数時間かかった模様。

# 完成
[root@sv01 ~]# cat /proc/mdstat
Personalities : [raid1]
md3 : active raid1 sdb3[2] sda3[1]
      781508416 blocks super 1.2 [2/2] [UU]

md2 : active raid1 sdb2[2] sda2[1]
      585805632 blocks super 1.2 [2/2] [UU]

md1 : active raid1 sdb1[2] sda1[1]
      585805632 blocks super 1.2 [2/2] [UU]

unused devices: <none>

以上!