b-shock. Fortress

FreeBSDのZFSでスナップショットを撮る

GPD Pocketで、KVM上のFreeBSDに、ZFSのスナップショットを設定した話。
ずっと前に対応済みだったけど、一応メモ。

ZFSの導入

FreeBSD自体のインストーラーではデフォルトはUFS2だが、ZFSに変更できる。
とても簡単。恐らく、これより簡単にZFSを導入できるLinuxディストリビューションはない。
インストーラー上の操作だけなので、手順は割愛。

freebsd-snapshotのインストール

ZFSが導入済みなら、zfs snapshotコマンドでいつでもスナップショットが撮れるわけだが、 FreeBSDにはfreebsd-snapshotというラッパーがあるので、こいつを使用する。
freebsd-snapshotは最近pkgngから削除され?portsからインストールするしかない様だ。 非推奨扱いというわけでもないだろうに。

以下実行。

1
2
3
4
su
cd /usr/ports/sysutils/freebsd-snapshot
make install clean
pkg lock freebsd-snapshot

portupgradeがインストール済みの場合は、以下の様な感じ。
余談だが、portupgradeはオワコン扱いされることが多い様だが、個人的にportmasterは使いづらく感じる。

1
2
3
su
portinstall freebsd-snapshot
pkg lock freebsd-snapshot

いずれにしてもportsからインストールしたパッケージは、pkg upgrade時に上書きされない様に、 たとえその必要がなくともロック推奨。

anacronの設定

freebsd-snapshotインストール後に、 /etc/crontab を書き換えるように指示があるはず。
/etc/crontab に、以下を追記せよとあるが…

常時起動ではない環境にこんな設定を行っても、hourly以外はあまり意味がない。
この様な環境では、crontabにはhourly分だけを残して、代わりにanacronをインストールする。(以下)

1
sudo pkg install anacron

/etc/crontab に、以下追記。

/usr/local/etc/anacrontab に、以下追記。

periodic.conf 設定

/etc/periodic.conf に、以下追記。

最初のdaily_status_zfs_enableはスナップショットとは無関係で、 日次のメールでZFSの状態を報告させる様にする設定。
今回は開発用途ゆえ対応不要だが、本番環境では、ZFSのステータスは監視対象になることが多いと思う。
日次のメールにZFSのステータスが載っても即効性はなく、あまり意味はなさそうではあるが、まぁ一応。

snapshot_enable以降が本題。2行目は必須、3行目はスナップショットを撮るスケジュールに関するもの。
/usr/home を日次で撮って、履歴は10回分残すという設定。

.zfsディレクトリを可視に

以下実行。

1
2
3
su
zfs set snapdir=hidden zroot
zfs set snapdir=visible zroot/usr/home

実行後、スナップショットへのアクセスが容易になる。

1
2
cd /home/.zfs/snapshot
ls -l

lsコマンドだけでなく、sftpからでもアクセスできるようになり便利。root権限不要。

スナップショットのリスト

スナップショットのリストは、 /home/.zfs/snapshot でlsする以外にも、以下の方法でも確認可能。 root権限不要。

1
zfs list -t snapshot