JavaScript is required to for searching.
ナビゲーションリンクをスキップ
印刷ビューの終了
Oracle Solaris 11.1 の管理: ZFS ファイルシステム     Oracle Solaris 11.1 Information Library (日本語)
search filter icon
search icon

ドキュメントの情報

はじめに

1.  Oracle Solaris ZFS ファイルシステム (概要)

2.  Oracle Solaris ZFS 入門

3.  Oracle Solaris ZFS ストレージプールの管理

4.  ZFS ルートプールのコンポーネントの管理

5.  Oracle Solaris ZFS ファイルシステムの管理

6.  Oracle Solaris ZFS のスナップショットとクローンの操作

ZFS スナップショットの概要

ZFS スナップショットを作成および破棄する

ZFS スナップショットの保持

ZFS スナップショットの名前を変更する

ZFS スナップショットを表示してアクセスする

ZFS スナップショットのディスク領域の計上

ZFS スナップショットにロールバックする

ZFS スナップショットの相違点の識別 (zfs diff)

ZFS クローンの概要

ZFS クローンを作成する

ZFS クローンを破棄する

ZFS ファイルシステムを ZFS クローンで置き換える

ZFS データを送信および受信する

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

ZFS スナップショットストリームを特定する

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

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

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

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

ZFS データのリモート複製

7.  ACL および属性を使用した Oracle Solaris ZFS ファイルの保護

8.  Oracle Solaris ZFS 委任管理

9.  Oracle Solaris ZFS の高度なトピック

10.  Oracle Solaris ZFS のトラブルシューティングとプールの回復

11.  スナップショットのアーカイブとルートプールの回復

12.  推奨の Oracle Solaris ZFS プラクティス

A.  Oracle Solaris ZFS バージョンの説明

索引

ZFS スナップショットの概要

スナップショット」とは、ファイルシステムまたはボリュームの読み取り専用コピーのことです。スナップショットはほとんど瞬間的に作成することができ、最初はプール内で追加のディスク領域を消費しません。しかし、アクティブなデータセット内のデータが変化していくにつれて、スナップショットは古いデータを引き続き参照し、ディスク容量を解放しないため、ディスク領域を消費します。

ZFS スナップショットには次の特長があります。

ボリュームのスナップショットに直接アクセスすることはできませんが、それらの複製、バックアップ、ロールバックなどを行うことはできます。ZFS スナップショットのバックアップの詳細については、「ZFS データを送信および受信する」を参照してください。

ZFS スナップショットを作成および破棄する

スナップショットは、zfs snapshot コマンドまたは zfs snap コマンドを使って作成します。引数として、作成するスナップショットの名前だけを指定できます。スナップショット名は次のように指定します。

filesystem@snapname
volume@snapname

スナップショット名は、「ZFS コンポーネントに名前を付けるときの規則」の命名要件に従って付ける必要があります。

次の例では、tank/home/cindy のスナップショットが friday という名前で作成されます。

# zfs snapshot tank/home/cindy@friday

すべての子孫ファイルシステムのスナップショットを作成するには、-r オプションを使用します。例:

# zfs snapshot -r tank/home@snap1
# zfs list -t snapshot -r tank/home
NAME                   USED  AVAIL  REFER  MOUNTPOINT
tank/home@snap1           0      -  2.11G  -
tank/home/cindy@snap1     0      -   115M  -
tank/home/lori@snap1      0      -  2.00G  -
tank/home/mark@snap1      0      -  2.00G  -
tank/home/tim@snap1       0      -  57.3M  -

スナップショットには、変更できるプロパティーはありません。また、データセットのプロパティーをスナップショットに適用することもできません。例:

# zfs set compression=on tank/home/cindy@friday
cannot set property for 'tank/home/cindy@friday': 
this property can not be modified for snapshots

スナップショットを破棄するには、zfs destroy コマンドを使用します。例:

# zfs destroy tank/home/cindy@friday

データセットのスナップショットが存在する場合、そのデータセットを破棄することはできません。例:

