ZFS で snapshot と rollback を試す2009年03月29日 10時32分26秒

まずは、ZFS の snapshot を試してみる。
$ zfs mount
scratch                         /scratch
scratch/obj                     /usr/obj
scratch/src                     /usr/src
$ ls /usr/src
RELENG_7_2      head

/usr/src に RELENG_7_2 と head が入っていて、scratch/src から割り当てられている。

スナップショットを取る。


$ time zfs snapshot scratch/src@today
0.000u 0.004s 0:03.97 0.0%      0+0k 0+0io 0pf+0w

あっと言う間に終わった。

さて、どんな感じだか見てみよう。


$ zfs mount
scratch                         /scratch
scratch/obj                     /usr/obj
scratch/src                     /usr/src
$ zfs mount -a
$ zfs mount
scratch                         /scratch
scratch/obj                     /usr/obj
scratch/src                     /usr/src

zfs の mount 系のコマンドではスナップショットは出て来ないようだ。cd や ls で .zfs の中を探検してみる。

$ cd /usr/src/
$ ls -lsd .zfs
0 dr-xr-xr-x  3 root  wheel  3 Mar 13 13:22 .zfs
$ cd .zfs
$ ls -l
total 2
drwxr-xr-x  4 uyota uyota 4 Mar 18 09:45 today
$ cd today/
$ ls
RELENG_7_2      head
$ pwd
pwd: .: No such file or directory
$ ls
RELENG_7_2      head
$ id
uid=0(root) gid=0(wheel) groups=0(wheel),5(operator)

スナップショット内での pwd に問題があるようだ。これは、7.0-RELEASE の ZFS version 6 を使っている。nullfs や unionfs を用いた時に、非 root ユーザだと同じような問題に遭遇するが、root でこのエラーは始めてみた。

何も作業を行なっていないが、折角なので roollback も試す。逆に何も行なっていないから、何の被害もでなくて良いのかも知れない。


$ time zfs rollback scratch/src@today
0.000u 0.994s 0:24.94 3.9%      104+1887k 0+0io 0pf+0w

こちらも早かった。

$ ls -la /usr/src/
total 8
drwxr-xr-x   4 uyota uyota    4 Mar 18 09:45 .
drwxr-xr-x  21 root  wheel  512 Mar  4 02:12 ..
drwxr-xr-x   3 uyota uyota    3 Mar 18 09:45 RELENG_7_2
drwxr-xr-x  23 uyota uyota   39 Mar 18 09:42 head
$ ls -la /usr/src/.zfs/snapshot/
total 2
dr-xr-xr-x  3 root  wheel  3 Mar 13 13:22 .
dr-xr-xr-x  3 root  wheel  3 Mar 13 13:22 ..
drwxr-xr-x  4 uyota uyota  4 Mar 18 09:45 today

rollback を行なっても、スナップショット自体は消えない。


$ mount -t zfs
scratch on /scratch (zfs, local, noatime)
scratch/obj on /usr/obj (zfs, local, noatime)
scratch/src on /usr/src (zfs, local, noatime)
scratch/src@today on /usr/src/.zfs/snapshot/today (zfs, local, noatime, read-onl
y)

mount だとスナップショットを含めたマウントポイントを教えてくれるようだ。