FreeBSD - メンテナンス・トラブルシュート - zfs - 実際どうするか
1. 概要 前ページまで、これでも比較的、一般論をメモしたつもりであります。 でまぁ、このページは、実際にわたしが使用している、「zfs」のマシンのバックアップをどうとるかなぁという話です。 2. 状況 シングルディスクで、おまかせでフォーマットした状態で、下記のようになっています。 $ zfs list NAME USED AVAIL REFER MOUNTPOINT zroot 314G 329G 96K /zroot zroot/ROOT 303G 329G 96K none zroot/ROOT/14.0-RELEASE_2024-06-22_095535 8K 329G 302G / zroot/ROOT/default 303G 329G 215G / zroot/home 145M 329G 145M /home zroot/tmp 497M 329G 497M /tmp zroot/usr 10.3G 329G 96K /usr zroot/usr/ports 9.49G 329G 9.49G /usr/ports zroot/usr/src 816M 329G 816M /usr/src zroot/var 76.1M 329G 96K /var zroot/var/audit 96K 329G 96K /var/audit zroot/var/crash 96K 329G 96K /var/crash zroot/var/log 75.5M 329G 75.5M /var/log zroot/var/mail 160K 329G 160K /var/mail zroot/var/tmp 144K 329G 144K /var/tmp 当初、全体のバックアップをとろうとしたのですが、時間がかかりすぎるのです。 結局ほしいのは。 /home /usr /var なんですよね。 あとは、どこかから持ってきたり、手動でなんとかできると思っております。 スナップショットをとっては、マウントして。 /home は。 zroot/home 145M 329G 145M /home にはいっていることがわかりました。 しかし。 /usr /var のわたしが欲しいところ(/usr/local 以下、/var/qmail、/var/db 以下)は。 zroot/usr 10.3G 329G 96K /usr zroot/var 76.1M 329G 96K /var には、はいっていなくて。 zroot/ROOT/default 303G 329G 215G / にはいっているようです。 3. 現時点での結論 本来ならば、すべてのプールのスナップショットをとって、「zfs send」で、どこかへ出力するのが、完全バックアップの方法なのでしょうが・・・。 時間や、ディスク容量等の現実的なリソースのことを考えますと。 2024年7月5日時点の結論として。 「/home」「/usr/local」「/var/db」「/var/nsd」「/var/qmail」を含む、スナップショットを作成します。 zfs snapshot zroot/ROOT/default@root_YYYYMMDD zfs snapshot zroot/home@home_YYYYMMDD これをマウントして、欲しいディレクトリ以下を「tar」で圧縮しつつ、固める。 「/usr/local」を例にとるならば。 mount -t zfs zroot/ROOT/default@root_YYYYMMDD /mnt tar -cyf /tmp/usr_local_YYYYMMDD.tar.bz2 /mnt/usr/local umount /mnt できあがった、「/tmp/usr_local_YYYYMMDD.tar.bz2」を、外付けのディスクなり、外部のマシンなりにコピーすることでバックアップとします。 便利だなと思うのは、スナップショットは、作成した時点のまま固まっていますので、システム稼働中であっても、誰かがスナップショット自体を操作しない限り、固定されているということです。 この一連の処理を、スクリプト化すると。 #!/bin/sh export today=`date "+%Y%m%d"` zfs snapshot zroot/ROOT/default@root_$today zfs snapshot zroot/home@home_$today mount -t zfs zroot/ROOT/default@root_$today /mnt tar -cyf /tmp/usr_local_$today.tar.bz2 /mnt/usr/local tar -cyf /tmp/var_db_$today.tar.bz2 /mnt/var/db tar -cyf /tmp/var_qmail_$today.tar.bz2 /mnt/var/qmail tar -cyf /tmp/var_nsd_$today.tar.bz2 /mnt/var/nsd umount /mnt mount -t zfs zroot/home@home_$today /mnt tar -cyf /tmp/home_$today.tar.bz2 umount /mnt てな感じです。 まだ、動かしてないので、保証できませんぜ。
$ zfs list NAME USED AVAIL REFER MOUNTPOINT zroot 314G 329G 96K /zroot zroot/ROOT 303G 329G 96K none zroot/ROOT/14.0-RELEASE_2024-06-22_095535 8K 329G 302G / zroot/ROOT/default 303G 329G 215G / zroot/home 145M 329G 145M /home zroot/tmp 497M 329G 497M /tmp zroot/usr 10.3G 329G 96K /usr zroot/usr/ports 9.49G 329G 9.49G /usr/ports zroot/usr/src 816M 329G 816M /usr/src zroot/var 76.1M 329G 96K /var zroot/var/audit 96K 329G 96K /var/audit zroot/var/crash 96K 329G 96K /var/crash zroot/var/log 75.5M 329G 75.5M /var/log zroot/var/mail 160K 329G 160K /var/mail zroot/var/tmp 144K 329G 144K /var/tmp
/home /usr /var
/home
zroot/home 145M 329G 145M /home
/usr /var
zroot/usr 10.3G 329G 96K /usr zroot/var 76.1M 329G 96K /var
zroot/ROOT/default 303G 329G 215G /
zfs snapshot zroot/ROOT/default@root_YYYYMMDD zfs snapshot zroot/home@home_YYYYMMDD
mount -t zfs zroot/ROOT/default@root_YYYYMMDD /mnt tar -cyf /tmp/usr_local_YYYYMMDD.tar.bz2 /mnt/usr/local umount /mnt
#!/bin/sh export today=`date "+%Y%m%d"` zfs snapshot zroot/ROOT/default@root_$today zfs snapshot zroot/home@home_$today mount -t zfs zroot/ROOT/default@root_$today /mnt tar -cyf /tmp/usr_local_$today.tar.bz2 /mnt/usr/local tar -cyf /tmp/var_db_$today.tar.bz2 /mnt/var/db tar -cyf /tmp/var_qmail_$today.tar.bz2 /mnt/var/qmail tar -cyf /tmp/var_nsd_$today.tar.bz2 /mnt/var/nsd umount /mnt mount -t zfs zroot/home@home_$today /mnt tar -cyf /tmp/home_$today.tar.bz2 umount /mnt