ほぼ NAS として使ってる自宅サーバ (HP ProLiant ML110 G5) のデータ領域の空きが 5% を切ったので,重い腰を上げて HDD 換装に着手。
2009/01/11 に構築した際に使い始めた 1T バイトの HDD (WD10EADS) 2 台の代わりに 3T バイトの HDD (WD30EZRX) を 2 台取り付けて,今までと同じようにソフトウェア RAID1 構成とする。
Drobo シリーズがもっと安ければ良かったんだけどねー。
記憶が曖昧だったのが SATA ポートの数で,4 つだったか 6 つだったかあやふやなまま準備した。
ルートパーティション用の HDD 1 台とデータ用の HDD 2 台と DVD ドライブ 1 台で SATA ポート 4 つが埋まってるのは確実なので,空きがあるかどうかが問題。
- SATA ポートが 4 つの場合:
- まず DVD ドライブの代わりに新 HDD を 1 台だけ取り付け,RAID1 を 1 台のみで構築してデータをコピーした後,換装作業を完了させ,残りの 1 台を同期させる。もしくは,ルートパーティション用の HDD と DVD ドライブの代わりに新 HDD を 2 台とも取り付けて USB ブートで作業を進めた後,換装作業を完了させるという手もある。
- SATA ポートが 6 つの場合:
- 新 HDD を 2 台とも追加で取り付けて RAID1 を構築してコピーした後,旧 HDD を取り外せば換装完了。
きょう作業を始めて実際に開けてみると,SATA ポートは 6 つあるのに電源はコードの都合で 5 台しか届かないというちぐはぐな状態だった。
なので,コピー作業中は DVD ドライブに通電しないことにして対処。
ここにこうやってメモを残しておけば,次回は準備万端で作業できるはず!
¶ 新 HDD の初期化
今回用意した WD30EZRX は BigSector (Advanced Format Technology (AFT)) が採用されてるため,アラインメントに気をつけてあげないと,ディスクのアクセス速度が格段に落ちてしまうもよう。
事前に調べたところ,以下の Web ページの手順がシンプルだったので,参考にしてみた。
tiger# mdadm --create --metadata 1.0 --verbose /dev/md1 --level=raid1 --raid-devices=2 /dev/sdd /dev/sde
mdadm: size set to 2930266448K
mdadm: array /dev/md1 started.
tiger# pvcreate --dataalignment 64K /dev/md1
Device /dev/md1 not found (or ignored by filtering).
tiger#
あれっ,LVM の物理ボリュームが作成できない。
tiger# pvcreate --force --dataalignment 64K /dev/md1
Device /dev/md1 not found (or ignored by filtering).
tiger# pvcreate --force --force --dataalignment 64K /dev/md1
Device /dev/md1 not found (or ignored by filtering).
tiger#
あれれ!?
ここでトラブるのは想定外だったから慌てて Google 先生と親密になって試行錯誤してみるも,解決できないまま,時間だけが過ぎていく。
まったく pvcreate の考えることはわけがわからないよ! と途中で諦めて,急にやる気が失せたので LVM は使わず,ディスク丸ごと RAID 化するのもやめて,従来通りパーティションを事前に作る手順でアラインメントだけ意識する方向に変更。
作りかけの RAID1 ボリュームを消して,
tiger# mdadm --stop /dev/md1
tiger# mdadm --zero-superblock /dev/sdd /dev/sde
tiger#
1 台目と 2 台目の HDD にアラインメントを調整したパーティションを作って,
tiger# parted /dev/sdd
GNU Parted 2.3
Using /dev/sdd
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) unit MiB
(parted) mklabel gpt
(parted) mkpart primary xfs 1 -1
(parted) set 1 raid on
(parted) print
Model: ATA WDC WD30EZRX-00M (scsi)
Disk /dev/sdd: 2861588MiB
Sector size (logical/physical): 512B/4096B
Partition Table: gpt
Number Start End Size File system Name フラグ
1 1.00MiB 2861588MiB 2861587MiB xfs primary raid
(parted) quit
通知: You may need to update /etc/fstab.
tiger# parted /dev/sde
GNU Parted 2.3
Using /dev/sde
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) unit MiB
(parted) mklabel gpt
(parted) mkpart primary xfs 1 -1
(parted) set 1 raid on
(parted) print
Model: ATA WDC WD30EZRX-00M (scsi)
Disk /dev/sde: 2861588MiB
Sector size (logical/physical): 512B/4096B
Partition Table: gpt
Number Start End Size File system Name フラグ
1 1.00MiB 2861588MiB 2861587MiB xfs primary raid
(parted) quit
通知: You may need to update /etc/fstab.
tiger#
今度はディスク全体ではなくパーティションを指定して RAID1 ボリュームを作成。
tiger# mdadm --create --metadata 1.0 --verbose /dev/md1 --level=raid1 --raid-devices=2 /dev/sdd1 /dev/sde1
mdadm: size set to 2930264952K
mdadm: array /dev/md1 started.
tiger# mdadm --detail /dev/md1
/dev/md1:
Version : 1.0
Creation Time : Mon Aug 15 13:15:01 2011
Raid Level : raid1
Array Size : 2930264952 (2794.52 GiB 3000.59 GB)
Used Dev Size : 2930264952 (2794.52 GiB 3000.59 GB)
Raid Devices : 2
Total Devices : 2
Persistence : Superblock is persistent
Update Time : Mon Aug 15 13:15:01 2011
State : clean
Active Devices : 2
Working Devices : 2
Failed Devices : 0
Spare Devices : 0
Name : tiger:1 (local to host tiger)
UUID : ef859f19:46d4975c:6e633508:b0c9e40f
Events : 0
Number Major Minor RaidDevice State
0 8 49 0 active sync /dev/sdd1
1 8 65 1 active sync /dev/sde1
tiger# cat /proc/mdstat
Personalities : [raid1]
md1 : active (auto-read-only) raid1 sde1[1] sdd1[0]
2930264952 blocks super 1.0 [2/2] [UU]
resync=PENDING
md0 : active raid1 sdb5[0] sdc5[1]
976759872 blocks [2/2] [UU]
unused devices: <none>
tiger#
再起動後にも認識されるよう,mdadm.conf への追記を忘れずに。
tiger# mdadm --detail --scan
ARRAY /dev/md0 metadata=0.90 UUID=ecc21341:a61f3f54:05aa1075:7607001b
ARRAY /dev/md1 metadata=1.0 name=tiger:1 UUID=ef859f19:46d4975c:6e633508:b0c9e40f
tiger# mdadm --detail --scan | grep /dev/md1
ARRAY /dev/md1 metadata=1.0 name=tiger:1 UUID=ef859f19:46d4975c:6e633508:b0c9e40f
tiger# mdadm --detail --scan | grep /dev/md1 >> /etc/mdadm/mdadm.conf
tiger#
今回もファイルシステムは XFS でいいやと mkfs.xfs。
3T バイトでも,サッという間に終わる。
tiger# mkfs.xfs -b size=4k -l version=2,size=128m /dev/md1
meta-data=/dev/md1 isize=256 agcount=32, agsize=22892695 blks
= sectsz=512 attr=2, projid32bit=0
data = bsize=4096 blocks=732566238, imaxpct=5
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0
log =internal log bsize=4096 blocks=32768, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
tiger# mount -o logbufs=8 /dev/md1 /mnt
tiger# df -h /data /mnt
Filesystem Size Used Avail Use% マウント位置
/dev/mapper/tiger_data-data_1
932G 901G 31G 97% /data
/dev/md1 2.8T 5.1M 2.8T 1% /mnt
tiger#
/data が旧データ領域で,/mnt が新データ領域の暫定マウントポイント。
LVM を使わなかったのでデバイス名が見えてて時代遅れな感じ。
¶ 旧 HDD から新 HDD へコピー
さて,ここからが時間の掛かるコピー作業。
ファイルのモードビットや更新日時等を保持したままコピーしたい場合,古くからの Unix ユーザーとしては tar コマンドが安心だよね。
イマドキは GNU fileutils の cp コマンドの -a オプションでもいいわけだが。
あと,今後また同じように XFS のまま換装する機会があったら,「xfsdump -J - /data | xfsrestore -J -p 60 - /mnt」を試してみたいかも。
tiger# mount -o ro,remount /data
tiger# date ; cd /mnt && ( cd /data && tar cf - . ) | tar xvpf - ; date ; touch /mnt/DONE ; gntp-send -s solo copy done
2011年 8月 15日 月曜日 13:18:11 JST
(以下略)
別の端末で df の様子を見て進捗を時々チェックしつつ,終わるまで放置。
かなりの長丁場。
tiger% watch df -m /data /mnt
他の作業に気を取られてるときにコピーが終わったのだけれど,Windows PC (ホスト名 solo) の Growl 目掛けて GNTP で完了通知が飛んできて,すぐに気づいた。
tar コマンドの後に gntp-send コマンドを書いておいた甲斐があった。
2011年 8月 15日 月曜日 18:47:28 JST
tiger# df -i /data /mnt
Filesystem Inodes IUsed IFree IUse% マウント位置
/dev/mapper/tiger_data-data_1
127511984 64257 127447727 1% /data
/dev/md1 586052928 64258 585988670 1% /mnt
tiger#
コピー完了後 /mnt/DONE ファイルを作るようにしてたから,i ノード数が 1 個だけ増えてるのは正しい。
¶ 旧 HDD の取り外し
旧 HDD の設定削除 (コメントアウト) と新 HDD の設定追加。
/etc/fstab にも UUID が書けるそうだが,どうせ古い Unix ユーザーなので。
tiger# umount /data /mnt
tiger# grep /data /etc/fstab
#/dev/mapper/tiger_data-data_1 /data xfs defaults 0 2
/dev/md1 /data xfs logbufs=8 0 2
tiger#
tiger# vi /etc/mdadm/mdadm.conf
tiger# grep /dev/md /etc/mdadm/mdadm.conf
#ARRAY /dev/md0 level=raid1 num-devices=2 UUID=ecc21341:a61f3f54:05aa1075:7607001b
ARRAY /dev/md1 metadata=1.0 name=tiger:1 UUID=ef859f19:46d4975c:6e633508:b0c9e40f
tiger#
旧 HDD の RAID を停止 (念のため領域はそのまま)。
すぐに電源を切るから,この操作は不要かもしれない。
tiger# mdadm --stop /dev/mapper/tiger_data-data_1
mdadm: stopped /dev/mapper/tiger_data-data_1
tiger#
いったん PC の電源を落として,旧 HDD を取り外す。
Stopping MD array md1...done (stopped).
Will now halt.
[ 509.852837] Power down.
新 HDD の SATA ポートを整理したり DVD ドライブを接続し直したりしたあと,ひとまず起動確認。
Phoenix TrustedCore(tm) Server
Copyright 1985-2007 Phoenix Technologies Ltd.
All Rights Reserved
HP System BIOS - O15 (07/15/2008)
HP FEATURES VERSION : 1.08.00
CPU = Intel(R) Celeron(R) CPU 420 @ 1.60GHz
511M System RAM Passed
Loading Linux 2.6.32-5-686 ...
Loading initial ramdisk ...
Loading, please wait...
(中略)
tiger% ls -l /data/DONE
-rw-r--r-- 1 root root 0 2011-08-15 18:47 /data/DONE
tiger%
再び PC の電源を落として,仮接続してあった新 HDD をきちんと取り付けて,ついでに掃除して,フタを閉めて終わり。
tiger# ls -l /data/DONE
-rw-r--r-- 1 root root 0 2011-08-15 18:47 /data/DONE
tiger# rm /data/DONE
tiger#
あとは RAID 再同期の完了待ちかな。
tiger% cat /proc/mdstat
Personalities : [raid1]
md1 : active raid1 sdc1[0] sdb1[1]
2930264952 blocks super 1.0 [2/2] [UU]
[==>..................] resync = 10.7% (315198976/2930264952) finish=377.6min speed=115406K/sec
unused devices: <none>
tiger%
試行錯誤と掃除まで含めると結構時間かかった。