FreeBSDでzfsを試してみた その4
今回はスナップショットのクローン作成とかその辺。前回の続きなので今はこんな構成。
# zpool status pool: zpool0 state: ONLINE scrub: none requested config: NAME STATE READ WRITE CKSUM zpool0 ONLINE 0 0 0 da0s1 ONLINE 0 0 0 da1s1 ONLINE 0 0 0 errors: No known data errors # zfs list NAME USED AVAIL REFER MOUNTPOINT zpool0 64.2M 912M 20K /zdevel zpool0/hamaco 64.0M 912M 64.0M /zdevel/hamaco
全部スナップショットを削除してしまったので作る。
# zfs snapshot zpool0/hamaco@first
スナップショットのクローン
さっき作ったスナップショットのクローンを作成してみる。
# zfs clone zpool0/hamaco@first zpool0/hmc_first # zfs list NAME USED AVAIL REFER MOUNTPOINT zpool0 64.2M 912M 21K /zdevel zpool0/hamaco 64.0M 912M 64.0M /zdevel/hamaco zpool0/hamaco@first 0 - 64.0M - zpool0/hmc_first 0 912M 64.0M /zdevel/hmc_first
クローンもスナップショットと同様作成しただけではディスクを消費しない。
クローンにファイルを追加したりするとその分だけディスクを消費する。
# mkfile 32M /zdevel/hmc_first/fugafuga # zfs list NAME USED AVAIL REFER MOUNTPOINT zpool0 96.2M 880M 21K /zdevel zpool0/hamaco 64.0M 880M 64.0M /zdevel/hamaco zpool0/hamaco@first 0 - 64.0M - zpool0/hmc_first 32.0M 880M 96.0M /zdevel/hmc_first
クローンに対してzfs promoteコマンドを使うと、元データとの関係を逆転させることが出来る。
# zfs list NAME USED AVAIL REFER MOUNTPOINT zpool0 96.2M 880M 21K /zdevel zpool0/hamaco 64.0M 880M 64.0M /zdevel/hamaco zpool0/hamaco@first 0 - 64.0M - zpool0/hmc_first 32.0M 880M 96.0M /zdevel/hmc_first # zfs promote zpool0/hmc_first # zfs list NAME USED AVAIL REFER MOUNTPOINT zpool0 96.2M 880M 21K /zdevel zpool0/hamaco 0 880M 64.0M /zdevel/hamaco zpool0/hmc_first 96.1M 880M 96.0M /zdevel/hmc_first zpool0/hmc_first@first 17K - 64.0M -
スナップショットのバックアップ
zfs sendコマンドを使うと、スナップショットのデータが標準出力に書き出される。
# zfs send zpool0/hmc_first@first > snapshot # ls -lh snapshot -rw-r--r-- 1 root wheel 64M Apr 18 18:11 snapshot
定期的にバックアップをとる時などは、-iオプションを付けると差分だけとれるので便利。
# zfs snapshot zpool0/hmc_first@second # zfs send -i zpool0/hmc_first@first zpool0/hmc_first@second > snapshot2 # ls -lh snapshot2 -rw-r--r-- 1 root wheel 32M Apr 18 18:11 snapshot2
zfs receiveコマンドでスナップショットのバックアップファイルから復元出来る。
# zfs send zpool0/hmc_first@second > snapshot zfs receive zpool0/hmc_second < snapshot # zfs list NAME USED AVAIL REFER MOUNTPOINT zpool0 192M 784M 22K /zdevel zpool0/hamaco 0 784M 64.0M /zdevel/hamaco zpool0/hmc_first 96.1M 784M 96.0M /zdevel/hmc_first zpool0/hmc_first@first 17K - 64.0M - zpool0/hmc_first@second 0 - 96.0M - zpool0/hmc_second 96.0M 784M 96.0M /zdevel/hmc_second zpool0/hmc_second@second 0 - 96.0M -
sendとreceiveをパイプラインで組み合わせると、こんなことも出来る。(ごちゃごちゃしてたので、最初の状態に戻してある)
# zfs list NAME USED AVAIL REFER MOUNTPOINT zpool0 64.2M 912M 20K /zdevel zpool0/hamaco 64.0M 912M 64.0M /zdevel/hamaco zpool0/hamaco@first 0 - 64.0M - # zfs send zpool0/hamaco@first | zfs receive zpool0/hamaco_bk # zfs list NAME USED AVAIL REFER MOUNTPOINT zpool0 128M 848M 21K /zdevel zpool0/hamaco 64.0M 848M 64.0M /zdevel/hamaco zpool0/hamaco@first 0 - 64.0M - zpool0/hamaco_bk 64.0M 848M 64.0M /zdevel/hamaco_bk zpool0/hamaco_bk@first 0 - 64.0M -
# mkfile 32M /zdevel/hamaco/fugafuga # zfs snapshot zpool0/hamaco@second # zfs send -i zpool0/hamaco@first zpool0/hamaco@second | zfs receive zpool0/hamaco_bk # zfs list NAME USED AVAIL REFER MOUNTPOINT zpool0 192M 784M 21K /zdevel zpool0/hamaco 96.1M 784M 96.0M /zdevel/hamaco zpool0/hamaco@first 17K - 64.0M - zpool0/hamaco@second 0 - 96.0M - zpool0/hamaco_bk 96.1M 784M 96.0M /zdevel/hamaco_bk zpool0/hamaco_bk@first 17K - 64.0M - zpool0/hamaco_bk@second 0 - 96.0M -
標準出力に書き出されているので、sshコマンドを使って外部に送ることも出来る。
# zfs send zpool0/hamaco@second | ssh localhost zfs receive zpool0/remote Password: # zfs list NAME USED AVAIL REFER MOUNTPOINT zpool0 385M 591M 23K /zdevel zpool0/hamaco 96.1M 591M 96.0M /zdevel/hamaco zpool0/hamaco@first 17K - 64.0M - zpool0/hamaco@second 0 - 96.0M - zpool0/hamaco_bk 96.1M 591M 96.0M /zdevel/hamaco_bk zpool0/hamaco_bk@first 17K - 64.0M - zpool0/hamaco_bk@second 0 - 96.0M - zpool0/remote 96.0M 591M 96.0M /zdevel/remote zpool0/remote@second 0 - 96.0M -
ただ、FreeBSDの一般ユーザ権限でzfsを動作させる方法が分からないので、PermitRootLoginを有効にして試してみた。
まとめ
とりあえず基本的な所は大体終わりかな?
次はiSCSIとかjailとかをやってみる予定。