Go to main content

Oracle® Solaris 11.4 での ZFS ファイルシステムの管理

印刷ビューの終了

更新: 2018 年 9 月
 
 

ZFS データの保存、送信、および受信

zfs send コマンドを実行すると、スナップショットのストリーム表現が作成され、標準出力に書き込まれます。デフォルトでは、完全なストリームが生成されます。この出力は、ファイルまたは別のシステムにリダイレクトできます。zfs receive コマンドを実行すると、ストリームに内容が指定されているスナップショットが作成され、標準入力に渡されます。ストリーム全体を受信する場合、新しいファイルシステムも作成されます。ZFS スナップショットデータを送信したり、ZFS スナップショットデータやファイルシステムを受信したりすることもできます。

Oracle Solaris のこのリリースでは、zfs send コマンドは –w compress オプションで機能拡張されました。このオプションにより、システムは raw データ転送を実行できます。このタイプの転送では、圧縮されたデータブロックはソースディスクでそのまま読み取られ、ターゲットにそのまま書き込まれます。操作中に解凍や再圧縮は行われません。

このシステムは、Oracle Solaris の以前のリリースを実行中のシステムなどの、zfs send –w compress オプションを持たないソースからのデータ転送を引き続き受信できます。この場合はデフォルトの動作が適用され、すなわち圧縮されたデータブロックは、ターゲットシステムに転送される前にまず解凍されます。転送が完了すると、ブロックは受信側システムで再圧縮されます。詳細は、使用例 41, raw 転送を使用して ZFS データを送信するを参照してください。

さらに、このリリースでは ZFS データの転送を再開する機能が組み込まれています。特に、ネットワーク障害またはシステム障害が原因で大量の ZFS データの転送が中断されることがあります。すべてのデータを再送信しなければならない事態を避けるため、zfs send および zfs receive コマンドに、ZFS データの送信を再開するための –C オプションを付けて実行できます。詳細は、再開可能レプリケーションの使用を参照してください。

ZFS データを保存する際は、次のバックアップ解決策に注意してください。

  • 企業向けバックアップ製品 –これらの製品には、次のような機能が備わっています。

    • ファイルごとのレプリケーション

    • バックアップメディアの検証

    • メディアの管理

  • ファイルシステムのスナップショットとスナップショットのロールバック - ファイルシステムのコピーを作成し、必要に応じて、以前のファイルシステムバージョンに戻します。

    スナップショットの作成およびロールバックの詳細については、ZFS スナップショットの概要を参照してください。

  • スナップショットの保存 – zfs send および zfs receive コマンドを使用すると、スナップショット間の増分変更を保存できますが、ファイルを個別に復元することはできません。ファイルシステムのスナップショット全体を復元する必要があります。

  • リモートレプリケーション – あるシステムから別のシステムにファイルシステムをコピーします。この処理は、WAN 経由でデバイスをミラー化する従来のボリューム管理製品とは異なります。特殊な構成やハードウェアは必要ありません。zfs send および zfs receive コマンドを使用して ZFS ファイルシステムをレプリケートすると、ファイルシステムを別のシステムのストレージプール上に再作成し、その新しく作成したプールに同じファイルシステムデータを格納しながら、RAID-Z などの別の構成レベルを指定できます。

  • アーカイブユーティリティー - tar、cpio、pax、サードパーティーバックアップ製品などのアーカイブユーティリティーを使って ZFS データを保存します。現時点では、tar と cpio では NFSv4 方式の ACL を正しく変換できますが、pax では変換できません。

ほかのバックアップ製品を使用して ZFS データを保存する

zfs send および zfs receive コマンド以外に、tar や cpio コマンドなどのアーカイブユーティリティーを使用して、ZFS ファイルを保存することもできます。これらのユーティリティーは、ZFS ファイル属性と ACL を保存して復元します。tar コマンドと cpio コマンドの適切なオプションを確認してください。

ZFS スナップショットストリームのタイプ

zfs send コマンドを使用して、1 つ以上のスナップショットのストリームを作成できます。続いて、zfs receive コマンドを使用することにより、このスナップショットストリームを使用して、ZFS ファイルシステムまたはボリュームを再作成できます。

