zfs promoteの使いどころ

zfs でsnapshotを取って、「古いのに戻したい!」が、 直前のsnapshotであるケースがほとんどで、その場合は

zfs rollback FILESYSTEM@latest-snap

で一発OK。これはまあ問題なし。問題は、変更の様子を見ながら

zfs snap FILESYSTEM@snap-0
zfs snap FILESYSTEM@snap-1
zfs snap FILESYSTEM@snap-2
zfs snap FILESYSTEM@snap-3
zfs snap FILESYSTEM@snap-4

と取っていって、しばらくして「snap-2に戻したい!」となったとき。

snap-3, snap-4 を捨てていいならそれぞれ zfs destroy してから zfs rollback すればいいが、「念の為 snap-3, snap-4 も温存したい」のとき。 以下の手順で進める。

  1. snap-2 をcloneする
  2. cloneでできたFILESYSTEMをpromoteする
  3. 元のFILESYSTEMをrenameする
  4. 1でcloneしたFILESYSTEMを元の名前にrenameする

これに沿ってやると以下のような感じ。

zfs clone FILESYSTEM@snap-2 FILESYSTEM.new
: 確認
zfs list -r -t all -o name,origin,clones FILESYSTEM
zfs promote FILESYSTEM.new
: ↑これで独立FILESYSTEMになる。確認↓
zfs list -r -t all -o name,origin,clones FILESYSTEM
zfs rename FILESYSTEM FILESYSTEM.orig
zfs rename FILESYSTEM.new FILESYSTEM

zap でreplicationを取っている場合などは zap:rep 属性の確認が必要。

後始末

取っておいた FILESYSTEM.orig が要らなくなったら

zfs destroy -vr FILESYSTEM.orig

で中間の snap-3, snap-4 を含めて削除。