ZFSスナップショットとクローンの使い方を徹底解説!基本コマンドから活用シーンまで
ストレージデバイスにZFSを採用することに決めたなら、おめでとうございます。あなたは今、世界でも最も高機能で洗練されたファイルシステムの一つを使うことになります。家族写真や動画など、長期保存したい大切なデータがあるなら、ZFSは真剣に検討する価値のある選択肢です。
例えば4台のHDDによるミラー構成のような冗長化セットアップでは、ビットロット(経年劣化によるデータ破損)やストレージの劣化、コンピュータのエラーなどによって、データが1ビットも失われることはありません。ZFSは自己修復機能を備え、データを自動的に復旧できます。複雑なアルゴリズム、ハッシュ、マークルツリーによって、常にデータ整合性が保証されるのです。
ただし、この記事では「なぜZFSが長期アーカイブに最適なのか」という話題には触れません。代わりに、スナップショットとクローンがあなたにもたらしてくれるメリットについて詳しく解説していきます。
ZFSのスナップショットとクローンとは?
スナップショットとは、ある時点におけるデータの状態を正確に記録した「静止画」のようなものです。具体例を挙げてみましょう。あなたが複雑なWebサイトを制作しているとします。コード、データベース、画像はすべてZFSデータセット上に保存しています。サイトのデザインを変更し、画像を修正し、レイアウトの寸法を調整し、それらに合わせてコードも書き換えたとしましょう。ここで以前のデザインに戻したくなったら、通常はすべての変更を一つずつ手作業で元に戻す必要があります。
しかしZFSなら話は別です。現状のデザインのスナップショットを取得しておけば、自由に変更を加えられます。新しいデザインに不満があれば、前のスナップショットへワンコマンドでロールバックするだけです。「GitやGitHub、スナップショット機能付きのコードエディタもあるのでは?」と思うかもしれません。確かにその通りですが、ZFSにはさらに強力な特徴があります。
- スナップショットはグローバル。プロジェクトに含まれるすべてのデータ(コード・DB・画像など)を丸ごと記録できる
- プロジェクトのサイズに関わらず(数百GBあろうとも)、スナップショットの作成もロールバックもほぼ瞬時に完了する

スナップショットの数に上限はありません。「デザイン1」「デザイン2」「デザイン3」という具合に複数の状態を保存し、自由に行き来しながら編集を進め、「デザイン2・改良版」のような新しいスナップショットを作ることもできます。
クローン
スナップショットが「いつでも戻れる凍結されたデータ状態」であるのに対し、クローンは「共通の出発点から分岐するブランチ」のようなものです。次のシナリオを想像してみてください。
広告キャンペーン用の動画を作成しました。この動画が保存されているZFSデータセットのスナップショットを取得します。そして、そのスナップショットを3回クローンします。「クローン1」を一人目の社員へ、「クローン2」を二人目の社員へ、「クローン3」を三人目の社員へ渡せば、それぞれが独立した作業空間で好きなように編集できます。
なぜこれが便利なのでしょうか? 動画は膨大なディスク容量を占有します。高解像度のRAW映像には数百GB〜数千GBのストレージが必要になることもあります。メインの動画が500GBを必要とし、3人がそれぞれ異なる編集を行うためにクローンを作る場合、単純計算で1500GB以上の容量が必要です。
ところがZFSなら、スナップショットと3つ(またはそれ以上)のクローンを合わせても、必要なのはわずか501GB程度。全クローンで共通している変更されていないデータブロックは一度だけ保存され、各編集者が加えた差分だけが追加データとして記録されます。実際の運用では、3つのクローン全体でおよそ650GB程度に収まるでしょう。これはストレージとリソースの非常に効率的な使い方であり、しかもデータは適切に分離されているため、各編集者は思い思いの作業に集中できます。
もちろん、ディスク容量が問題にならないケースでも、同じコンテンツを複数の方向へ分岐させたい場面であれば、クローンはさまざまな用途に活用できます。
ZFSスナップショットを操作する基本コマンド
ZFSは他のLinuxディストリビューションでも利用できますが、現時点で最も手厚いサポートを提供しているのはUbuntuです。
すべてのユーザーがZFS専用のディスク全体を用意できるわけではないので、空きパーティション上にプールを作成できることも覚えておくと便利です。sudo zpool create pool_name /dev/sda3 のようなコマンドを使います。ここで /dev/sda3 は、1番目のディスク上の3番目のパーティションのデバイス名です。
必要なパッケージをインストールし、最初のZFSデータセットを作成したら、次の手順でスナップショットを作成します。
まず、スナップショット対象となるZFSデータセットの名前を確認します。
zfs list