スナップショットストリームを作成する際に使用された zfs send オプションによって、生成されるストリーム形式のタイプが決まります。

  • 完全なストリーム – データセットが作成された時間から指定されたスナップショットまで、すべてのデータセットの内容から構成されます。

    zfs send コマンドで生成されたデフォルトのストリームが完全なストリームです。これには、1 つのファイルシステムまたはボリュームから指定されたスナップショットまで含まれます。ストリームには、コマンドで指定されたスナップショット以外のスナップショットは含まれません。

  • 増分ストリーム – あるスナップショットと別のスナップショットの差から構成されます。

ストリームパッケージとは、1 つ以上の完全ストリームまたは増分ストリームを含むストリームタイプです。ストリームパッケージのタイプには、次のものがあります。

  • レプリケーションストリームパッケージ - 指定したデータセットとその子孫で構成されます。すべての中間スナップショットを含みます。クローンの作成元であるデータセットがコマンド行で指定されたスナップショットの子孫でない場合は、この作成元のデータセットがストリームパッケージに含まれません。ストリームを受信するには、元のデータセットが受信先のストレージプールに存在する必要があります。


    注 -  自己完結型のレプリケーションストリームは、外部の依存関係を持ちません。次に示す自己完結型のレプリケーションストリームに関するセクションを参照してください。

    次に示すデータセットとそれらの作成元の一覧が、表示される順序で作成されたと仮定します。

    NAME                    ORIGIN
    pool/a                  -
    pool/a/1                -
    pool/a/1@clone          -
    pool/b                  -
    pool/b/1                pool/a/1@clone
    pool/b/1@clone2         -
    pool/b/2                pool/b/1@clone2
    pool/b@pre-send         -
    pool/b/1@pre-send       -
    pool/b/2@pre-send       -
    pool/b@send             -
    pool/b/1@send           -
    pool/b/2@send           -

    次の構文を使用して、レプリケーションストリームパッケージが作成されたと仮定します。

    $ zfs send -R pool/b@send ....

    このパッケージは、次の完全ストリームおよび増分ストリームで構成されます。

    TYPE    SNAPSHOT                INCREMENTAL FROM
    full    pool/b@pre-send         -
    incr    pool/b@send             pool/b@pre-send
    incr    pool/b/1@clone2         pool/a/1@clone
    incr    pool/b/1@pre-send       pool/b/1@clone2
    incr    pool/b/1@send           pool/b/1@send
    incr    pool/b/2@pre-send       pool/b/1@clone2
    incr    pool/b/2@send           pool/b/2@pre-send

    この出力では、レプリケーションストリームパッケージに pool/a/1@clone スナップショットが含まれていません。したがって、このレプリケーションストリームパッケージは、すでに pool/a/1@clone スナップショットがあるプールでのみ受信できます。

  • 自己完結型のレプリケーションストリームパッケージ - このタイプのパッケージは、ストリームパッケージに含まれないどのデータセットにも依存しません。レプリケーションストリームパッケージを作成するには、次の例のような構文を使用します。

    $ zfs send -Rc pool/b@send ...

    このパッケージ例は、次の完全ストリームおよび増分ストリームで構成されます。

    TYPE    SNAPSHOT             INCREMENTAL FROM 
    full    pool/b@pre-send      - 
    full    pool/b/1@clone2      - 
    incr    pool/b@send          pool/b@pre-send
    incr    pool/b/1@pre-send    pool/b/1@clone2 
    incr    pool/b/1@send        pool/b/1@send 
    incr    pool/b/2@pre-send    pool/b/1@clone2 
    incr    pool/b/2@send        pool/b/2@pre-send 
    

    非自己完結型のレプリケーションストリームと比較すると、この自己完結型のレプリケーションストリームは、pool/b/1@clone2 スナップショットの統合型の完全なストリームを持っていることに注意してください。このスナップショットは、データとしてデータセットに統合されたクローンの元のビットを持つ統合型データセットであり、clone2 は別の作成元を持つ完全なクローンではなくなりました。これにより、外部依存関係を持たない pool/b/1 スナップショットを受け取ることができます。

  • 再帰的ストリームパッケージ – 指定したデータセットとその子孫で構成されます。複製ストリームパッケージとは異なり、ストリームに含まれる複製されたデータセットの複製元でないかぎり、中間スナップショットは含まれません。デフォルトでは、データセットの作成元がコマンドで指定されたスナップショットの子孫でない場合の動作は、レプリケーションストリームと同様です。自己完結型の再帰的ストリームは、外部の依存関係を持たないことに注意してください。


    注 -  自己完結型の再帰的ストリームは、外部の依存関係を持ちません。次に示す自己完結型の再帰的ストリームに関するセクションを参照してください。

    再帰的ストリームパッケージを作成するには、次の例のような構文を使用します。

    $ zfs send -r pool/b@send ... 

    このパッケージ例は、次の完全ストリームおよび増分ストリームで構成されます。

    TYPE    SNAPSHOT                INCREMENTAL FROM
    full    pool/b@send             -
    incr    pool/b/1@clone2         pool/a/1@clone
    incr    pool/b/1@send           pool/b/1@clone2
    incr    pool/b/2@send           pool/b/1@clone2

    この出力では、再帰的ストリームパッケージに pool/a/1@clone スナップショットが含まれていません。したがって、レプリケーションストリームパッケージと同様に、この再帰的ストリームパッケージは、すでに pool/a/1@clone スナップショットがあるプールでのみ受信できます。この動作は、前述の複製ストリームパッケージの場合と似ています。

  • 自己完結型の再帰的ストリームパッケージ - このタイプのパッケージは、ストリームパッケージに含まれないどのデータセットにも依存しません。再帰的ストリームパッケージを作成するには、次の例のような構文を使用します。

    $ zfs send -rc pool/b@send ...

    このパッケージ例は、次の完全ストリームおよび増分ストリームで構成されます。

    TYPE    SNAPSHOT                INCREMENTAL FROM
    full    pool/b@send             -
    full    pool/b/1@clone2         -
    incr    pool/b/1@send           pool/b/1@clone2 
    incr    pool/b/2@send           pool/b/1@clone2 
    

