[an error occurred while processing this directive]
[an error occurred while processing this directive]zfsで作った2TBの共有ストレージが残り300GBくらいになってきたので、 1.5TBのハードディスクを3台追加することにした。 1台単位で追加できればいいのだが、 raidz構成ではそれができないのだ。 なので、 もう一組raidzの組を作ってpoolに追加する形をとらざるを得ない。 モノはWestern DigitalのWD15EAR。 最近では珍しく5400r.p.m.で、どうやら省電力指向らしい。 1台9880円也。
手元にあったPCIバスのSATAインターフェイスを再利用したら、 なんと認識されない。 FreeBSD 8なら、デバイスファイルは自動的に作られるはずだし……。 ありがちな対応として、 差し込むスロットを変えてみた。 これがビンゴで、無事認識。 しかし、
root@jupiter# atacontrol list
ATA channel 0:
Master: ad0 <ST3120022A/8.54> ATA/ATAPI revision 6
Slave: acd0 <HITACHI DVD-ROM GD-7000/0017> ATA/ATAPI revision 0
ATA channel 1:
Master: no device present
Slave: no device present
ATA channel 2:
Master: ad4 <ST31000333AS/CC1H> Serial ATA II
Slave: ad5 <ST31000333AS/CC1H> Serial ATA II
ATA channel 3:
Master: ad6 <ST31000333AS/CC1H> Serial ATA II
Slave: no device present
だったのだが、
root@jupiter# atacontrol list
ATA channel 0:
Master: ad0 <ST3120022A/8.54> ATA/ATAPI revision 6
Slave: acd0 <HITACHI DVD-ROM GD-7000/0017> ATA/ATAPI revision 0
ATA channel 2:
Master: ad4 <WDC WD15EARS-00Z5B1/80.00A80> SATA revision 2.x
Slave: no device present
ATA channel 3:
Master: ad6 <WDC WD15EARS-00Z5B1/80.00A80> SATA revision 2.x
Slave: no device present
ATA channel 4:
Master: ad8 <WDC WD15EARS-00Z5B1/80.00A80> SATA revision 2.x
Slave: no device present
ATA channel 5:
Master: no device present
Slave: no device present
ATA channel 6:
Master: ad12 <ST31000333AS/CC1H> SATA revision 2.x
Slave: ad13 <ST31000333AS/CC1H> SATA revision 2.x
ATA channel 7:
Master: ad14 <ST31000333AS/CC1H> SATA revision 2.x
Slave: no device present
になってしまった。 ad4 -> ad12、ad5 -> ad13、ad6 -> ad14になり、 新しく増やした分がad4、ad6、ad8というわけだ。 で、ad4とad6とad8がboundryから始まっていない、 みたいなエラーでzfsが止まってしまう。 どうしたものかと思っていたが、 とりあえずad6を抜いてみたらうまいこと認識してくれて
root@jupiter# zpool status
pool: pool
state: ONLINE
status: One or more devices could not be used because the label is missing or
invalid. Sufficient replicas exist for the pool to continue
functioning in a degraded state.
action: Replace the device using 'zpool replace'.
see: http://www.sun.com/msg/ZFS-8000-4J
scrub: none requested
config:
NAME STATE READ WRITE CKSUM
pool ONLINE 0 0 0
raidz1 ONLINE 0 0 0
ad4 UNAVAIL 0 537 0 corrupted data
ad13 ONLINE 0 0 0
ad14 ONLINE 0 0 0
errors: No known data errors
となった。 指示に従って、zpool replaceを実行する。
root@jupiter# zpool replace pool ad4
root@jupiter# zpool status
pool: pool
state: DEGRADED
status: One or more devices is currently being resilvered. The pool will
continue to function, possibly in a degraded state.
action: Wait for the resilver to complete.
scrub: resilver in progress for 0h0m, 0.00% done, 7350h56m to go
config:
NAME STATE READ WRITE CKSUM
pool DEGRADED 0 0 0
raidz1 DEGRADED 0 0 0
replacing DEGRADED 0 0 0
ad12 UNAVAIL 0 1.05K 0 corrupted data
ad4 ONLINE 0 0 0 719K resilvered
ad13 ONLINE 0 0 0 476K resilvered
ad14 ONLINE 0 0 0 480K resilvered
errors: No known data errors
zpool iostatで追いかけると一生懸命書き換えているのだが、 kernelレベルで処理しているせいか、topには全然出てこない。 30分かけて2.81%処理が終了し、残り予想時間が17時間32分。 うーん、3台すべて入れ替えるとなると、土日では終わらないな。 たださすがにRAIDZだけあって、 この状態でもファイルの読み書きは可能だ。
承前。 結局14時間20分かけてリビルドが終わった。
root@jupiter# zpool status
pool: pool
state: ONLINE
scrub: resilver completed after 14h20m with 0 errors on Sun Jan 31 08:57:43 2010
config:
NAME STATE READ WRITE CKSUM
pool ONLINE 0 0 0
raidz1 ONLINE 0 0 0
ad4 ONLINE 0 0 0 751G resilvered
ad13 ONLINE 0 0 0 327M resilvered
ad14 ONLINE 0 0 0 327M resilvered
errors: No known data errors
外しておいたad6をつなげて、zpool replaceを実行。
root@jupiter# zpool replace pool ad13 ad6
root@jupiter# zpool status
pool: pool
state: ONLINE
status: One or more devices is currently being resilvered. The pool will
continue to function, possibly in a degraded state.
action: Wait for the resilver to complete.
scrub: resilver in progress for 0h0m, 0.00% done, 6387h11m to go
config:
NAME STATE READ WRITE CKSUM
pool ONLINE 0 0 0
raidz1 ONLINE 0 0 0
ad4 ONLINE 0 0 0 936K resilvered
replacing ONLINE 0 0 0
ad13 ONLINE 0 0 0
ad6 ONLINE 0 0 0 1.38M resilvered
ad14 ONLINE 0 0 0 977K resilvered
errors: No known data errors
6387時間とはまたすごい数字。 結局のところ、
root@jupiter# zpool status
pool: pool
state: ONLINE
scrub: resilver completed after 12h20m with 0 errors on Mon Feb 1 00:12:10 2010
config:
NAME STATE READ WRITE CKSUM
pool ONLINE 0 0 0
raidz1 ONLINE 0 0 0
ad4 ONLINE 0 0 0 318M resilvered
ad6 ONLINE 0 0 0 751G resilvered
ad14 ONLINE 0 0 0 318M resilvered
errors: No known data errors
と今度は12時間20分で終了した。 続けて最後の3台目をリプレイスする。
root@jupiter# zpool replace pool ad14 ad8
root@jupiter# zpool status
pool: pool
state: ONLINE
status: One or more devices is currently being resilvered. The pool will
continue to function, possibly in a degraded state.
action: Wait for the resilver to complete.
scrub: resilver in progress for 0h0m, 0.00% done, 5473h31m to go
config:
NAME STATE READ WRITE CKSUM
pool ONLINE 0 0 0
raidz1 ONLINE 0 0 0
ad4 ONLINE 0 0 0 498K resilvered
ad6 ONLINE 0 0 0 498K resilvered
replacing ONLINE 0 0 0
ad14 ONLINE 0 0 0
ad8 ONLINE 0 0 0 746K resilvered
errors: No known data errors
今度は14時間かかった。
jupiter# exec bash
root@jupiter# zpool status
pool: pool
state: ONLINE
scrub: resilver completed after 14h8m with 0 errors on Mon Feb 1 14:23:28 2010
config:
NAME STATE READ WRITE CKSUM
pool ONLINE 0 0 0
raidz1 ONLINE 0 0 0
ad4 ONLINE 0 0 0 317M resilvered
ad6 ONLINE 0 0 0 317M resilvered
ad8 ONLINE 0 0 0 751G resilvered
errors: No known data errors
1TBのハードディスクを1.5TBのハードディスクに置き換えたのに、 全然容量が増えていない。
root@jupiter# zpool list
NAME SIZE USED AVAIL CAP HEALTH ALTROOT
pool 2.73T 2.20T 540G 80% ONLINE -
root@jupiter# df -hi
Filesystem Size Used Avail Capacity iused ifree %iused Mounted on
/dev/ad0s1a 496M 254M 203M 56% 1.8k 64k 3% /
devfs 1.0K 1.0K 0B 100% 0 0 100% /dev
/dev/ad0s1e 3.9G 36K 3.6G 0% 13 542k 0% /tmp
/dev/ad0s1f 96G 5.1G 83G 6% 208k 13M 2% /usr
/dev/ad0s1d 4.1G 1.3G 2.4G 36% 76k 489k 14% /var
pool 330G 0B 330G 0% 5 2.7M 0% /pool
pool/public 1.8T 1.5T 330G 82% 40k 2.7M 1% /pool/public
で、お約束のexport、importを実行。
root@jupiter# zpool export pool
root@jupiter# zpool import pool
root@jupiter# zpool list
NAME SIZE USED AVAIL CAP HEALTH ALTROOT
pool 4.09T 2.20T 1.89T 53% ONLINE -
root@jupiter# df -hi
Filesystem Size Used Avail Capacity iused ifree %iused Mounted on
/dev/ad0s1a 496M 254M 203M 56% 1.8k 64k 3% /
devfs 1.0K 1.0K 0B 100% 0 0 100% /dev
/dev/ad0s1e 3.9G 36K 3.6G 0% 13 542k 0% /tmp
/dev/ad0s1f 96G 5.1G 83G 6% 208k 13M 2% /usr
/dev/ad0s1d 4.1G 1.3G 2.4G 36% 76k 489k 14% /var
pool 1.2T 0B 1.2T 0% 5 10M 0% /pool
pool/public 2.7T 1.5T 1.2T 55% 40k 10M 0% /pool/public
とまあ無事増えた。 さらに今まで使っていた1TBのハードディスクを追加して、 4TB超えのRAIDストレージができあがり。
root@jupiter# zpool add pool raidz ad12 ad13 ad14
root@jupiter# zpool list
NAME SIZE USED AVAIL CAP HEALTH ALTROOT
pool 6.80T 2.20T 4.61T 32% ONLINE -
root@jupiter# df -hi
Filesystem Size Used Avail Capacity iused ifree %iused Mounted on
/dev/ad0s1a 496M 254M 203M 56% 1.8k 64k 3% /
devfs 1.0K 1.0K 0B 100% 0 0 100% /dev
/dev/ad0s1e 3.9G 36K 3.6G 0% 13 542k 0% /tmp
/dev/ad0s1f 96G 5.1G 83G 6% 208k 13M 2% /usr
/dev/ad0s1d 4.1G 1.4G 2.4G 36% 76k 489k 14% /var
pool 3.0T 0B 3.0T 0% 5 25M 0% /pool
pool/public 4.5T 1.5T 3.0T 33% 40k 25M 0% /pool/public
しかしこれ、バックアップどーしよう。
珍しく通信が途絶したと思ったら、kernel panicだった。 ハードの故障ではなくて一安心。
ここのところ、「kmemが足りない」といってkernelが落ちる。 メモリ3.6GBあって足りないということはないだろうと思ったが、 よく見ると電源が450Wしかない。 これでハードディスク7台の駆動は辛かろう。 ということで電源強化のついでにケースも新調した。 ホットスワップなベイが4つに、 横方向に抜き差しするシャドウベイが4つというケース。 電源は別売りなので、玄人志向の600Wもの(KRPW-V2-600W)にした。 電源ユニットからの排気温度がはっきりわかるぐらいに低くなっているのにびっくり。
ついでに、 ブート用のハードディスクも120GBのATAから80GBのSATAに変えて、 OSを再インストールした。 が、これが外れだったらしく、 bashをコンパイルしている間にwrite errorを頻発する。 少し様子を見て、ダメだったら新調するか……。
ハードディスクの接続先を変えたら、 嘘のようにwrite errorが出なくなった。 で、4GB載せたメモリを3GBくらい使えるようで、 何も指定しないとvm.kmem_size: 1123835904だった。 とりあえず、/boot/loader.conf でvfs.zfs.arc_max="512M"、 /etc/sysctl.conf でkern.maxvnodes=400000として様子を見てみよう。
jupiter# atacontrol list
ATA channel 0:
Master: acd0 <HITACHI DVD-ROM GD-7000/0017> ATA/ATAPI revision 0
Slave: no device present
ATA channel 2:
Master: ad4 <SAMSUNG HD080HJ/P/ZH100-51> SATA revision 2.x
Slave: no device present
ATA channel 3:
Master: ad6 <ST31000333AS/CC1H> SATA revision 2.x
Slave: no device present
ATA channel 4:
Master: ad8 <ST31000333AS/CC1H> SATA revision 2.x
Slave: no device present
ATA channel 5:
Master: ad10 <ST31000333AS/CC1H> SATA revision 2.x
Slave: no device present
ATA channel 6:
Master: ad12 <WDC WD15EARS-00Z5B1/80.00A80> SATA revision 2.x
Slave: ad13 <WDC WD15EARS-00Z5B1/80.00A80> SATA revision 2.x
ATA channel 7:
Master: ad14 <WDC WD15EARS-00Z5B1/80.00A80> SATA revision 2.x
Slave: no device present
パラメータを変更して、OSが落ちないかどうかモニタしてみた。 いまのところだいじょうぶそうだが、 smaba経由でraidzなZFSに連続して書き込むとload averagesが9を超えた。 今となってはなかなか見ない数字である。 同じZFSでも読み出しだったり、UFSなら読み書きしても1を超えない。
今のところ、/boot/loader.confに
vm.kmem_size_max="1400M"
vm.kmem_size="1400M"
vfs.zfs.arc_max="500M"
としている。 これだと300MBくらいのファイルを、 2~3時間にわたって書き込んでも落ちないようだ。