ZFSスナップショット:作成、リストア、自動化の方法

10分で読めます - 2026年5月5日

hero section cover
目次
  • ZFSスナップショット:作成、リストア、自動化の方法
  • ZFSスナップショットの仕組み
  • スナップショットの作成
  • スナップショットからの復元
  • スナップショットの管理と刈り込み
  • Sanoidを使ったリテンションの自動化
  • zfs sendによるオフサイトレプリケーション
  • ランサムウェア対策に関する注意
  • 推奨ビデオ
  • 最後に
共有

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-update

ZFSはデータをコピーするのではなく、ブロックポインタを更新するので、これはほとんど瞬時にできます。しかし、破壊的です。スナップショット以降に加えられた変更はすべて永久に失われます。

ターゲットと現在の状態の間に新しいスナップショットが存在する場合、ZFSはロールバックをブロックします。rを使用して強制的にロールバックし、それらの中間スナップショットを削除します:

sudo zfs rollback -r tank/db@20260426_090000

良い習慣:ロールバックする前に現在の(壊れた)状態をスナップショットしておくと、必要に応じてフォールバックができます。

リカバリ方法速度データ損失のリスク最適な方法
.zfs経由のファイル・リストアファイルサイズによるなし誤削除、単一ファイルの復元
完全ロールバック即時高(スナップショット後のすべての変更を失う)アップグレードの失敗、システム全体の問題
テスト用クローンインスタントなし(並列データセットが作成される)ロールバックをコミットする前の検証

スナップショットの管理と刈り込み

スナップショットのサイズはゼロから始まりますが、その下にあるライブデータが変化するにつれて大きくなります。容量の使用状況を確認するには

zfs list -t snapshot -o name,used,refer,creation

USED列は、そのスナップショットに固有のスペース量を示します。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-4830812
データベース(高チャーン)72301224
ログ/低優先度12-24703
静的メディア0703

Sanoidはまた、frequentlyパラメータによって、1時間ごとのスナップショットもサポートしている。frequently = 96frequent_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/web

Sanoidのコンパニオンツールであるsyncoidは、このプロセスを自動化し、増分送信、エラー回復、およびロギングを処理します。

ランサムウェア対策に関する注意

ZFSスナップショットはカーネル・レベルで読み取り専用であるため、標準的なマルウェアはスナップショットを変更したり暗号化したりできません。これは強力な防御のレイヤーだ。しかし、防弾仕様ではない。攻撃者がrootアクセス権を獲得した場合、データを暗号化する前にスナップショットを削除することができる。

スナップショットは、より広範な戦略の1つのレイヤーであるべきだ。オフサイト・レプリケーション、ルート・アクセスの制限、ネットワーク・レベルのセキュリティと組み合わせてください。スナップショットだけに頼ってはいけません。

推奨ビデオ

最後に

ZFSスナップショットは高速でスペース効率がよく、基本を理解すれば簡単に使えます。ZFSスナップショットはオフサイト・バックアップの代わりにはなりませんが、従来のバックアップ・ツールにはないギャップを埋めてくれます。

VPSまたは専用サーバーでZFSを実行している場合、Sanoidをセットアップし、保持ポリシーを定義し、レプリケーションを自動化します。30分で設定でき、何か問題が発生したときに数時間を節約できます。FDC VPSまたは専用サーバーでお試しください。

ブログ

今週の特集

その他の記事
ZFSスナップショット:作成、リストア、自動化の方法

ZFSスナップショット:作成、リストア、自動化の方法

Linux 上で ZFS スナップショットを作成、復元、自動化する方法を学びます。コマンド、ロールバック、保持ポリシー、Sanoidを使用したオフサイトレプリケーションをカバーしています。

10分で読めます - 2026年5月5日

VPSにRedisをインストールして使用する方法

9分で読めます - 2026年1月7日

その他の記事
background image

ご質問またはカスタムソリューションが必要ですか?

icon

柔軟なオプション

icon

グローバル・リーチ

icon

即時展開

icon

柔軟なオプション

icon

グローバル・リーチ

icon

即時展開