ひとりごと

新しい記事:[2150]  古い記事:[2148] 表示単位 :

ついったー[おとなり日記] かがみさん Y.Kumagaiさん

2008/01/31 (木)

・ ZFSでの容量拡張

前回のお遊びでは確認できなかったので、ちょっと余ってるドライブを掘り出してきて調査してみました。

長くなるので結果から書いておくと、zfs replace というそのものズバリのコマンドでハードディスクを交換してプールを増量することができました。attachしてからdetachでも同じだと思いますが、前者では一回のコマンド実行で作業が済むので簡単です。

[実験環境]

転送元: USBハードディスク /dev/da0s1c (40GB)
転送先: 内蔵ATAハードディスク /dev/ad0s1d (80GB-ルートパーティション)
[実験内容]
Dimension4600C# zpool list
NAME                    SIZE    USED   AVAIL    CAP  HEALTH     ALTROOT
tank2                  37.2G   2.08G   35.2G     5%  ONLINE     -

当初のZFSプールの容量は37.2GBです。

Dimension4600C# zpool status
  pool: tank2
 state: ONLINE
status: One or more devices has experienced an unrecoverable error.  An
        attempt was made to correct the error.  Applications are unaffected.
action: Determine if the device needs to be replaced, and clear the errors
        using 'zpool clear' or replace the device with 'zpool replace'.
   see: http://www.sun.com/msg/ZFS-8000-9P
 scrub: none requested
config:

        NAME        STATE     READ WRITE CKSUM
        tank2       ONLINE      20     0     0
          da0s1c    ONLINE      20     0     0

errors: No known data errors

ステータスはこんな感じ。エラーが出てるのはUSB-ATAインタフェイスがヘンテコだったり使用したハードディスクが故障で交換したゴミドライブなのが原因だと思います。

てことでリプレースを実行

Dimension4600C# zpool replace tank2 da0s1c ad0s1d

割とすんなりコマンド返ってきてコマンドプロンプトが表示されます。が、アクセスランプを見るとリプレースが実行されているようです。

Dimension4600C# zpool status
  pool: tank2
 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, 66.12% done, 0h1m to go
config:

        NAME         STATE     READ WRITE CKSUM
        tank2        ONLINE       0     0     0
          replacing  ONLINE       0     0     0
            da0s1c   ONLINE      65     0     0
            ad0s1d   ONLINE       0     0    39

errors: No known data errors

上記は66%終了した状態。

Dimension4600C# zpool status
  pool: tank2
 state: ONLINE
status: One or more devices has experienced an unrecoverable error.  An
        attempt was made to correct the error.  Applications are unaffected.
action: Determine if the device needs to be replaced, and clear the errors
        using 'zpool clear' or replace the device with 'zpool replace'.
   see: http://www.sun.com/msg/ZFS-8000-9P
 scrub: resilver completed with 0 errors on Thu Jan 31 20:05:42 2008
config:

        NAME        STATE     READ WRITE CKSUM
        tank2       ONLINE       0     0    39
          ad0s1d    ONLINE       0     0    39

errors: No known data errors

リプレース完了。ディスクアクセスが終ってしばらくすると転送元のデバイスは自動的に見えなくなりました。RAID1と違ってミラーリングが高水準なところで行われるようで、ZFSのディスク使用領域だけがミラー対象となるみたいです。ミラーリングが早く終るのでこれはこれでありがたいのですが、これは将来 ZFS Bootが実現してもMBRとかはミラーされないことを意味するのでなんだか微妙な心境です。

Dimension4600C# zpool list
NAME                    SIZE    USED   AVAIL    CAP  HEALTH     ALTROOT
tank2                    72G   2.08G   69.9G     2%  ONLINE     -

で、これが実行結果。始めのコマンドと比較すればわかると思いますが、ZFSプールを37.2GBから72GBに増量できました。明示的に umount とか dump/restore とかせずにディスクを入れ替え増量できるってなんか面白いですな。しかも、ホットスワップに対応したハードウェア構成であれば、システムを停止することなくディスクの交換ができてしまいます。あぅ~これイイよ~。使いたいよ~。でももう少し、少なくともFreeBSD7.0がリリースされるまではがまんです。

ちなみに、上記の後で小さいディスクに replace しようとすると、

cannot replace ad0s1d with da0s1c: device is too small
と怒られました(笑)。大きくするのは簡単ですが逆はダメなんですな。

□ 関連記事

[つっこみ]

新しい記事:[2150]  古い記事:[2148] 表示単位 :
※このページへのリンクは自由です。リンクの方法については[つっこみ]で表示されるページの最後をごらんください。
たかたに(takatani@mars.dti.ne.jp)