第 7 章 ZFS のスナップショットとクローンの操作
この章では、ZFS のスナップショットとクローンを作成して管理する方法について説明します。この章では、スナップショットを保存する方法についても説明します。
この章は、次の節で構成されます。
ZFS スナップショットの概要
「スナップショット」とは、ファイルシステムまたはボリュームの読み取り専用コピーのことです。スナップショットはほとんど瞬間的に作成することができ、最初はプール内で追加のディスク領域を消費しません。ただし、アクティブなデータセット内のデータが変化していくにつれて、ディスク領域が消費されるようになります。古いデータを引き続き参照し、その領域を解放しないためです。
ZFS スナップショットには次の特長があります。
-
システムの再起動後も残ります。
-
スナップショットの理論上の最大数は、264 です。
-
個別のバッキングストアは使用しません。スナップショットは、作成元のファイルシステムと同じストレージプールのディスク領域を直接消費します。
-
再帰的なスナップショットは、1 つの原子動作としてすばやく作成されます。スナップショットは、まとめて (一度にすべて) 作成されるか、まったく作成されないかのどちらかです。原子スナップショット動作の利点は、子孫ファイルシステムにまたがる場合でも、常にある一貫した時間のスナップショットデータが取得されることです。
ボリュームのスナップショットに直接アクセスすることはできませんが、それらの複製、バックアップ、ロールバックなどを行うことはできます。ZFS スナップショットのバックアップの詳細については、「ZFS データを送信および受信する」を参照してください。
ZFS スナップショットを作成および破棄する
スナップショットは、zfs snapshot コマンドを使って作成します。引数として、作成するスナップショットの名前だけを指定できます。スナップショット名は次のように指定します。
filesystem@snapname
volume@snapname
|
スナップショット名は、「ZFS コンポーネントに名前を付けるときの規則」で定義されている規則に従って付ける必要があります。
次の例では、tank/home/ahrens のスナップショットが friday という名前で作成されます。
# zfs snapshot tank/home/ahrens@friday
|
すべての子孫ファイルシステムのスナップショットを作成するには、-r オプションを使用します。次に例を示します。
# zfs snapshot -r tank/home@now
# zfs list -t snapshot
NAME USED AVAIL REFER MOUNTPOINT
tank/home@now 0 - 29.5K -
tank/home/ahrens@now 0 - 2.15M -
tank/home/anne@now 0 - 1.89M -
tank/home/bob@now 0 - 1.89M -
tank/home/cindys@now 0 - 2.15M -
|
スナップショットには、変更できるプロパティーはありません。また、データセットのプロパティーをスナップショットに適用することもできません。
# zfs set compression=on tank/home/ahrens@tuesday
cannot set compression property for 'tank/home/ahrens@tuesday': snapshot
properties cannot be modified
|
スナップショットを破棄するには、zfs destroy コマンドを使用します。次に例を示します。
# zfs destroy tank/home/ahrens@friday
|
データセットのスナップショットが存在する場合、そのデータセットを破棄することはできません。次に例を示します。
# zfs destroy tank/home/ahrens
cannot destroy 'tank/home/ahrens': filesystem has children
use '-r' to destroy the following datasets:
tank/home/ahrens@tuesday
tank/home/ahrens@wednesday
tank/home/ahrens@thursday
|
また、スナップショットからクローンが作成されている場合は、スナップショットを破棄する前にクローンを破棄する必要があります。
destroy サブコマンドの詳細については、「ZFS ファイルシステムを破棄する」を参照してください。
ZFS スナップショットの名前を変更する
スナップショットの名前を変更することはできますが、名前を変更するときはそれらを作成したプールとデータセットの中で行う必要があります。次に例を示します。
# zfs rename tank/home/cindys@083006 tank/home/cindys@today
|
また、次のショートカット構文は、上の例に示すスナップショット名変更の構文と同等です。
# zfs rename tank/home/cindys@083006 today
|
次のようなスナップショット名の変更操作はサポートされていません。ターゲットのプールとファイルシステムの名前が、スナップショットの作成されたプールとファイルシステムと異なるためです。
# zfs rename tank/home/cindys@today pool/home/cindys@saturday
cannot rename to 'pool/home/cindys@today': snapshots must be part of same
dataset
|
zfs rename -r コマンドを使用すると、スナップショットの名前を再帰的に変更することができます。次に例を示します。
# zfs list
NAME USED AVAIL REFER MOUNTPOINT
users 270K 16.5G 22K /users
users/home 76K 16.5G 22K /users/home
users/home@yesterday 0 - 22K -
users/home/markm 18K 16.5G 18K /users/home/markm
users/home/markm@yesterday 0 - 18K -
users/home/marks 18K 16.5G 18K /users/home/marks
users/home/marks@yesterday 0 - 18K -
users/home/neil 18K 16.5G 18K /users/home/neil
users/home/neil@yesterday 0 - 18K -
# zfs rename -r users/home@yesterday @2daysago
# zfs list -r users/home
NAME USED AVAIL REFER MOUNTPOINT
users/home 76K 16.5G 22K /users/home
users/home@2daysago 0 - 22K -
users/home/markm 18K 16.5G 18K /users/home/markm
users/home/markm@2daysago 0 - 18K -
users/home/marks 18K 16.5G 18K /users/home/marks
users/home/marks@2daysago 0 - 18K -
users/home/neil 18K 16.5G 18K /users/home/neil
users/home/neil@2daysago 0 - 18K -
|
ZFS スナップショットを表示してアクセスする
listsnapshots プールプロパティーを使用すれば、zfs list 出力でのスナップショット表示を有効または無効にすることができます。このプロパティーは、デフォルトで有効になっています。
このプロパティーを無効にした場合、zfs list -t snapshot コマンドを使用すればスナップショット情報を表示できます。あるいは、listsnapshots プールプロパティーを有効にします。次に例を示します。
# zpool get listsnapshots tank
NAME PROPERTY VALUE SOURCE
tank listsnapshots on default
# zpool set listsnapshots=off tank
# zpool get listsnapshots tank
NAME PROPERTY VALUE SOURCE
tank listsnapshots off local
|
ファイルシステムのスナップショットには、ファイルシステムを含むルートの .zfs/snapshot ディレクトリからアクセスできます。たとえば、tank/home/ahrens が /home/ahrens にマウントされている場合は、tank/home/ahrens@thursday スナップショットのデータには、/home/ahrens/.zfs/snapshot/thursday ディレクトリからアクセスできます。
# ls /tank/home/ahrens/.zfs/snapshot
tuesday wednesday thursday
|
スナップショットの一覧は次の方法で表示できます。
# zfs list -t snapshot
NAME USED AVAIL REFER MOUNTPOINT
pool/home/anne@monday 0 - 780K -
pool/home/bob@monday 0 - 1.01M -
tank/home/ahrens@tuesday 8.50K - 780K -
tank/home/ahrens@wednesday 8.50K - 1.01M -
tank/home/ahrens@thursday 0 - 1.77M -
tank/home/cindys@today 8.50K - 524K -
|
特定のファイルシステムのために作成したスナップショットの一覧は、次の方法で表示できます。
# zfs list -r -t snapshot -o name,creation tank/home
NAME CREATION
tank/home/ahrens@tuesday Mon Aug 31 11:03 2009
tank/home/ahrens@wednesday Mon Aug 31 11:03 2009
tank/home/ahrens@thursday Mon Aug 31 11:03 2009
tank/home/cindys@now Mon Aug 31 11:04 2009
|
スナップショットの領域の計上
スナップショットを作成したときは、その領域は最初はスナップショットとファイルシステムの間で共有されます。それまでに作成したスナップショットと領域が共有されることもあります。ファイルシステムが変化していくにつれて、それまで共有されていた領域がスナップショット固有になり、スナップショットの used プロパティーに計上されます。また、スナップショットを削除すると、ほかのスナップショットに固有の (および使用される) 容量を増やすことができます。
スナップショット領域の referenced プロパティーは、スナップショットを作成したときのファイルシステムのプロパティーと同じです。
used プロパティーの値がどのように消費されているかについて、さらに詳細な情報を確認することができます。新しい読み取り専用ファイルシステムプロパティーは、クローン、ファイルシステム、およびボリュームに関する領域使用状況を示します。次に例を示します。
$ zfs list -o space
NAME AVAIL USED USEDSNAP USEDDS USEDREFRESERV USEDCHILD
rpool 60.6G 6.37G 0 97K 0 6.37G
rpool/ROOT 60.6G 4.87G 0 21K 0 4.87G
rpool/ROOT/zfs1009BE 60.6G 4.87G 0 4.87G 0 0
rpool/dump 60.6G 1.50G 0 1.50G 0 0
rpool/swap 60.6G 16K 0 16K 0 0
|
これらのプロパティーについては、表 6–1 を参照してください。
ZFS スナップショットにロールバックする
zfs rollback コマンドを使用して、特定のスナップショットよりあとに加えられたすべての変更を破棄できます。ファイルシステムは、そのスナップショットが作成されたときの状態に戻ります。デフォルトでは、このコマンドを使って、最新のスナップショット以外のスナップショットにロールバックすることはできません。
それより前のスナップショットにロールバックするには、中間にあるスナップショットをすべて破棄する必要があります。-r オプションを指定すれば、古いスナップショットを破棄できます。
中間にあるスナップショットのクローンが存在する場合は、-R オプションを指定してクローンも破棄する必要があります。
注 –
ロールバックするファイルシステムが現在マウントされている場合は、そのマウントを解除してから再度マウントする必要があります。ファイルシステムのマウントを解除できない場合は、ロールバックに失敗します。必要に応じて -f オプションを指定すると、ファイルシステムのマウントが強制的に解除されます。
次の例では、tank/home/ahrens ファイルシステムが tuesday スナップショットにロールバックされます。
# zfs rollback tank/home/ahrens@tuesday
cannot rollback to 'tank/home/ahrens@tuesday': more recent snapshots exist
use '-r' to force deletion of the following snapshots:
tank/home/ahrens@wednesday
tank/home/ahrens@thursday
# zfs rollback -r tank/home/ahrens@tuesday
|
この例では、スナップショット wednesday および thursday が削除されます。以前のスナップショット tuesday にロールバックされるためです。
# zfs list -r -t snapshot -o name,creation tank/home/ahrens
NAME CREATION
tank/home/ahrens@tuesday Wed Aug 27 16:35 2008
|
ZFS クローンの概要
「クローン」とは、書き込み可能なボリュームまたはファイルシステムのことで、最初の内容は作成元のデータセットと同じです。スナップショットの場合と同様に、クローンは瞬間的に作成され、最初は追加のディスク領域を消費しません。また、クローンのスナップショットを作成することもできます。
クローンは、スナップショットだけから作成できます。スナップショットが複製されるときに、クローンとスナップショットの間に暗黙の依存関係が作成されます。クローンはデータセット階層内の別の場所に作成されますが、クローンが存在する間は元のスナップショットを破棄することはできません。この依存関係は、origin プロパティーからわかります。そのような依存関係が存在する場合には、zfs destroy コマンドを実行すると表示されます。
クローンには、作成元のデータセットのプロパティーは継承されません。zfs get および zfs set コマンドを使用して、複製したデータセットのプロパティーを表示して変更することができます。ZFS データセットのプロパティーの設定方法の詳細については、「ZFS プロパティーを設定する」を参照してください。
クローンのすべてのディスク領域は最初は元のスナップショットと共有されるため、used プロパティーの初期値はゼロになります。クローンに変更が加えられるにつれて、使用される領域が多くなります。元のスナップショットの used プロパティーには、クローンが消費するディスク領域は計上されません。
ZFS クローンを作成する
クローンを作成するには、zfs clone コマンドを使用します。クローンをどのスナップショットから作成するかを指定し、新しいファイルシステムまたはボリュームの名前を指定します。新しいファイルシステムまたはボリュームは、ZFS 階層内の任意の場所に配置できます。新しいデータセットの種類 (ファイルシステムやボリュームなど) は、クローンを作成したスナップショットの種類と同じになります。クローンを作成するためのファイルシステムは、基にするファイルシステムスナップショットがあるプールに存在している必要があります。
次の例では、tank/home/ahrens/bug123 という名前の新しいクローンが作成されます。最初の内容は、スナップショット tank/ws/gate@yesterday と同じです。
# zfs snapshot tank/ws/gate@yesterday
# zfs clone tank/ws/gate@yesterday tank/home/ahrens/bug123
|
次の例では、スナップショット projects/newproject@today から複製されたワークスペースが、一時的なユーザーのために projects/teamA/tempuser という名前で作成されます。次に、複製されたワークスペースにプロパティーが設定されます。
# zfs snapshot projects/newproject@today
# zfs clone projects/newproject@today projects/teamA/tempuser
# zfs set sharenfs=on projects/teamA/tempuser
# zfs set quota=5G projects/teamA/tempuser
|
ZFS クローンを破棄する
ZFS クローンを破棄するには、zfs destroy コマンドを使用します。次に例を示します。
# zfs destroy tank/home/ahrens/bug123
|
親のスナップショットを破棄するときは、その前にクローンを破棄する必要があります。
ZFS ファイルシステムを ZFS クローンで置き換える
zfs promote コマンドを使えば、アクティブな ZFS ファイルシステムをそのファイルシステムのクローンで置き換えることができます。この機能を使えばファイルシステムの複製と置換が容易に行え、「作成元」のファイルシステムが、指定されたファイルシステムのクローンになります。さらに、この機能を使えば、クローンの作成元となるファイルシステムを破棄することもできます。クローンの移行促進を行わない限り、アクティブクローンの作成元のファイルシステムを破棄することはできません。クローンの破棄に関する詳細については、「ZFS クローンを破棄する」を参照してください。
次の例では、tank/test/productA ファイルシステムがクローンされたあと、クローンファイルシステム tank/test/productAbeta が tank/test/productA ファイルシステムになっています。
# zfs create tank/test
# zfs create tank/test/productA
# zfs snapshot tank/test/productA@today
# zfs clone tank/test/productA@today tank/test/productAbeta
# zfs list -r tank/test
NAME USED AVAIL REFER MOUNTPOINT
tank/test 314K 8.24G 25.5K /tank/test
tank/test/productA 288K 8.24G 288K /tank/test/productA
tank/test/productA@today 0 - 288K -
tank/test/productAbeta 0 8.24G 288K /tank/test/productAbeta
# zfs promote tank/test/productAbeta
# zfs list -r tank/test
NAME USED AVAIL REFER MOUNTPOINT
tank/test 316K 8.24G 27.5K /tank/test
tank/test/productA 0 8.24G 288K /tank/test/productA
tank/test/productAbeta 288K 8.24G 288K /tank/test/productAbeta
tank/test/productAbeta@today 0 - 288K -
|
この zfs list 出力から、元の productA ファイルシステムの領域計上が、productAbeta ファイルシステムの領域計上で置換されていることがわかります。
ファイルシステムの名前を変更することで、クローンの置換処理を完了します。次に例を示します。
# zfs rename tank/test/productA tank/test/productAlegacy
# zfs rename tank/test/productAbeta tank/test/productA
# zfs list -r tank/test
NAME USED AVAIL REFER MOUNTPOINT
tank/test 316K 8.24G 27.5K /tank/test
tank/test/productA 288K 8.24G 288K /tank/test/productA
tank/test/productA@today 0 - 288K -
tank/test/productAlegacy 0 8.24G 288K /tank/test/productAlegacy
|
また、旧バージョンのファイルシステムを削除することもできます。次に例を示します。
# zfs destroy tank/test/productAlegacy
|
ZFS データを送信および受信する
zfs send コマンドを実行すると、スナップショットのストリーム表現が作成され、標準出力に書き込まれます。デフォルトでは、完全なストリームが生成されます。この出力は、ファイルまたは別のシステムにリダイレクトできます。zfs receive コマンドを実行すると、ストリームに内容が指定されているスナップショットが作成され、標準入力に渡されます。ストリーム全体を受信する場合、新しいファイルシステムも作成されます。これらのコマンドを使えば、ZFS スナップショットデータを送信したり、ZFS スナップショットデータやファイルシステムを受信したりできます。次の節の例を参照してください。
ZFS データを保存するために、次のバックアップ方法が用意されています。
-
企業向けバックアップ製品 – 次の機能が必要な場合は、企業向けバックアップソリューションを検討してください。
-
ファイルごとの復元
-
バックアップメディアの検証
-
メディアの管理
-
ファイルシステムのスナップショットとスナップショットのロールバック – ファイルシステムのコピーを作成して、必要に応じて以前のバージョンのファイルシステムに戻す作業を簡単に実行するには、zfs snapshot および zfs rollback コマンドを使用します。たとえば、以前のバージョンのファイルシステムからファイルを復元する場合に、この方法を使用できます。
スナップショットの作成およびロールバックの詳細については、「ZFS スナップショットの概要」を参照してください。
-
スナップショットの保存 – zfs send および zfs receive コマンドを使用して、ZFS スナップショットの送信と受信を行います。スナップショットから次のスナップショットまでの増分変更を保存することができますが、ファイルを個別に復元することはできません。ファイルシステムのスナップショット全体を復元する必要があります。これらのコマンドでは、ZFS データを保存するための完全なバックアップソリューションは提供されません。
-
リモート複製 – あるシステムのファイルシステムを別のシステムにコピーするときは、zfs send および zfs receive コマンドを使用します。この処理は、WAN 経由でデバイスをミラー化する従来のボリューム管理製品とは異なります。特殊な設定やハードウェアは必要ありません。ZFS ファイルシステムを複製する利点は、ファイルシステムを別のシステムのストレージプール上に再作成し、その新しく作成したプールに同じファイルシステムデータを格納しながら RAID-Z などの別の構成レベルを指定できることです。
-
アーカイブユーティリティー – tar、cpio、pax、サードパーティーバックアップ製品などのアーカイブユーティリティーを使って ZFS データを保存します。現時点では、tar と cpio では NFSv4 方式の ACL を正しく変換できますが、pax では NFSv4 方式の ACL を正しく変換できません。
ZFS スナップショットを送信する
zfs send コマンドを使用して、スナップショットのコピーを送信し、バックアップデータの格納に使用する別のプール (同じシステム上または別のシステム上にある) でそのスナップショットを受信することができます。たとえば、同じシステム上の別のプールにスナップショットを送信するには、次のような構文を使用します。
# zfs send tank/data@snap1 | zfs recv spool/ds01
|
スナップショットストリームを別のシステムに送信する場合は、zfs send の出力を ssh コマンドにパイプします。次に例を示します。
host1# zfs send tank/dana@snap1 | ssh host2 zfs recv newtank/dana
|
完全なストリームを送信するときは、対象のファイルシステムが存在してはいけません。
zfs send -i オプションを使用すれば、増分データを送信できます。次に例を示します。
host1# zfs send -i tank/dana@snap1 tank/dana@snap2 | ssh host2 zfs recv newtank/dana
|
最初の引数には、以前のスナップショット (snap1) を指定します。2 番目の引数には、それよりあとのスナップショット (snap2) を指定します。この場合は、増分データの受信を正常に行うために newtank/dana ファイルシステムが存在している必要があります。
増分ソース snap1 は、スナップショット名の最後の構成要素だけで指定できます。このショートカットは、snap1 には @ 記号のあとの名前を指定するだけでよいことを意味し、この場合 snap1 は snap2 と同じファイルシステムから作成されたものと見なされます。次に例を示します。
host1# zfs send -i snap1 tank/dana@snap2 > ssh host2 zfs recv newtank/dana
|
この構文は、上の例に示す増分スナップショットの構文と同等です。
異なるファイルシステム snapshot1 から増分ストリームを生成しようとすると、次のメッセージが表示されます。
cannot send 'pool/fs@name': not an earlier snapshot from the same fs
|
多数のコピーを保管する必要がある場合は、gzip コマンドを使って ZFS スナップショットのストリーム表現を圧縮することを考慮することもできます。次に例を示します。
# zfs send pool/fs@snap | gzip > backupfile.gz
|
ZFS スナップショットを受信する
ファイルシステムのスナップショットを受信するときは、次の重要な点に留意してください。
-
スナップショットおよびファイルシステムが受信されます。
-
ファイルシステムとその子孫のすべてのファイルシステムがマウント解除されます。
-
ファイルシステムが受信されている間は、それらにアクセスできません。
-
受信される元のファイルシステムは、その転送中に存在してはいけません。
-
ファイルシステム名が重複している場合には、zfs rename を使用してそのファイルシステムの名前を変更できます。
次に例を示します。
# zfs send tank/gozer@0830 > /bkups/gozer.083006
# zfs receive tank/gozer2@today < /bkups/gozer.083006
# zfs rename tank/gozer tank/gozer.old
# zfs rename tank/gozer2 tank/gozer
|
zfs receive コマンドの別名として、zfs recv を 使用できます。
対象のファイルシステムに変更を加え、新たに増分スナップショットを送信する場合は、まず受信側のファイルシステムをロールバックする必要があります。
たとえば、次のようにファイルシステムに変更を加えます。
host2# rm newtank/dana/file.1
|
そして、tank/dana@snap3 という増分スナップショットを送信する場合、新しい増分スナップショットを受信するには、最初に受信側のファイルシステムをロールバックする必要があります。-F オプションを使用すれば、ロールバック手順を実行する必要がなくなります。次に例を示します。
host1# zfs send -i tank/dana@snap2 tank/dana@snap3 | ssh host2 zfs recv -F newtank/dana
|
増分スナップショットを受信するときは、対象のファイルシステムが存在している必要があります。
ファイルシステムに変更を加えたあとで、新しい増分スナップショットを受信するために受信側のファイルシステムのロールバックを行わない場合、または -F オプションを使用しない場合は、次のメッセージが表示されます。
host1# zfs send -i tank/dana@snap4 tank/dana@snap5 | ssh host2 zfs recv newtank/dana
cannot receive: destination has been modified since most recent snapshot
|
-F オプションが正常に実行される前に、次の検査が行われます。
複雑な ZFS スナップショットストリームを送信および受信する
この節では、zfs send -I および -R オプションを使用して、より複雑なスナップショットストリームを送受信する方法について説明します。
ZFS スナップショットストリームを送受信するときは、次の点に留意してください。
-
1 つのスナップショットのすべての増分ストリームを累積スナップショットに送信する場合は、zfs send -I オプションを使用します。または、元のスナップショットからの増分ストリームを送信してクローンを作成する場合にも、このオプションを使用します。増分ストリームを受け入れるには、元のスナップショットが受信側にすでに存在している必要があります。
-
すべての子孫ファイルシステムの複製ストリームを送信する場合は、zfs send -R オプションを使用します。受信時には、すべてのプロパティー、スナップショット、下位ファイルシステム、およびクローンが維持されます。
-
増分複製ストリームを送信する場合は、どちらのオプションも使用できます。
-
プロパティーに加えられた変更、およびスナップショットとファイルシステムの名前変更と破棄は維持されます。
-
複製ストリームの受信時に zfs recv -F が指定されていない場合、データセットの破棄は無視されます。この場合の zfs recv -F 構文は、「必要に応じてロールバックする」という意味も持っています。
-
(zfs send -R ではない) ほかの -i または -I の場合と同様に、-I を使用すると、snapA から snapD までのすべてのスナップショットが送信されます。-i を使用すると、(すべての子孫の) snapD だけが送信されます。
-
このような新しい種類の zfs send ストリームを受信するには、そのストリームを送信できるソフトウェアバージョンが受信側のシステムで稼働している必要があります。ストリームのバージョンは 1 増やされています。
ただし、新しいソフトウェアバージョンを使用して古いプールバージョンのストリームにアクセスすることはできます。たとえば、新しいオプションで作成されたストリームを、バージョン 3 プールに対して送受信することができます。ただし、新しいオプションで送信されたストリームを受信するには、最近のソフトウェアが稼働している必要があります。
例 7–1 例 — 複雑な ZFS スナップショットストリームを送信および受信する
zfs send -I オプションを使用すると、一連の増分スナップショットを結合して 1 つのスナップショットを作成できます。次に例を示します。
# zfs send -I pool/fs@snapA pool/fs@snapD > /snaps/fs@all-I
|
スナップショット B、C、および D を削除します。
# zfs destroy pool/fs@snapB
# zfs destroy pool/fs@snapC
# zfs destroy pool/fs@snapD
|
結合されたスナップショットを受信します。
# zfs receive -d -F pool/fs < /snaps/fs@all-I
# zfs list
NAME USED AVAIL REFER MOUNTPOINT
pool 428K 16.5G 20K /pool
pool/fs 71K 16.5G 21K /pool/fs
pool/fs@snapA 16K - 18.5K -
pool/fs@snapB 17K - 20K -
pool/fs@snapC 17K - 20.5K -
pool/fs@snapD 0 - 21K -
|
zfs send -I コマンドを使用すると、スナップショットとクローンスナップショットを結合して、結合されたデータセットを作成することもできます。次に例を示します。
# zfs create pool/fs
# zfs snapshot pool/fs@snap1
# zfs clone pool/fs@snap1 pool/clone
# zfs snapshot pool/clone@snapA
# zfs send -I pool/fs@snap1 pool/clone@snapA > /snaps/fsclonesnap-I
# zfs destroy pool/clone@snapA
# zfs destroy pool/clone
# zfs receive -F pool/clone < /snaps/fsclonesnap-I
|
zfs send -R コマンドを使用すると、ZFS ファイルシステムおよび指定されたスナップショットまでのすべての子孫ファイルシステムを複製できます。受信時には、すべてのプロパティー、スナップショット、下位ファイルシステム、およびクローンが維持されます。
次の例では、ユーザーのファイルシステムのスナップショットが作成されます。すべてのユーザースナップショットから 1 つの複製ストリームが作成されます。次に、元のファイルシステムおよびスナップショットが破棄され、回復されます。
# zfs snapshot -r users@today
# zfs list
NAME USED AVAIL REFER MOUNTPOINT
users 187K 33.2G 22K /users
users@today 0 - 22K -
users/user1 18K 33.2G 18K /users/user1
users/user1@today 0 - 18K -
users/user2 18K 33.2G 18K /users/user2
users/user2@today 0 - 18K -
users/user3 18K 33.2G 18K /users/user3
users/user3@today 0 - 18K -
# zfs send -R users@today > /snaps/users-R
# zfs destroy -r users
# zfs receive -F -d users < /snaps/users-R
# zfs list
NAME USED AVAIL REFER MOUNTPOINT
users 196K 33.2G 22K /users
users@today 0 - 22K -
users/user1 18K 33.2G 18K /users/user1
users/user1@today 0 - 18K -
users/user2 18K 33.2G 18K /users/user2
users/user2@today 0 - 18K -
users/user3 18K 33.2G 18K /users/user3
users/user3@today 0 - 18K -
|
zfs send -R コマンドを使用して、users データセットとその子孫を複製し、複製したストリームを別のプール users2 に送信することができます。
# zfs create users2 mirror c0t1d0 c1t1d0
# zfs receive -F -d users2 < /snaps/users-R
# zfs list
NAME USED AVAIL REFER MOUNTPOINT
users 224K 33.2G 22K /users
users@today 0 - 22K -
users/user1 33K 33.2G 18K /users/user1
users/user1@today 15K - 18K -
users/user2 18K 33.2G 18K /users/user2
users/user2@today 0 - 18K -
users/user3 18K 33.2G 18K /users/user3
users/user3@today 0 - 18K -
users2 188K 16.5G 22K /users2
users2@today 0 - 22K -
users2/user1 18K 16.5G 18K /users2/user1
users2/user1@today 0 - 18K -
users2/user2 18K 16.5G 18K /users2/user2
users2/user2@today 0 - 18K -
users2/user3 18K 16.5G 18K /users2/user3
users2/user3@today 0 - 18K -
|
ZFS データのリモート複製
zfs send および zfs recv コマンドを使用して、あるシステムのスナップショットのストリーム表現を別のシステムに離れた場所からコピーできます。次に例を示します。
# zfs send tank/cindy@today | ssh newsys zfs recv sandbox/restfs@today
|
このコマンドを実行すると、tank/cindy@today のスナップショットデータが送信され、sandbox/restfs ファイルシステムに受信されます。また、restfs@today のスナップショットが newsys システム上に作成されます。この例のユーザーは、リモートシステム上で ssh を使用するように設定されています。
ほかのバックアップ製品を使用して ZFS データを保存する
zfs send および zfs receive コマンド以外に、tar や cpio コマンドなどのアーカイブユーティリティーを使用して、ZFS ファイルを保存することもできます。これらのユーティリティーはすべて、ZFS ファイル属性と ACL を保存して復元します。tar コマンドと cpio コマンドの適切なオプションを確認してください。
ZFS およびサードパーティーバックアップ製品に関する問題の最新情報については、『Solaris 10 ご使用にあたって』または次のサイトの ZFS FAQ を参照してください。
http://opensolaris.org/os/community/zfs/faq/#backupsoftware