読者です 読者をやめる 読者になる 読者になる

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とかをやってみる予定。