ZFSスナップショット:作成、リストア、自動化の方法
10分で読めます - 2026年5月5日

Linux 上で ZFS スナップショットを作成、復元、自動化する方法を学びます。コマンド、ロールバック、保持ポリシー、Sanoidを使用したオフサイトレプリケーションをカバーしています。
ZFSスナップショット:作成、リストア、自動化の方法
ZFSスナップショットは、ファイルシステムの読み取り専用のポイントインタイムコピーです。即座に作成され、データが変更されるまでスペースを取らず、数秒でファイルをロールバックまたはリカバリできます。サーバ、VPSインスタンス、または失うことが許されないデータを管理する場合、スナップショットはワークフローの一部であるべきです。
この記事では、ZFSスナップショットの仕組み、使用方法、そして保存を自動化する方法を説明します。
ZFSスナップショットの仕組み
ZFSはコピーオンライト(CoW)モデルを使用しています。スナップショットを取るとき、ZFSはデータを複製しません。ブロック・ポインタ・ツリーの現在の状態を記録するだけです。新しい書き込みは空いているブロックに行われ、スナップショットはオリジナルを参照し続けます。
つまり、スナップショットはデータセットのサイズに関係なくマイクロ秒で作成され、作成時に追加のスペースを消費することはありません。スナップショットは元のブロックを保持するため、データセットが変更されたときにのみスペースを消費します。
これは、ファイル全体をスキャンしてコピーするrsyncや tarのようなファイルレベルのバックアップツールとは根本的に異なります。10GBのファイルの4KBを変更した場合、rsyncはファイル全体をコピーします。ZFSは4KBのブロックだけを保存します。
スナップショットも不変です。スナップショットはカーネル・レベルで読み取り専用に設定されているため、ユーザー空間のプロセス(ランサムウェアを含む)はスナップショットを変更できない。ZFSのビルトイン・チェックサムと組み合わせることで、リストア時にデータの整合性を確認できる。
スナップショットの作成
前提条件
ZFSのインストールとプールの設定が必要です。Ubuntu 20.04+の場合:
sudo apt update && sudo apt upgrade -y
sudo apt install zfsutils-linux -y
sudo modprobe zfsプールを作成します。シングルディスクの場合(典型的なVPSの場合):
sudo zpool create tank /dev/sdb専用サーバーでミラーリングセットアップを行う場合は、再起動後の問題を避けるため、デバイス名の代わりにディスクIDを使用します:
sudo zpool create tank mirror /dev/disk/by-id/ata-DISK1 /dev/disk/by-id/ata-DISK2圧縮を有効にする(LZ4が高速で効果的):
sudo zfs set compression=lz4 tank次に、ワークロード用のデータセットを作成する:
sudo zfs create tank/web
sudo zfs create tank/databasesスナップショットの作成
基本的なコマンドです:
sudo zfs snapshot tank/web@before-updateタイムスタンプ名(cronを使うと便利):
sudo zfs snapshot tank/db@$(date +%Y%m%d_%H%M%S)すべての子データセットを一度に取り込むには、recursiveフラグを使う:
sudo zfs snapshot -r tank@daily_backupで確認してください:
sudo zfs list -t snapshotスナップショットからの復元
個々のファイルのリストア
すべてのZFSデータセットには、マウントポイントに隠し.zfs/snapshotディレクトリがあります。lsでは表示されませんが、直接そこに移動することができます:
ls /tank/web/.zfs/snapshot/before-update/単一のファイルをリストアするには
cp -p /tank/web/.zfs/snapshot/before-update/config/app.conf /tank/web/config/pフラグはパーミッションとタイムスタンプを保持します。
データセット全体のロールバック
アップグレードに失敗した後など、すべてを元に戻す必要がある場合:
sudo zfs rollback tank/web@before-updateZFSはデータをコピーするのではなく、ブロックポインタを更新するので、これはほとんど瞬時にできます。しかし、破壊的です。スナップショット以降に加えられた変更はすべて永久に失われます。
ターゲットと現在の状態の間に新しいスナップショットが存在する場合、ZFSはロールバックをブロックします。rを使用して強制的にロールバックし、それらの中間スナップショットを削除します:
sudo zfs rollback -r tank/db@20260426_090000良い習慣:ロールバックする前に現在の(壊れた)状態をスナップショットしておくと、必要に応じてフォールバックができます。
| リカバリ方法 | 速度 | データ損失のリスク | 最適な方法 |
|---|---|---|---|
.zfs経由のファイル・リストア | ファイルサイズによる | なし | 誤削除、単一ファイルの復元 |
| 完全ロールバック | 即時 | 高(スナップショット後のすべての変更を失う) | アップグレードの失敗、システム全体の問題 |
| テスト用クローン | インスタント | なし(並列データセットが作成される) | ロールバックをコミットする前の検証 |
スナップショットの管理と刈り込み
スナップショットのサイズはゼロから始まりますが、その下にあるライブデータが変化するにつれて大きくなります。容量の使用状況を確認するには
zfs list -t snapshot -o name,used,refer,creationUSED列は、そのスナップショットに固有のスペース量を示します。REFERは、スナップショットが取得された時のデータセットの合計サイズを示します。
スナップショットを削除するには
sudo zfs destroy tank/web@before-updateパターンでも削除できます:
sudo zfs destroy tank/web@daily-2026-04-%常に最初にドライランしてください:
sudo zfs destroy -nv tank/web@daily-%ZFSは技術的には数百万のスナップショットを扱うことができますが、データセットあたり数千を超えるとパフォーマンスが低下します。zfs listや zfs destroyのようなコマンドは著しく遅くなります。保持は厳重に。
Sanoidを使ったリテンションの自動化
Sanoidは、ZFSスナップショットの作成とプルーニングを自動化するための標準ツールです。sanoid.confでリテンションポリシーを定義すると、あとはSanoidが処理してくれます。
典型的な本番環境での設定は以下のようになります:
| ワークロードの種類 | 時間毎 | 毎日 | 毎週 | 毎月 |
|---|---|---|---|---|
| 標準生産 | 24-48 | 30 | 8 | 12 |
| データベース(高チャーン) | 72 | 30 | 12 | 24 |
| ログ/低優先度 | 12-24 | 7 | 0 | 3 |
| 静的メディア | 0 | 7 | 0 | 3 |
Sanoidはまた、frequentlyパラメータによって、1時間ごとのスナップショットもサポートしている。frequently = 96、frequent_period = 15に設定すると、15分ごとにスナップショットが作成されます。
sanoidをcronでスケジュールして、1分ごとまたは15分ごとに実行すると、スナップショットが自動的に作成され、削除されます。
zfs sendによるオフサイトレプリケーション
単一サーバー上のスナップショットは、偶発的な変更やソフトウェア障害から保護しますが、ハードウェアの損失からは保護しません。そのためには、SSH経由でzfs sendと zfs receiveを使ってオフサイト・レプリケーションを行います:
zfs send tank/web@backup | ssh user@remote zfs receive backup/webインクリメンタル転送(最後のスナップショット以降に変更されたものだけを送信)の場合:
zfs send -i tank/web@old_snap tank/web@new_snap | ssh user@remote zfs receive backup/webSanoidのコンパニオンツールであるsyncoidは、このプロセスを自動化し、増分送信、エラー回復、およびロギングを処理します。
ランサムウェア対策に関する注意
ZFSスナップショットはカーネル・レベルで読み取り専用であるため、標準的なマルウェアはスナップショットを変更したり暗号化したりできません。これは強力な防御のレイヤーだ。しかし、防弾仕様ではない。攻撃者がrootアクセス権を獲得した場合、データを暗号化する前にスナップショットを削除することができる。
スナップショットは、より広範な戦略の1つのレイヤーであるべきだ。オフサイト・レプリケーション、ルート・アクセスの制限、ネットワーク・レベルのセキュリティと組み合わせてください。スナップショットだけに頼ってはいけません。
推奨ビデオ

ZFSスナップショット:作成、リストア、自動化の方法
Linux 上で ZFS スナップショットを作成、復元、自動化する方法を学びます。コマンド、ロールバック、保持ポリシー、Sanoidを使用したオフサイトレプリケーションをカバーしています。
10分で読めます - 2026年5月5日
VPSにRedisをインストールして使用する方法
9分で読めます - 2026年1月7日

ご質問またはカスタムソリューションが必要ですか?
柔軟なオプション
グローバル・リーチ
即時展開
柔軟なオプション
グローバル・リーチ
即時展開