Web更新

# Ununtuで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つが取得されます。

ラベル取得タイミング保持個数説明
frequent15分415分ごとに1時間確保
hourly1時間(60分)241時間ごとに1日分確保
daily1日(24時間)311日毎に1ヶ月(31日)分確保
weekly1週(7日)81週(7日)毎に8週(2ヶ月弱)分確保
monthly1ヶ月121ヶ月ごとに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導入コンサルティングサービス

関連記事一覧