サーバの更新で 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-z2 に変更できる?

いろいろ調べた結果変更はできない。

さらに哀しいお知らせで、

現時点では、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 のままで容量増やしていけるだろうと言う見込みは甘かったわけで、どうするのがいいのか今更ながらもういっぺん検討し直し。