この例では、データセット名が data、スナップショット名が snap1 です。以下のコマンドでは、これらを自分の環境に合わせた値に置き換えてください。スナップショットを作成するには、次のように入力します。
sudo zfs snapshot data@snap1
もしデータセット名が videos で、スナップショットを first と名付けたい場合は、次のようになります。
sudo zfs snapshot videos@first
変更を取り消して、スナップショット取得時点の正確な内容にデータセットを復元するには、次のコマンドを使います。
sudo zfs rollback data@snap1
スナップショットが不要になったら、次のコマンドで削除します。
sudo zfs destroy data@snap1
ZFSクローンを操作する基本コマンド
「data@snap1」というスナップショットがあるとして、クローンを作成するには次のコマンドを実行します。
sudo zfs clone data@snap1 data/clone1

クローンを削除するには:
sudo zfs destroy data/clone3
さらに、クローンに対してもスナップショットを取得できます。
sudo zfs snapshot data/clone2@snap_of_clone
後日、作成済みのスナップショットとクローンをすべて確認したくなったら、次のコマンドを使いましょう。
zfs list -t all

まとめ
以上で、ZFSのスナップショットとクローンに関する基本的な操作はすべて網羅しました。もう一つ知っておくと便利な情報があります。各データセットには「.zfs」という隠しディレクトリが存在します。ls /data/.zfs/snapshot/snap1/ のようなコマンドを実行すれば、スナップショット内のファイルの状態を確認できます。このディレクトリは通常の(読み取り専用)ディレクトリと同じように動作するため、スナップショット全体をロールバックしなくても、特定のファイルだけを取り出してコピーすることが可能です。
-
FedoraでFlatpakを有効化して使う方法を徹底解説
Fedora 32とUbuntu 20.04のリリース以降、Linuxユーザーの間ではパッケージ形式をめぐる大きな変化が起きています。SnapやFlatpakといったユニバーサルパッケージフォーマットが急速に人気を集めており、筆者としてもその理由は十分にあると考えています。フリーソフトウェアからプロプライエタリなアプリまで、膨大な種類のソフトウェアに簡単にアクセスでき、開発者にとってもパッケージングが格段に楽になるからです。しかし、LinuxシステムでFlatpakを使い始めるのは、特に初心者にとっては少し戸惑うかもしれません。この記事ではFedoraでのFlatpakの使い方を解説しますが、
-
Excelのスパークライン完全ガイド:セル内ミニグラフでデータの傾向をひと目で把握する方法
Excelでデータを扱っていると、「いちいちグラフを作らなくても、このデータの傾向をサッと確認したい」と思うことはありませんか?例えば、生徒のテスト点数や、直近5年間の会社の売上データなど。本格的なグラフを作成すると時間がかかる上に、ワークシートのスペースを大きく取ってしまいます。そんなときに便利なのが、1つのセルの中に小さなグラフを表示できる「スパークライン」機能です。 Excel 2010以降(2013・2016など)にはスパークラインという便利な機能が搭載されており、1つのセル内にミニグラフを作成できます。データのすぐ隣のセルに追加できるため、行ごとのデータの推移を素早く視覚化でき、Ex