# zfs destroy tank/home/cindy
cannot destroy 'tank/home/cindy': filesystem has children
use '-r' to destroy the following datasets:
tank/home/cindy@tuesday
tank/home/cindy@wednesday
tank/home/cindy@thursday

また、スナップショットからクローンが作成されている場合は、スナップショットを破棄する前にクローンを破棄する必要があります。

destroy サブコマンドの詳細については、「ZFS ファイルシステムを破棄する」を参照してください。

ZFS スナップショットの保持

異なる自動スナップショットポリシーを実装しており、送信側にもう存在しないという理由で古いスナップショットが zfs receive によって意図せず破棄されてしまう場合、スナップショット保持機能の使用を検討することができます。

スナップショットを「保持」すると、そのスナップショットは破棄されなくなります。また、この機能と zfs destroy -d コマンドを使用することにより、最後のクローンの消去を保留しながら、クローンが存在するスナップショットを削除できます。個々のスナップショットには、初期値が 0 のユーザー参照カウントが関連付けられます。このカウントは、スナップショットの保持を設定するたびに 1 増加し、保持を解除するたびに 1 減少します。

以前の Oracle Solaris リリースでは、スナップショットを破棄するには、スナップショットにクローンが存在しない状態で zfs destroy コマンドを使用する必要がありました。この Oracle Solaris リリースでは、さらにスナップショットのユーザー参照カウントが 0 である必要があります。

1 つのスナップショットまたはスナップショットの集合を保持できます。たとえば次の構文は、保持タグ keeptank/home/cindy/snap@1 に付与します。

# zfs hold keep tank/home/cindy@snap1

-r オプションを使用すると、すべての子孫ファイルシステムのスナップショットを再帰的に保持できます。例:

# zfs snapshot -r tank/home@now
# zfs hold -r keep tank/home@now

この構文は、単一の参照 keep を特定のスナップショットまたはスナップショットの集合に追加します。個々のスナップショットには独自のタグ名前空間があり、その空間内で保持タグが一意である必要があります。スナップショットに保持が設定されている場合、保持されたそのスナップショットを zfs destroy コマンドを使って破棄しようとしても失敗します。例:

# zfs destroy tank/home/cindy@snap1
cannot destroy 'tank/home/cindy@snap1': dataset is busy

保持されたスナップショットを破棄するには、-d オプションを使用します。例:

# zfs destroy -d tank/home/cindy@snap1

保持されたスナップショットの一覧を表示するには、zfs holds コマンドを使用します。例:

# zfs holds tank/home@now
NAME           TAG   TIMESTAMP                 
tank/home@now  keep  Fri Aug  3 15:15:53 2012  
# zfs holds -r tank/home@now
NAME                 TAG   TIMESTAMP                 
tank/home/cindy@now  keep  Fri Aug  3 15:15:53 2012  
tank/home/lori@now   keep  Fri Aug  3 15:15:53 2012  
tank/home/mark@now   keep  Fri Aug  3 15:15:53 2012  
tank/home/tim@now    keep  Fri Aug  3 15:15:53 2012  
tank/home@now        keep  Fri Aug  3 15:15:53 2012  

zfs release コマンドを使用すると、保持されたスナップショットまたはスナップショットの集合を解放することができます。例:

# zfs release -r keep tank/home@now

スナップショットが解放されたら、zfs destroy コマンドを使用してスナップショットを破棄できます。例:

# zfs destroy -r tank/home@now

スナップショットの保持情報を示す 2 つの新しいプロパティーがあります。

ZFS スナップショットの名前を変更する

スナップショットの名前を変更することはできますが、名前を変更するときはそれらが作成された同じプールとデータセットの中で行う必要があります。次に例を示します。

# zfs rename tank/home/cindy@snap1 tank/home/cindy@today

また、次のショートカット構文は前の構文と同等です。

# zfs rename tank/home/cindy@snap1 today

次のようなスナップショットの名前変更操作はサポートされていません。ターゲットのプールとファイルシステムの名前が、スナップショットの作成されたプールとファイルシステムと異なるためです。

