サーバの更新で zfs にしてみるとか
数年前に HDD 8台くらい積んで2Tのストレージ〜とか言って喜んでたけど、それが一杯になってしまった。
nao@mercury%df Filesystem Size Used Avail Capacity Mounted on /dev/mirror/gm0s1a 989M 320M 590M 35% / devfs 1.0K 1.0K 0B 100% /dev /dev/mirror/gm0s1f 1.9G 686M 1.1G 38% /var /dev/mirror/gm0s1g 2.8G 375M 2.2G 14% /tmp /dev/mirror/gm0s1d 25G 13G 10G 55% /usr /dev/mirror/gm0s1e 194G 174G 4.0G 98% /usr/home /dev/da0s1a 1.7T 1.4T 116G 93% /usr/pub
そんなわけで、サーバの更新作業なう!
今回の目標は FreeBSD8系にしてルート含めて zfs 化、とりあえず 2T の HDD を3台買ってきました。
やり方は調査しながら。
今のところ未解決の zfs に関する疑問
- zfs をルートにして起動する方法
これはとりあえず目処付いた。あとでまとめて書く。
いろいろ調べた結果変更はできない。
さらに哀しいお知らせで、
現時点では、RAID-Z 構成では次の操作がサポートされていません。
・追加のディスクを既存の RAID-Z 構成に接続する。
http://docs.sun.com/app/docs/doc/819-6260/gcvjg?a=view
なんだってー!!
これができると思い込んで、それに物凄く期待していたのにっ。
sun# zpool create -f tank raidz ad5 ad6 ad7 sun# zpool status pool: tank state: ONLINE scrub: none requested config: NAME STATE READ WRITE CKSUM tank ONLINE 0 0 0 raidz1 ONLINE 0 0 0 ad5 ONLINE 0 0 0 ad6 ONLINE 0 0 0 ad7 ONLINE 0 0 0 errors: No known data errors
こんな感じで tank つくった場合、そのストレージプールの raidz1 の部分は RAID になるが、そこにさらにストレージプールを追加するときには、
sun# zpool add tank raidz ad8 invalid vdev specification: raidz requires at least 2 devices
ドライブが1個しかないと raidz には2個ドライブがいるといわれてエラー
sun# zpool add tank raidz ad8 ad9 sun# zpool status pool: tank state: ONLINE scrub: none requested config: NAME STATE READ WRITE CKSUM tank ONLINE 0 0 0 raidz1 ONLINE 0 0 0 ad5 ONLINE 0 0 0 ad6 ONLINE 0 0 0 ad7 ONLINE 0 0 0 raidz1 ONLINE 0 0 0 ad8 ONLINE 0 0 0 ad9 ONLINE 0 0 0 errors: No known data errors sun# zpool list NAME SIZE USED AVAIL CAP HEALTH ALTROOT tank 692G 147K 692G 0% ONLINE -
2個だと tank に追加できるけど、raidz1 が2つあることから、別の raidz1 構成が tank に2つあるという扱いになる様子。
spare の追加はできる様子。
sun# zpool destroy tank sun# zpool create -f tank raidz ad5 ad6 ad7 sun# zpool status pool: tank state: ONLINE scrub: none requested config: NAME STATE READ WRITE CKSUM tank ONLINE 0 0 0 raidz1 ONLINE 0 0 0 ad5 ONLINE 0 0 0 ad6 ONLINE 0 0 0 ad7 ONLINE 0 0 0 errors: No known data errors sun# zpool add tank spare ad8 sun# zpool status pool: tank state: ONLINE scrub: none requested config: NAME STATE READ WRITE CKSUM tank ONLINE 0 0 0 raidz1 ONLINE 0 0 0 ad5 ONLINE 0 0 0 ad6 ONLINE 0 0 0 ad7 ONLINE 0 0 0 spares ad8 AVAIL errors: No known data errors
zfs をつくるときのプロパティで [copies=1 | 2 | 3] を指定することによって、プール内にデータのコピーをつくってくれるようにはなるが、RAID ほどの耐障害性はもちろんない。
とりあえず zfs の raidz で領域つくっといたら、あとから raidz のままで容量増やしていけるだろうと言う見込みは甘かったわけで、どうするのがいいのか今更ながらもういっぺん検討し直し。