Solaris,ZFSでいろいろ試してます

USBメモリを 2GB 2本、4GB 2本それぞれ用意しました。
# rmformat 2> /dev/null | egrep '(Logical Node|Connected Device|Size)'
     1. Logical Node: /dev/rdsk/c14t0d0p0
        Connected Device: Kingmax  USB2.0 FlashDisk 0.00
        Size: 1.9 GB
     2. Logical Node: /dev/rdsk/c15t0d0p0
        Connected Device: TDKMedia Trans-It Drive   PMAP
        Size: 1.9 GB
     3. Logical Node: /dev/rdsk/c16t0d0p0
        Connected Device: Generic  USB  SD Reader   1.00
        Size: 3.8 GB
     4. Logical Node: /dev/rdsk/c17t0d0p0
        Connected Device: Generic  USB  SD Reader   0.00
        Size: 3.8 GB

先ず2GB 2本でmirrorのzpoolを作ります。
 # zpool create -f usbpool1 mirror c14t0d0 c15t0d0
 # zpool status usbpool1
  pool: usbpool1
 state: ONLINE
 scrub: none requested
config:

        NAME         STATE     READ WRITE CKSUM
        usbpool1     ONLINE       0     0     0
          mirror     ONLINE       0     0     0
            c14t0d0  ONLINE       0     0     0
            c15t0d0  ONLINE       0     0     0

errors: No known data errors
 # df /usbpool1
Filesystem            kbytes    used   avail capacity  Mounted on
usbpool1             1884160      19 1884090     1%    /usbpool1

ここで、c14t0d0(2GB)をc16t0d0(4GB)にreplaceし、また元に戻します。
 # zpool replace usbpool1 c14t0d0 c16t0d0
 # zpool status usbpool1
  pool: usbpool1
 state: ONLINE
 scrub: resilver completed after 0h0m with 0 errors on Thu Sep 17 23:30:47 2009
config:

        NAME         STATE     READ WRITE CKSUM
        usbpool1     ONLINE       0     0     0
          mirror     ONLINE       0     0     0
            c16t0d0  ONLINE       0     0     0  71.5K resilvered
            c15t0d0  ONLINE       0     0     0

errors: No known data errors
 # df /usbpool1
Filesystem            kbytes    used   avail capacity  Mounted on
usbpool1             1884160      19 1884079     1%    /usbpool1
 # zpool replace usbpool1 c16t0d0 c14t0d0
 # zpool status usbpool1
  pool: usbpool1
 state: ONLINE
 scrub: resilver completed after 0h0m with 0 errors on Thu Sep 17 23:31:45 2009
config:

        NAME         STATE     READ WRITE CKSUM
        usbpool1     ONLINE       0     0     0
          mirror     ONLINE       0     0     0
            c14t0d0  ONLINE       0     0     0  82K resilvered
            c15t0d0  ONLINE       0     0     0

errors: No known data errors

問題なくできました。
では、次にc14t0d0(2GB)をc16t0d0(4GB)に、c15t0d0(2GB)をc17t0d0(4GB)にreplaceします。
 # zpool replace usbpool1 c14t0d0 c16t0d0
 # zpool replace usbpool1 c15t0d0 c17t0d0
 # zpool status usbpool1
  pool: usbpool1
 state: ONLINE
 scrub: resilver completed after 0h0m with 0 errors on Thu Sep 17 23:35:10 2009
config:

        NAME         STATE     READ WRITE CKSUM
        usbpool1     ONLINE       0     0     0
          mirror     ONLINE       0     0     0
            c16t0d0  ONLINE       0     0     0
            c17t0d0  ONLINE       0     0     0  86.5K resilvered

errors: No known data errors
 # df /usbpool1
Filesystem            kbytes    used   avail capacity  Mounted on
usbpool1             1884160      19 1884070     1%    /usbpool1

4GB 2本のメモリを使ったmirrorですが、この時点では2GB分しかありません。
しかし、zpool export/import しなおしますと…
 # zpool export usbpool1
 # zpool import usbpool1
 # zpool list
NAME       SIZE   USED  AVAIL    CAP  HEALTH  ALTROOT
rpool      149G  29.1G   120G    19%  ONLINE  -
usbpool1  3.67G    97K  3.67G     0%  ONLINE  -
 # zpool list usbpool1
NAME       SIZE   USED  AVAIL    CAP  HEALTH  ALTROOT
usbpool1  3.67G    97K  3.67G     0%  ONLINE  -
4GB 2本のmirrorになりました。
これでもう2GBのメモリにreplaceすることはできません。
 # zpool replace usbpool1 c16t0d0 c14t0d0
cannot replace c16t0d0 with c14t0d0: device is too small

zpoolを構成するデバイス全てを大きな容量のデバイスに入れ替えると、自動的に容量が大きくなるのは
便利なこともありますが、逆に不都合が生じる場合もあるので注意が必要です。
ZFSではサイズの縮小はまだサポートされていないので、下手をすれば取り返しのつかないことになります。
タグ

管理人/副管理人のみ編集できます