ZFS スナップショットを送信する

zfs send コマンドを使用して、スナップショットストリームのコピーを送信し、バックアップデータの格納に使用する別のプール (同じシステム上または別のシステム上にある) でそのスナップショットストリームを受信することができます。たとえば、異なるプール上のスナップショットストリームを同じシステムに送信するには、次の例のようなコマンドを使用します。

$ zfs send pool/dana@snap1 | zfs recv spool/ds01

ヒント  -  zfs receive コマンドの別名として、zfs recv を 使用できます。

スナップショットストリームを別のシステムに送信する場合は、zfs send の出力を ssh コマンドにパイプします。例:

sys1$ zfs send pool/dana@snap1 | ssh sys2 zfs recv pool/dana

完全なストリームを送信するときは、対象のファイルシステムが存在してはいけません。

多数のコピーを保管する必要がある場合は、gzip コマンドを使って ZFS スナップショットのストリーム表現を圧縮することを検討してください。例:

$ zfs send pool/fs@snap | gzip > backupfile.gz
使用例 40  増分 ZFS データを送信する

zfs send –i オプションを使用すれば、増分データを送信できます。例:

sys1$ zfs send -i pool/dana@snap1 system1/dana@snap2 | ssh system2 zfs recv pool/dana

最初の引数 (snap1) は以前のスナップショットで、2 番目の引数 (snap2) はそれよりあとのスナップショットです。この場合は、増分データの受信を正常に行うために pool/dana ファイルシステムがあらかじめ存在している必要があります。

増分ソース snap1 は、スナップショット名の最後のコンポーネントとして指定できます。その後、snap1 には @ 記号のあとの名前のみを指定する必要があります。これにより、snap2 と同じファイルシステムから作成されたものと見なされます。例:

sys1$ zfs send -i snap1 pool/dana@snap2 | ssh system2 zfs recv pool/dana

このショートカット構文は、増分構文と同等です。

異なるファイルシステム snapshot1 から増分ストリームを生成しようとすると、次のメッセージが表示されます。

cannot send 'pool/fs@name': not an earlier snapshot from the same fs

元の受信側ファイルシステム内のファイル情報にアクセスすると、増分スナップショットの受信操作が失敗して、次のようなメッセージが表示される可能性があります。

cannot receive incremental stream of pool/dana@snap2 into pool/dana:
most recent snapshot of pool/dana@snap2 does not match incremental source

元の受信側ファイルシステム内のファイル情報にアクセスする必要がある場合で、増分スナップショットを受信側ファイルシステムで受信する必要もある場合は、atime プロパティーを off に設定することを考慮してください。

多数のコピーを保管する必要がある場合は、gzip コマンドを使って ZFS スナップショットのストリーム表現を圧縮することを検討してください。例:

$ zfs send pool/fs@snap | gzip > backupfile.gz
使用例 41  raw 転送を使用して ZFS データを送信する

ストリームを raw モードで送信するには、–w compress オプションを使用します。