# zfs rename tank/home/cindy@today pool/home/cindy@saturday
cannot rename to 'pool/home/cindy@today': snapshots must be part of same 
dataset

zfs rename -r コマンドを使用すると、スナップショットの名前を再帰的に変更することができます。例:

# zfs list -t snapshot -r users/home
NAME                        USED  AVAIL  REFER  MOUNTPOINT
users/home@now             23.5K      -  35.5K  -
users/home@yesterday           0      -    38K  -
users/home/lori@yesterday      0      -  2.00G  -
users/home/mark@yesterday      0      -  1.00G  -
users/home/neil@yesterday      0      -  2.00G  -
# zfs rename -r users/home@yesterday @2daysago
# zfs list -t snapshot -r users/home
NAME                       USED  AVAIL  REFER  MOUNTPOINT
users/home@now            23.5K      -  35.5K  -
users/home@2daysago           0      -    38K  -
users/home/lori@2daysago      0      -  2.00G  -
users/home/mark@2daysago      0      -  1.00G  -
users/home/neil@2daysago      0      -  2.00G  -

ZFS スナップショットを表示してアクセスする

デフォルトでは、スナップショットはすでに zfs list 出力には表示されません。スナップショット情報を表示するには、zfs list -t snapshot コマンドを使用する必要があります。あるいは、listsnapshots プールプロパティーを有効にします。例:

# zpool get listsnapshots tank
NAME  PROPERTY       VALUE      SOURCE
tank  listsnapshots  off        default
# zpool set listsnapshots=on tank
# zpool get listsnapshots tank
NAME  PROPERTY       VALUE      SOURCE
tank  listsnapshots  on         local

ファイルシステムのスナップショットには、ルートの .zfs/snapshot ディレクトリからアクセスできます。たとえば、tank/home/cindy/home/cindy にマウントされている場合は、tank/home/cindy@thursday スナップショットのデータには、/home/cindy/.zfs/snapshot/thursday ディレクトリからアクセスできます。

# ls /tank/home/cindy/.zfs/snapshot
thursday   tuesday    wednesday

スナップショットの一覧は次の方法で表示できます。

# zfs list -t snapshot -r tank/home
NAME                       USED  AVAIL  REFER  MOUNTPOINT
tank/home/cindy@tuesday     45K      -  2.11G  -
tank/home/cindy@wednesday   45K      -  2.11G  -
tank/home/cindy@thursday      0      -  2.17G  -

特定のファイルシステムのために作成したスナップショットの一覧は、次の方法で表示できます。

# zfs list -r -t snapshot -o name,creation tank/home
NAME                       CREATION
tank/home/cindy@tuesday    Fri Aug  3 15:18 2012
tank/home/cindy@wednesday  Fri Aug  3 15:19 2012
tank/home/cindy@thursday   Fri Aug  3 15:19 2012
tank/home/lori@today       Fri Aug  3 15:24 2012
tank/home/mark@today       Fri Aug  3 15:24 2012

ZFS スナップショットのディスク領域の計上

スナップショットを作成したときは、そのディスク領域は最初はスナップショットとファイルシステムの間で共有されます。それまでに作成したスナップショットと領域が共有されることもあります。ファイルシステムが変化していくにつれて、それまで共有されていたディスク領域がスナップショット固有になり、スナップショットの used プロパティーに計上されます。また、スナップショットを削除すると、ほかのスナップショットに固有の (および使用される) ディスク容量を増やすことができます。

スナップショット領域の referenced プロパティーの値は、スナップショットを作成したときのファイルシステムのプロパティーと同じです。

used プロパティーの値がどのように消費されているかについて、さらに詳細な情報を確認することができます。新しい読み取り専用ファイルシステムプロパティーは、クローン、ファイルシステム、およびボリュームに関するディスク領域使用状況を示します。例:

