自宅サーバー構築譚:zfsスナップショットの操作
今回は一回休み、というか一般的な zfs スナップショットの操作の紹介です。他の話題に紛れてしまっているので、ここに纏めました。
- スナップショットの作成
- 作成したスナップショットの一覧表示
- ロールバック
- スナップショットの削除
こういうのを Linux コマンドと組み合わせて一工夫したワンライナー集みたいな感じになります。
スナップショットの作成
コマンドはzfs snapshot
です。日時は、保存されてるのかも知れませんが表示できない(ように感じる)ので、日時を名前の頭に付けておいた方が良いです。
zfs snapshot tank/main/ubuntu@$(date +%Y%m%d_%H%M%S)_test
スナップショットの一覧表示
コマンドはzfs list -t snapshot
です。他のコマンドと組み合わせてワンライナーを作る事を考えた場合、少々バリエーションがあります。
データセットの指定
我が家の場合tank/main/ubuntu
がルートディレクトリで、システム関連を格納しています。ユーザーデータなどはtank/sub0
のサブデータセットに格納しています。
zfs list -t snapshot tank/main/ubuntu
新しい順
日時の新しい順に表示する場合はオプションスイッチ-S name
を付けます。作成する時に名前の先頭に日時を付加したので、これで日時の順番になります。
これの良い所は、head -n2
などとして最新の物だけ表示させる事が出来る点です。業務でエビデンスが必要な場合や、公開記事を書く場合に、余計な情報を出さずに済みます。
zfs list -t snapshot -S name tank/main/ubuntu | head -n2
例えばこんな結果になります。
# zfs list -t snapshot -S name tank/main/ubuntu | head -n2
NAME USED AVAIL REFER MOUNTPOINT
tank/main/ubuntu@20220322_173258_test 96K - 1.45G -
スナップショット名のみ表示
オプション-o name
で、スナップショット名のみ表示になります。
zfs list -t snapshot -S name -o name tank/main/ubuntu | head -n2
こんな表示になります。
# zfs list -t snapshot -S name -o name tank/main/ubuntu | head -n2
NAME
tank/main/ubuntu@20220322_173258_test
ヘッダ行を抑制
オプション-H
で、ヘッダ行を抑制して表示しないようにします。
zfs list -t snapshot -S name -H tank/main/ubuntu | head -n1
こんな表示になります。
# zfs list -t snapshot -S name -H tank/main/ubuntu | head -n1
tank/main/ubuntu@20220322_173258_test 96K - 1.45G -
目的のスナップショット名のみ取り出す
これらのオプションスイッチを組み合わせた上で、head
とtail
コマンド、あるいはgrep
コマンドでフィルタリングすれば、お望みのスナップショット名のみ取り出す事が出来ます。
例えばこんな感じ。
# zfs list -t snapshot -S name -o name -H tank/main/ubuntu | head -n1
tank/main/ubuntu@20220322_173258_test
# zfs list -t snapshot -S name -o name -H tank/main/ubuntu | grep 20220322
tank/main/ubuntu@20220322_173258_test
# zfs list -t snapshot -S name -o name -H tank/main/ubuntu | grep test
tank/main/ubuntu@20220322_173258_test
grep
コマンドの出力には色が付いたりしますが、それは気にしない方向で。
ロールバック
スナップショットを撮った後に加えた変更を、全部丸っと無かった事にします。バージョン管理みたいな感触ですが、シンボリックリンクだろうがソケットだろうが何だろうがファイルシステムに加えられた変更全部が対象になってるのがスゴイ。
コマンドはzfs rollback
なんですが、xargs
コマンドを利用する事で、パラメータとして与えるスナップショットを上述の一覧表示で取り出したスナップショット名から与えるようにします。
メモリ内容(キャッシュ)との不整合などを考えると、zfs rollback
の直後にreboot
した方が良いです。
zfs list -t snapshot -o name tank/main/ubuntu | grep 20220322 | xargs -rt zfs rollback
reboot
ちなみにxargs
コマンドのオプション-t
は、実際に実行したコマンドを標準出力に出力してくれます。
オプション-r
は、もしgrep
失敗などで何も拾えなかった場合にはコマンドを実行しません。-r
を指定しなかったら引数無しで1回実行されてしまいます。
スナップショットの削除
コマンドはzfs destroy
です。上述の一覧表示で取り出したスナップショット名を与えるようにすると間違いも減るでしょう。
zfs list -t snapshot -o name tank/main/ubuntu | grep 20220322 | xargs -rt zfs destroy
スナップショットは素晴らしい
Author And Source
この問題について(自宅サーバー構築譚:zfsスナップショットの操作), 我々は、より多くの情報をここで見つけました https://qiita.com/katz_engineer/items/f3bd2f7af2ba49db156c著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .