# UbuntuでZFSを使ってみよう ## 第10回 Ubuntu 20.04 LTSの auto-snapshot 機能 前回は、zsysdとそれを使用するzsysctl の機能について説明しました。今回は自動的にスナップショットを取得してくれる、auto-snapshot 機能について説明します。
ZFSのスナップショット(snapshot)とは
スナップショットは ZFSの有用な機能の1つで、スナップショット取得時点のディスクイメージを保持する機能です。スナップショット取得は瞬時に終了し、メモリの許す限りスナップショットを取ることができます。第8回でも説明したように、apt
コマンドでパッケージの追加・更新・削除時にもzfsdが自動的にスナップショットを取得します。
スナップショットはディスクコピーとは異なり、ファイルのイメージを保持するだけです。そのため、前回取得したスナップショットからファイルの差分がない場合、スナップショットのサイズは0になります。
以下は、スナップショットの取得例です。ZFSファイルシステムはマウントされているのに対し、スナップショットがマウントされていません。また、スナップショットの使用サイズはUSED欄に表示され、前回との差分がなければ0となります。
$ zfs list -rt all rpool/ROOT/ubuntu_f1xlv2/usr
NAME USED AVAIL REFER MOUNTPOINT
rpool/ROOT/ubuntu_f1xlv2/usr 108M 834G 96K /usr
rpool/ROOT/ubuntu_f1xlv2/usr@autozsys_ax5uwp 0B - 96K -
rpool/ROOT/ubuntu_f1xlv2/usr@autozsys_at6asm 0B - 96K -
rpool/ROOT/ubuntu_f1xlv2/usr@autozsys_yplfl6 0B - 96K -
(略)
$ zfs list -rt all rpool/ROOT/ubuntu_f1xlv2/usr/local
NAME USED AVAIL REFER MOUNTPOINT
rpool/ROOT/ubuntu_f1xlv2/usr/local 108M 834G 81.4M /usr/local
rpool/ROOT/ubuntu_f1xlv2/usr/local@autozsys_ax5uwp 64K - 128K -
rpool/ROOT/ubuntu_f1xlv2/usr/local@autozsys_at6asm 64K - 128K -
rpool/ROOT/ubuntu_f1xlv2/usr/local@autozsys_yplfl6 64K - 13.6M -
rpool/ROOT/ubuntu_f1xlv2/usr/local@autozsys_80ut97 64K - 13.6M -
rpool/ROOT/ubuntu_f1xlv2/usr/local@autozsys_hh6fh3 0B - 13.6M -
(略)
注意する点は、スナップショットで保持したファイルは、rm
コマンドなどで削除してもディスク領域に残り続けることです。ZFS bootしている場合スナップショットは自動的に取得されるため、ディスクサイズを削減するには、ファイルを削除するのではなく、スナップショットを削除しましょう。
スナップショット内のファイルは、取り出すことも可能です。これらスナップショット機能の詳細については、後日説明します。
auto-snapshot 機能
Ubuntu20.04では、auto-snapshot機能が用意されています。これは定期的にスナップショットを取得する機能で、以下の5つが取得されます。
ラベル | 取得タイミング | 保持個数 | 説明 |
---|---|---|---|
frequent | 15分 | 4 | 15分ごとに1時間確保 |
hourly | 1時間(60分) | 24 | 1時間ごとに1日分確保 |
daily | 1日(24時間) | 31 | 1日毎に1ヶ月(31日)分確保 |
weekly | 1週(7日) | 8 | 1週(7日)毎に8週(2ヶ月弱)分確保 |
monthly | 1ヶ月 | 12 | 1ヶ月ごとに1年分確保 |
定期的に スナップショットを取得することで、間違えてファイル削除・変更した場合でもスナップショットから復旧できます。また、スナップショット取得数を少なくするため、保持個数以上の古いスナップショットを削除します。このため、説明で記述した期間の通り、より最近のスナップショットは回数が多く、古いスナップショットは回数が少なくなります。
auto-snapshot は、以下のようにパッケージを追加することで有効になります。
$ sudo apt install -y zfs-auto-snapshot
auto-snapshot機能はcronを使用して実行されます。そのため、設定ファイルは以下の場所にあります。
ラベル | ファイル名 |
---|---|
frequent | /etc/cron.d/zfs-auto-snapshot |
hourly | /etc/cron.hourly/zfs-auto-snapshot |
daily | /etc/cron.daily/zfs-auto-snapshot |
weekly | /etc/cron.weekly/zfs-auto-snapshot |
monthly | /etc/cron.monthly/zfs-auto-snapshot |
設定ファイルの内容は以下のようになっています。
$ cat /etc/cron.hourly/zfs-auto-snapshot
#!/bin/sh
# Only call zfs-auto-snapshot if it's available
which zfs-auto-snapshot > /dev/null || exit 0
exec zfs-auto-snapshot --quiet --syslog --label=hourly --keep=24
zfs-auto-snapshot を 時間ごとに実行します。--label
オプションでラベルを、--keep
オプションで保持個数を設定します。また、末尾に ZFSファイルシステム名を記述することで、特定の場所だけauto-snapshot機能を有効にできます。デフォルトではZFSファイルシステムは指定されておらず、すべてのZFSファイルシステムが対象になります。
auto-snapshot
以下は、auto-snapshot で取得されるスナップショット例です。
zfs list -rt all rpool/USERDATA/root_z0ox2d | grep -v autozsys
NAME USED AVAIL REFER MOUNTPOINT
rpool/USERDATA/root_z0ox2d 32.7M 834G 30.7M /root
rpool/USERDATA/root_z0ox2d@zfs-auto-snap_monthly-2020-05-25-2248 0B - 192K -
rpool/USERDATA/root_z0ox2d@zfs-auto-snap_weekly-2020-06-20-2243 0B - 360K -
rpool/USERDATA/root_z0ox2d@zfs-auto-snap_monthly-2020-06-24-2246 0B - 360K -
rpool/USERDATA/root_z0ox2d@zfs-auto-snap_weekly-2020-06-27-2243 116K - 360K -
rpool/USERDATA/root_z0ox2d@zfs-auto-snap_weekly-2020-07-04-2245 0B - 360K -
rpool/USERDATA/root_z0ox2d@zfs-auto-snap_weekly-2020-07-11-2245 104K - 29.7M -
rpool/USERDATA/root_z0ox2d@zfs-auto-snap_daily-2020-07-15-2236 0B - 29.8M -
中略
rpool/USERDATA/root_z0ox2d@zfs-auto-snap_daily-2020-08-15-0253 0B - 30.7M -
rpool/USERDATA/root_z0ox2d@zfs-auto-snap_hourly-2020-08-15-0317 0B - 30.7M -
rpool/USERDATA/root_z0ox2d@zfs-auto-snap_hourly-2020-08-15-0417 0B - 30.7M -
rpool/USERDATA/root_z0ox2d@zfs-auto-snap_hourly-2020-08-15-0517 0B - 30.7M -
rpool/USERDATA/root_z0ox2d@zfs-auto-snap_frequent-2020-08-15-0545 0B - 30.7M -
rpool/USERDATA/root_z0ox2d@zfs-auto-snap_frequent-2020-08-15-0600 0B - 30.7M -
rpool/USERDATA/root_z0ox2d@zfs-auto-snap_frequent-2020-08-15-0615 0B - 30.7M -
rpool/USERDATA/root_z0ox2d@zfs-auto-snap_hourly-2020-08-15-0617 0B - 30.7M -
rpool/USERDATA/root_z0ox2d@zfs-auto-snap_frequent-2020-08-15-0630 0B - 30.7M -
auto-snapshot の注意点
auto-snapshotは便利な機能ですが、ZFS全体にかけることはお勧めしません。これはzsysdが行う、rpool/ROOT(/)以下のファイルシステムへの自動的なスナップショットと同じ機能であること、snapshot が多くなりすぎることでZFSの処理が遅くなるためです。
auto-snapshotを使用するときには、設定ファイルで最後の引数に rpool/USERDATA を設定することをお勧めします。ユーザディレクトリである rpool/USERDATA はzsysdなどでスナップショットが取られず、ユーザの多くはこのディレクトリ配下で作業するためです。
終わりに
今回は、自動的にスナップショットを取得してくれる、auto-snapshot 機能について説明しました。UbuntuでZFSを使用する大きなメリットを、今回で説明できました。
次回からは、ZFS自体がどのようなファイルシステムなのかという説明を続けます。次回をお楽しみに。
さて、このコラムを掲載いただいているデジタル・ヒュージ・テクノロジー社は老舗のOSSインテグレーターです。特にLinuxは強く、OSSを活用した業務システムの実績も多いです。興味がある方は以下のページもご覧ください。
DHT OSS導入コンサルティングサービス