ZFS の落し穴 - ダメ出し Blog

[zfs] [更新履歴]

メインプールのストライブセットを構成するデバイスは取り外しできない

zfs create で単純にデバイスを列挙してメインプールを作成したり、 zfs add で単純にデバイスを追加すると、 デバイスはメインプールのストライブセットとして組込まれるが、 ストライブセット中のデバイスを取り外す方法は用意されていない。

# zpool status
  pool: zpool0
 state: ONLINE
  scan: none requested
config:

        NAME        STATE     READ WRITE CKSUM
        ztank1      ONLINE       0     0     0
          sda1      ONLINE       0     0     0

errors: No known data errors
# zpool add zpool0 sdb1
# zpool status
  pool: zpool0
 state: ONLINE
  scan: none requested
config:

        NAME        STATE     READ WRITE CKSUM
        ztank1      ONLINE       0     0     0
          sda1      ONLINE       0     0     0
          sdb1      ONLINE       0     0     0

errors: No known data errors
# zpool remove zpool0 sdb1
cannot remove sdb1: only inactive hot spares, cache, top-level, or log devices can be removed

zpool create なら作ったばかりのプールを削除して作り直せばよいが、 ある程度使用したプールに対しての zpool add でミスると痛いので注意。

メインプールの空きがなくなるとファイルを削除できなくなる

CoW のせいらしい。スナップショットがある場合はともかく、 ない場合はファイル削除するだけの予約領域くらい用意できないのだろうか。

どうにかして空きを作れば削除できるようになる。

不要なファイルシステムあるいはスナップショットを削除する方法。

# zfs lit -t snapshot
# zfs destroy <ファイルシステム名>@<スナップショット日時>

既存ファイルを縮める方法。

# cp /dev/null /zpool0/largefile