ナビゲーションリンクをスキップ | |
印刷ビューの終了 | |
Oracle Solaris 11.1 の管理: ZFS ファイルシステム Oracle Solaris 11.1 Information Library (日本語) |
1. Oracle Solaris ZFS ファイルシステム (概要)
3. Oracle Solaris ZFS ストレージプールの管理
5. Oracle Solaris ZFS ファイルシステムの管理
6. Oracle Solaris ZFS のスナップショットとクローンの操作
ZFS スナップショットストリームに異なるプロパティー値を適用する
複雑な ZFS スナップショットストリームを送信および受信する
7. ACL および属性を使用した Oracle Solaris ZFS ファイルの保護
9. Oracle Solaris ZFS の高度なトピック
10. Oracle Solaris ZFS のトラブルシューティングとプールの回復
12. 推奨の Oracle Solaris ZFS プラクティス
「スナップショット」とは、ファイルシステムまたはボリュームの読み取り専用コピーのことです。スナップショットはほとんど瞬間的に作成することができ、最初はプール内で追加のディスク領域を消費しません。しかし、アクティブなデータセット内のデータが変化していくにつれて、スナップショットは古いデータを引き続き参照し、ディスク容量を解放しないため、ディスク領域を消費します。
ZFS スナップショットには次の特長があります。
システムのリブート後も残ります。
スナップショットの理論上の最大数は、264 です。
スナップショットは個別のバッキングストアを使用しません。スナップショットは、作成元のファイルシステムまたはボリュームと同じストレージプールのディスク領域を直接使用します。
再帰的なスナップショットは、1 つの原子動作としてすばやく作成されます。スナップショットは、まとめて (一度にすべて) 作成されるか、まったく作成されないかのどちらかです。原子スナップショット動作の利点は、子孫ファイルシステムにまたがる場合でも、常にある一貫した時間のスナップショットデータが取得されることです。
ボリュームのスナップショットに直接アクセスすることはできませんが、それらの複製、バックアップ、ロールバックなどを行うことはできます。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 receive によって意図せず破棄されてしまう場合、スナップショット保持機能の使用を検討することができます。
スナップショットを「保持」すると、そのスナップショットは破棄されなくなります。また、この機能と zfs destroy -d コマンドを使用することにより、最後のクローンの消去を保留しながら、クローンが存在するスナップショットを削除できます。個々のスナップショットには、初期値が 0 のユーザー参照カウントが関連付けられます。このカウントは、スナップショットの保持を設定するたびに 1 増加し、保持を解除するたびに 1 減少します。
以前の Oracle Solaris リリースでは、スナップショットを破棄するには、スナップショットにクローンが存在しない状態で zfs destroy コマンドを使用する必要がありました。この Oracle Solaris リリースでは、さらにスナップショットのユーザー参照カウントが 0 である必要があります。
1 つのスナップショットまたはスナップショットの集合を保持できます。たとえば次の構文は、保持タグ keep を tank/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 destroy -d コマンドを使ってスナップショットの遅延破棄が予約されている場合、defer_destroy プロパティーがオンになります。それ以外の場合、このプロパティーはオフです。
userrefs プロパティーの値は、このスナップショットに設定されている保持の数に設定されます。この数のことをユーザー参照カウントとも呼びます。
スナップショットの名前を変更することはできますが、名前を変更するときはそれらが作成された同じプールとデータセットの中で行う必要があります。次に例を示します。
# 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 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
スナップショットを作成したときは、そのディスク領域は最初はスナップショットとファイルシステムの間で共有されます。それまでに作成したスナップショットと領域が共有されることもあります。ファイルシステムが変化していくにつれて、それまで共有されていたディスク領域がスナップショット固有になり、スナップショットの 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 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 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 コマンドによって識別されるファイルまたはディレクトリの変更を要約したものです。
|
詳細は、zfs(1M) を参照してください。