次の例では、ストリームの受信後に作成されたファイルシステムが元のものと同じであっても、特定のスナップショットについての raw 転送ストリームの方が小さくなることを示しています。最初に、pool/compressed-fs という名前のファイルシステムを作成し、データを入力します。

$ zfs create -o compression=gzip-6 pool/compressed-fs
$ cp /usr/dict/words /pool/compressed-fs/

次に、スナップショットを作成して圧縮率を確認します。比較のために 2 つのストリームを作成し、通常の転送と raw 転送の間のサイズの違いを確認し、rawstream ファイルの方が小さいことに注意してください。

$ zfs snapshot pool/compressed-fs@snap
$ zfs get compressratio pool/compressed-fs@snap
NAME                        PROPERTY       VALUE  SOURCE
pool/compressed-fs@snap  compressratio  2.80x  -
$ zfs send pool/compressed-fs@snap > /tmp/stream
$ zfs send -w compress pool/compressed-fs@snap > /tmp/rawstream
$ ls -lh /tmp/*stream
-rw-r--r--   1 root     root        100K Dec 23 18:23 /tmp/rawstream
-rw-r--r--   1 root     root        304K Dec 23 18:23 /tmp/stream

次に、raw 転送ストリームを新規ロケーションで受け取ります。次に、内容が同一であることを検証するために、新しいファイルシステムを元のファイルシステムと比較します。

$ zfs receive pool/rawrecv </tmp/rawstream
$ diff -r /pool/compressed-fs/ /pool/rawrecv/
#
使用例 42  Oracle Solaris 11.4.0 データセットから ZFS データを送信する

出力データストリーム内でレコード単位のチェックサムを使用する機能は、デフォルトで使用可能になっています。データを古いシステムに転送するには、nocheck 引数を使用してこの機能を無効にする必要があります。

$ zfs send -s nocheck pool/dana@snap1 | zfs recv pool/ds01

再開可能レプリケーションの使用

zfs receive を使用したデータの転送が中断された場合、プロセスを再開できます。たとえば、このコマンドで転送を開始したとします。

system1$ zfs send pool/dana@snap1 | ssh system2 zfs recv pool/dana

転送が中断された場合、データセットが不完全になります。次の一連のコマンドを使用して転送を再開できます。

system1$ ssh system2 zfs receive -C pool/dana | zfs send -C pool/dana@snap1 | \
     ssh system2 zfs receive pool/dana

不完全なデータセットを表示するには、zfs list –I コマンドを使用します。不完全な ZFS データセットを一覧表示するを参照してください。

ZFS スナップショットを受信する

ファイルシステムスナップショットを作成するときは、次のキーポイントに注意してください。

  • スナップショットとファイルシステムの両方が受信されます。

  • ファイルシステムとその子孫のすべてのファイルシステムがアンマウントされます。

  • ファイルシステムが受信されている間は、それらにアクセスできません。

  • ターゲットシステム上に、受信されるソースファイルシステムと同じ名前を持つファイルシステムが存在してはいけません。ターゲットシステム上にファイルシステム名がすでに存在する場合は、ファイルシステム名を変更してください。

例:

$ zfs send system1/gozer@0830 > /bkups/gozer.083006
$ zfs receive system1/gozer2@today < /bkups/gozer.083006
$ zfs rename system1/gozer system1/gozer.old
$ zfs rename system1/gozer2 system1/gozer

対象のファイルシステムに変更を加え、新たに増分スナップショットを送信する場合は、まず受信側のファイルシステムをロールバックする必要があります。

次のような例を考えます。まず、次のようにファイルシステムに変更を加えます。

sys2$ rm newsys/dana/file.1

次に、system1/dana@snap3 の増分送信を実行します。新しい増分スナップショットを受信したり、–F オプションを使用してロールバック手順を排除したりするには、まず受信側のファイルシステムをロールバックする必要があります。例:

sys1$ zfs send -i system1/dana@snap2 system1/dana@snap3 | ssh sys2 zfs recv -F newsys/dana

増分スナップショットを受信するときは、対象のファイルシステムが存在している必要があります。

ファイルシステムに変更を加えたあとで、新しい増分スナップショットを受信するために受信側のファイルシステムのロールバックを行わない場合、または –F オプションを使用する場合は、次の例のようなメッセージが表示されます。

sys1$ zfs send -i system1/dana@snap4 system1/dana@snap5 | ssh sys2 zfs recv newsys/dana
cannot receive: destination has been modified since most recent snapshot

–F オプションが正常に実行される前に、次の検査が行われます。

  • 最新のスナップショットが増分ソースと一致しない場合は、ロールバックも受信も完了せず、エラーメッセージが返される。

  • zfs receive コマンドで指定された増分ソースと一致しない異なるファイルシステムの名前を間違って指定した場合は、ロールバックも受信も完了せず、次のエラーメッセージが返される。

    cannot send 'pool/fs@name': not an earlier snapshot from the same fs

ZFS スナップショットストリームに異なるプロパティー値を適用する

特定のファイルシステムプロパティー値を含む ZFS スナップショットストリームを送信したあとに、スナップショットストリームの受信時に別のローカルプロパティー値を指定するか、またはスナップショットストリームの受信時に元のプロパティー値が使用されるように指定すると、元のファイルシステムを再作成できます。さらに、スナップショットストリームを受信したときにファイルシステムプロパティーを無効にすることもできます。

  • ローカルのプロパティー値を受信した値 (存在する場合) に戻すには、zfs inherit –S コマンドを使用します。プロパティーに受信した値がない場合、–S オプションの動作は、オプションを付けなかった場合と同じです。プロパティーに受信値が存在する場合、zfs inherit コマンドは、zfs inherit –S コマンドの発行によって継承値が受信値に戻されるまでの間、受信値を継承値でマスクします。

  • zfs get で表示される列を指定できます。新しい非デフォルトの RECEIVED 列を含めるには、–o オプションを使用します。RECEIVED を含むすべての列を含めるには、–o all オプションを使用します。

  • –R オプションを使用せずにプロパティーを送信ストリームに含めるには、–p オプションを使用します。

  • 送信されたスナップショット名の最後の要素を使用して新しいスナップショット名を指定するには、–e オプションを使用します。

    次の例では、poolA/bee/cee@1 スナップショットを poolD/eee ファイルシステムに送信し、スナップショット名の最後の要素 (cee@1) のみを使用して、受信側のファイルシステムおよびスナップショットを作成します。

    $ zfs list -rt all poolA
    NAME              USED  AVAIL  REFER  MOUNTPOINT
    poolA             134K   134G    23K  /poolA
    poolA/bee          44K   134G    23K  /poolA/bee
    poolA/bee/cee      21K   134G    21K  /poolA/bee/cee
    poolA/bee/cee@1      0      -    21K  -
    $ zfs send -R poolA/bee/cee@1 | zfs receive -e poolD/eee
    $ zfs list -rt all poolD
    NAME              USED  AVAIL  REFER  MOUNTPOINT
    poolD             134K   134G    23K  /poolD
    poolD/eee          44K   134G    23K  /poolD/eee
    poolD/eee/cee      21K   134G    21K  /poolD/eee/cee
    poolD/eee/cee@1      0      -    21K  -

元のプロパティー値の保持

場合によっては、送信ストリーム内のファイルシステムプロパティーが受信側のファイルシステムに該当しなかったり、mountpoint プロパティー値などのローカルファイルシステムプロパティーが復元を妨害したりすることがあります。

たとえば、system1/data というファイルシステムで compression プロパティーが無効になっていると仮定します。system1/data ファイルシステムのスナップショットが、プロパティー (–p オプション) を指定してバックアッププールに送信され、compression プロパティーが有効な状態で受信されます。

$ zfs get compression system1/data
NAME          PROPERTY     VALUE     SOURCE
system1/data  compression  off       default
$ zfs snapshot system1/data@snap1
$ zfs send -p system1/data@snap1 | zfs recv -o compression=on -d bpool
$ zfs get -o all compression bpool/data
NAME        PROPERTY     VALUE     RECEIVED  SOURCE
bpool/data  compression  on        off       local

この例では、スナップショットが bpool に受信されたとき、compression プロパティーは有効になります。したがって、bpool/data では、compression 値は on です。

このスナップショットストリームが復元目的で restorepool という新規プールに送信される場合、元のスナップショットプロパティーをすべて保持することが必要なことがあります。この場合、元のスナップショットプロパティーを復元するために zfs send –b オプションを使用します。例:

$ zfs send -b bpool/data@snap1 | zfs recv -d restorepool
$ zfs get -o all compression restorepool/data
NAME              PROPERTY     VALUE     RECEIVED  SOURCE
restorepool/data  compression  off       off       received 

この例では、compression 値は off です。これは、元の system1/data ファイルシステムからのスナップショット圧縮値を表します。

元のプロパティー値を無効にする

スナップショットストリーム内にローカルファイルシステムのプロパティー値があり、スナップショットストリームを受信したときにこのプロパティーを無効にする場合、zfs receive –x オプションを使用します。たとえば次のコマンドでは、すべてのファイルシステムプロパティーを予約した状態で home ディレクトリファイルシステムの再帰的なスナップショットストリームをバックアッププールに送信しますが、割り当て制限プロパティー値は設定されません。

$ zfs send -R system1/home@snap1 | zfs recv -x quota bpool/home
$ zfs get -r quota bpool/home
NAME                   PROPERTY  VALUE  SOURCE
bpool/home             quota     none   local
bpool/home@snap1       quota     -      -
bpool/home/lori        quota     none   default
bpool/home/lori@snap1  quota     -      -
bpool/home/mark        quota     none   default
bpool/home/mark@snap1  quota     -      -

再帰的なスナップショットが –x オプションで受信されなかった場合、割り当て制限プロパティーは受信側ファイルシステム内で設定されます。

$ zfs send -R system1/home@snap1 | zfs recv bpool/home
$ zfs get -r quota bpool/home
NAME                   PROPERTY  VALUE  SOURCE
bpool/home             quota     none   received
bpool/home@snap1       quota     -      -
bpool/home/lori        quota     10G    received
bpool/home/lori@snap1  quota     -      -
bpool/home/mark        quota     10G    received
bpool/home/mark@snap1  quota     -      -

複雑な ZFS スナップショットストリームを送信および受信する

このセクションでは、–I および –R オプションを zfs send コマンドに使用して、より複雑なスナップショットストリームを送受信する方法について説明します。

    複雑な ZFS スナップショットストリームを送受信するときは、次の点に留意してください。

  • 1 つのスナップショットのすべての増分ストリームを累積スナップショットに送信するには、–I オプションを使用します。このオプションを使用すると、元のスナップショットからの増分ストリームを送信して、クローンを作成することもできます。増分ストリームを受け入れるには、元のスナップショットが受信側にすでに存在している必要があります。

  • すべての子孫ファイルシステムのレプリケーションストリームを送信するには、–R オプションを使用します。レプリケーションストリームが受信されると、すべてのプロパティー、スナップショット、子孫ファイルシステム、およびクローンが保持されます。

  • –c オプションを付けずに zfs send –r コマンドまたは zfs send –R コマンドを使用してパッケージストリームを送信すると、一部の状況ではクローンの origin が省略されます。詳細は、ZFS スナップショットストリームのタイプを参照してください。

  • 増分複製ストリームを送信するには、両方のオプションを使用します。

    • プロパティーの変更は保持され、スナップショットおよびファイルシステムの rename 操作と destroy 操作も保持されます。

    • レプリケーションストリームの受信時に –F オプションが指定されていない場合、データセットの destroy 操作は無視されます。したがって、必要に応じて、受信操作を取り消して、ファイルシステムを以前の状態に復元できます。

    • 増分ストリームを送信するときに –I を使用すると、snapA と snapD 間のすべてのスナップショットが送信されます。–i を使用すると、(すべての子孫の) snapD スナップショットのみが送信されます。

  • このようなタイプの zfs send ストリームを受信するには、そのストリームを送信できるソフトウェアバージョンが受信側のシステムで動作している必要があります。ストリームのバージョンは 1 増やされています。

使用例 43  複雑な ZFS スナップショットストリームを送信および受信する

–I オプションを使用すると、増分スナップショットの A グループを結合して 1 つのスナップショットを作成できます。例:

$ zfs send -I pool/fs@snapA pool/fs@snapD > /snaps/fs@all-I

次に、増分スナップショット snapB、snapC、および snapD を削除します。

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

–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 ファイルシステムおよびすべての子孫ファイルシステムを指定されたスナップショットまでレプリケートするには、–R オプションを使用します。このストリームが受信されると、すべてのプロパティー、スナップショット、子孫ファイルシステム、およびクローンが保持されます。

次の例では、ユーザーファイルシステムのスナップショットを作成します。すべてのユーザースナップショットから 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  -

次の例では、–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 system1/cindy@today | ssh newsys zfs recv sandbox/restfs@today

このコマンドは、system1/cindy@today スナップショットのデータを送信し、そのデータを sandbox/restfs ファイルシステムに受信します。このコマンドは、restfs@today スナップショットを newsys システム上にも作成します。この例のユーザーは、リモートシステム上で ssh を使用するように構成されています。