$ zfs list -o space -r rpool
NAME                      AVAIL   USED  USEDSNAP  USEDDS  USEDREFRESERV  USEDCHILD
rpool                      124G  9.57G         0    302K              0      9.57G
rpool/ROOT                 124G  3.38G         0     31K              0      3.38G
rpool/ROOT/solaris         124G  20.5K         0       0              0      20.5K
rpool/ROOT/solaris/var     124G  20.5K         0   20.5K              0          0
rpool/ROOT/solaris-1       124G  3.38G     66.3M   3.14G              0       184M
rpool/ROOT/solaris-1/var   124G   184M     49.9M    134M              0          0
rpool/VARSHARE             124G  39.5K         0   39.5K              0          0
rpool/dump                 124G  4.12G         0   4.00G           129M          0
rpool/export               124G    63K         0     32K              0        31K
rpool/export/home          124G    31K         0     31K              0          0
rpool/swap                 124G  2.06G         0   2.00G          64.7M          0

これらのプロパティーについては、表 5-1 を参照してください。

ZFS スナップショットにロールバックする

zfs rollback コマンドを使用すると、特定のスナップショットが作成された時点よりもあとにファイルシステムに対して行われたすべての変更を破棄できます。ファイルシステムは、そのスナップショットが作成されたときの状態に戻ります。デフォルトでは、このコマンドを使って、最新のスナップショット以外のスナップショットにロールバックすることはできません。

それより前のスナップショットにロールバックするには、中間にあるスナップショットをすべて破棄する必要があります。-r オプションを指定すれば、古いスナップショットを破棄できます。

中間にあるスナップショットのクローンが存在する場合は、-R オプションを指定してクローンも破棄する必要があります。


注 - ロールバックするファイルシステムが現在マウントされている場合は、アンマウントされてから再度マウントされます。ファイルシステムをアンマウントできない場合は、ロールバックに失敗します。必要に応じて -f オプションを指定すると、ファイルシステムが強制的にアンマウントされます。


次の例では、tank/home/cindy ファイルシステムが tuesday スナップショットにロールバックされます:

# zfs rollback tank/home/cindy@tuesday
cannot rollback to 'tank/home/cindy@tuesday': more recent snapshots exist
use '-r' to force deletion of the following snapshots:
tank/home/cindy@wednesday
tank/home/cindy@thursday
# zfs rollback -r tank/home/cindy@tuesday

この例では、スナップショット wednesday および thursday が破棄されます。これらよりも古いスナップショット tuesday にロールバックされるためです。

# zfs list -r -t snapshot -o name,creation tank/home/cindy
NAME                     CREATION
tank/home/cindy@tuesday  Fri Aug  3 15:18 2012

ZFS スナップショットの相違点の識別 (zfs diff)

zfs diff コマンドを使用して、ZFS スナップショットの相違点を判別できます。

たとえば、次の 2 つのスナップショットが作成されるものとします。

$ ls /tank/home/tim
fileA
$ zfs snapshot tank/home/tim@snap1
$ ls /tank/home/tim
fileA  fileB
$ zfs snapshot tank/home/tim@snap2

たとえば、2 つのスナップショットの相違点を識別するには、次のような構文を使用します。

$ zfs diff tank/home/tim@snap1 tank/home/tim@snap2
M       /tank/home/tim/
+       /tank/home/tim/fileB

出力で、M はディレクトリが変更されたことを示します。+ は、後者のスナップショットに fileB が存在していることを示します。

次の出力の M は、スナップショットのファイルの名前が変更されたことを示しています。

$ mv /tank/cindy/fileB /tank/cindy/fileC
$ zfs snapshot tank/cindy@snap2
$ zfs diff tank/cindy@snap1 tank/cindy@snap2
M       /tank/cindy/
R       /tank/cindy/fileB -> /tank/cindy/fileC

次の表は、zfs diff コマンドによって識別されるファイルまたはディレクトリの変更を要約したものです。

ファイルまたはディレクトリの変更
識別子
ファイルまたはディレクトリが変更されたかファイルまたはディレクトリのリンクが変更されました
M
ファイルまたはディレクトリは古いスナップショットに存在するが、最近のスナップショットには存在しません
ファイルまたはディレクトリは最近のスナップショットに存在するが、古いスナップショットには存在しません
+
ファイルまたはディレクトリの名前が変更されました
R

詳細は、zfs(1M) を参照してください。