ストレージ(ZFS)
ストレージ(ZFS)
Oracle Solaris 11では、ストレージにZFSファイルシステムが採用されています。
ZFSは以下の特長を備えています。
- 大容量
- 128bitファイルシステムのため、事実上ファイルサイズに制限はありません。
- 高機能
- スナップショットやクローン機能、クォータの設定など、非常に高機能です。
- 完全・安全
- ZFSは非常に高い信頼性を確保しており、ファイルシステムが破壊されることはほぼありません。
ZFSの基本的な利用方法
ここでは、ZFSの基本的な利用方法についてご案内します。
ZFSの一覧を表示する
システムに存在するZFSの一覧を表示します。
# zfs list
出荷時のZFSは以下のようになっています。
NAME | MOUNTPOINT |
---|---|
rpool | /rpool |
rpool/ROOT | legacy |
rpool/ROOT/solaris | / |
rpool/ROOT/solaris/var | /var |
rpool/VARSHARE | /var/share |
rpool/export | /export |
rpool/export/home | /export/home |
rpool/export/home/admin | /export/home/admin |
標準で出力されるプロパティの意味は以下です。
NAME | ZFSのデータセット名 |
---|---|
USED | データセットとその階層下(子)のデータセットが利用している容量 |
AVAIL | データセットとその階層下(子)のデータセットが利用可能な容量 |
REFER | そのデータセットが利用可能なデータ量 |
MOUNTPOINT | そのデータセットのマウントポイント |
- 容量の表示について
- Solaris 11 x64/VPS クラウドでは、ZFS Compressionが標準で有効なため、ファイル容量とは異なった値が表示されます。
主なオプション
- -r [ filesystem | volume | snapshot | path ]
- 指定したデータセットを含む子のデータセットを再帰的に表示します。
- -o [ property1,property2,... ]
- 表示するプロパティを指定します。プロパティは、カンマで区切ることにより複数指定できます。
- -t [ type ]
- 表示するタイプを指定します。タイプは以下を指定できます。
- filesystem
- snapshot
- volume
- all
- allを指定すると、すべてのタイプのデータセットを表示します。
- 表示するタイプを指定します。タイプは以下を指定できます。
利用例
rpool/export/home/admin以下のスナップショットから、name・usedプロパティを再帰的に表示します。
# zfs list -t snapshot -o name,used -r rpool/export/home/admin
ZFSを作成する
システムに新たなZFSファイルシステムを作成します。
# zfs create [ filesystem ]
[ filesystem ]には作成するファイルシステムを指定します。作成したファイルシステムは、上位の階層(親)から継承したmountpointプロパティに従い、自動的にマウントされます。
主なオプション
- -p
- 存在しない親データセットをすべて作成します。作成されたデータセットは、それぞれの親から継承したmountpointプロパティに従い、自動的にマウントされます。
- -o [ property=value ]
- データセット作成時にプロパティを設定します。このオプションは複数指定できます。
利用例
ファイルシステムrpool/export/test1/test2を親データセット「test1」を含めて作成し、容量を1GBに制限します。
# zfs create -p -o quota=1G rpool/export/test1/test2
- この場合、容量制限はrpool/export/test1/test2にのみ適用されます。
プロパティを設定する
データセットに対するプロパティを設定・変更します。
# zfs set [ property=value ] [ dataset ]
[ property=value ]には、設定・変更したプロパティ名と値を記述します。また、[ dataset ]には対象のデータセットを指定します。
主なオプション
- -r
- 子データセットに対し、プロパティを再帰的に適用します。
利用例
rpool/export/test1のマウントポイントを、子データセット「test2」を含めて/opt/test1に変更します。
# zfs set mountpoint=/opt/test1 rpool/export/test1
- -rオプションにより、rpool/expor/test1/test2のマウントポイントも/opt/test1/test2に変更されます。
プロパティを表示する
# zfs get [ all | property1,property2... ] [ dataset ]
[ all | property1,property2... ]には、すべてのプロパティを表す「all」か、表示したいプロパティ名を記述します。プロパティ名はカンマで区切ることにより、複数記述できます。
[ dataset ]には、対象のデータセットを指定します。指定しない場合は、すべてのデータセットが対象になります。
主なオプション
- -r
- 指定したデータセットの子データセットを再帰的に表示します。
利用例
rpool/export/test1以下のusedプロパティとavailableプロパティを、再帰的に表示します。
# zfs get -r used,available rpool/export/test1
スナップショットを作成する
スナップショットとは、ファイルシステム・ボリュームの読み取り専用コピーです。作成したスナップショットを利用することにより、以下のようなことができます。
- スナップショット内のファイルをコピーする
- スナップショットに存在する誤って削除してしまったファイルなどを取り出すことができます。
- ファイルシステムをロールバックする
- スナップショット作成時の状態に戻すことができます。
- クローンを作成する
- スナップショットを元にした、読み書き可能なクローンファイルシステムを作成することができます。
- データストリームの送信・受信
- スナップショットのデータストリームを生成し、標準出力に送信することができます。また、ファイルやシステムにリダイレクトすることもできます。
スナップショットは作成時には領域を消費せず、対象のデータセットのデータが変更されると、スナップショットの領域が消費されていきます。
スナップショットは以下のコマンドで作成します。
# zfs snapshot [ filesystem ]@[ snapname ]
[ filesystem ]にはスナップショットを作成するファイルシステムを指定します。また、@以降にスナップショット名として[ snapname ]を指定します。
主なオプション
- -r
- 子のデータセットに対するスナップショットも再帰的に作成します。
利用例
rpool/export/home以下のスナップショットを再帰的に作成します。
# zfs snapshot -r rpool/export/home@20130201-1500
スナップショットの保存場所について
スナップショットは、ファイルシステムのルートの.zfs/snapshotディレクトリに保存されます。
このディレクトリはデフォルトで不可視ですが、直接指定することにより参照が可能です。
利用例
/export/homeのスナップショット一覧を参照します。
# ls -l /export/home/.zfs/snapshot
また、以下のようにプロパティを変更することにより、可視化することが可能です。
# zfs set snapdir=visible [ filesystem ]
[ filesystem ]には可視化するZFSファイルシステムを指定します。
ロールバックする
データセットをスナップショット作成時の状態にロールバックすることができます。
# zfs rollback [ snapshot ]
snapshotには、ロールバックするスナップショットを指定します。-rオプションを指定しない場合、最新のスナップショット以外にロールバックすることはできません。
主なオプション
- -r
- 指定したスナップショット以降のスナップショットを再帰的に破棄します。
利用例
rpool/export/homeを、最新ではないスナップショットでロールバックします。
# zfs rollback -r rpool/export/home@20130131-1500
クローンを作成する
クローンとは、指定したスナップショットから作成される書き込みが可能なデータセットです。クローン作成時は領域を消費せず、変更された分が消費されていきます。
クローンを利用することにより、開発やテスト環境などで必要なファイルシステムを、使用領域を抑えながら作成することが可能です。
# zfs clone [ snapshot ] [ filesystem ]
- クローンに利用したスナップショットは、クローンが存在する限り破棄することができません。詳しくは「スナップショットを破棄する」をご参照ください。
主なオプション
- -p
- 存在しない親データセットをすべて作成します。作成されたデータセットは、それぞれの親から継承したmountpointプロパティに従い、自動的にマウントされます。
- -o [ property=value ]
- クローン作成時にプロパティを設定します。このオプションは複数指定できます。
利用例
rpool/export/test1/test2のスナップショットから、クローンrpool/export/test3/test4を親データセット「test3」を含めて作成し、容量を1GBに制限します。
# zfs clone -p -o quota=1g rpool/export/test1/test2@20130201-1500 rpool/export/test3/test4
- この場合、容量制限はrpool/export/test3/test4に対してのみ適用されます。
プロモートする
クローンされたファイルシステムは、元のスナップショットへ依存しています。プロモートすることにより、この依存関係を逆転することができます。
例えば、本番環境からクローンされた開発環境を、本番環境へ移行する場合などに利用します。
# zfs promote [ clone-filesystem ]
[ clone-filesystem ]には、対象のクローンファイルシステムを指定します。
- クローン作成時に利用したスナップショットと、それ以前のスナップショットは、すべてプロモート対象のクローンファイルシステムの所有に変更されます。
利用例
クローンファイルシステムrpool/export/test3/test4をプロモートします。
# zfs promote rpool/export/test3/test4
データストリームを送信する
スナップショットのデータストリームを生成し、標準出力へ送信します。ファイルシステムのバックアップなどに利用できます。
# zfs send [ snapshot ]
[ snapshot ]には、データストリームを作成するスナップショットを指定します。-iや-Iオプションを指定しない場合は、完全なストリームが生成されます。
主なオプション
- -i [ snapshot-a ]
- [ snapshot-a ]から、[ snapshot ]への増分ストリームを生成します。[ snapshot-a ]には、@以降のスナップショット名だけを指定することができます。
- -I [ snapshot-a ]
- [ snapshot-a ]から、[ snapshot ]への、間にあるスナップショットを含めた増分ストリームを生成します。[ snapshot-a ]には、@以降のスナップショット名だけを指定することができます。
- -r
- 再帰的ストリームパッケージを生成します。このパッケージには、プロパティや子ファイルシステムが含まれます。
利用例
rpool/export/test1の増分データストリームを、子データセット含めて生成し、ファイルに書き出します。
# zfs send -r -i 20130201-1500 rpool/export/test1@20130201-1700 > /export/home/admin/test1-increment.zfs
データストリームを受信する
生成されたデータストリームを標準入力から受信し、スナップショットを作成します。完全なデータストリームを受信した場合は、新しいファイルシステムも作成されます。
# zfs receive [ filesystem ]
[ filesystem ]には受信するファイルシステムを指定します。
主なオプション
- -d
- 送信されたスナップショットパスのプール名を除くすべての要素を使用して、新しいスナップショットの名前を決定します。
- スナップショットrpool/export/test1@20130201-1500で送信されたデータストリームを、rpool/export/receiveで受信した場合は、「rpool/export/receive/export/test1@20130201-1500」が作成されます。
- -e
- 送信されたスナップショットパスの最後の要素を使用して、新しいスナップショットの名前を決定します。
- スナップショットrpool/export/test1@20130201-1500で送信されたデータストリームを、rpool/export/receiveで受信した場合は、「rpool/export/receive/test1@20130201-1500」が作成されます。
- -F
- 受信する前に、該当のファイルシステムを強制的にロールバックします。増分ストリームを受信する場合は、送信側に存在しないスナップショットとファイルシステムを破棄します。
- -v
- 詳細情報を出力します。
- -n
- dry runを行います。
利用例
ファイルに保存されたデータストリームを、送信時のスナップショットパスの最後の要素を使用してrpool/export/receiveで受信します。
# zfs recv -v -e rpool/export/receive < /export/home/admin/test1.zfs
オートスナップショットについて
詳しくはこちらをご覧ください。
データセットの名前を変更する
データセットの名前を変更します。スナップショットを除き、対象のデータセットは任意の階層に置くことができます。また、名前を変更されたファイルシステムは、新しいマウントポイントを自動的に継承します。
# zfs rename [ dataset1 ] [ dataset2 ]
[ dataset1 ]には変更対象のデータセットの名前を、[ dataset2 ]には変更後のデータセットの名前を指定します。
主なオプション
- -p
- 存在しない親データセットを作成します。
利用例
rpool/export/test1/test2を、rpool/export/test-rename/test3に変更し、親データセット「test-rename」を作成します。
# zfs rename -p rpool/export/test1/test2 rpool/export/test-rename/test3
データセットを破棄する
データセットの破棄は以下で行うことができます。実行には十分ご注意ください。
# zfs destroy [ filesystem | volume ]
[ filesystem | volume ]には、破棄するファイルシステム、またはボリュームを指定します。
主なオプション
- -r
- すべての子を再帰的に破棄します。
- -R
- 指定したデータセットの階層外にある、クローンファイルシステムを含むすべての依存関係が再帰的に破棄されます。
- -f
- 強制的にマウントを解除してからデータセットを破棄します。
利用例
rpool/export/test1を、スナップショットを含むすべての子も含めて再帰的に破棄します。
# zfs destroy -r rpool/export/test1
スナップショットを破棄する
スナップショットの破棄は以下で行うことができます。実行には十分ご注意ください。
# zfs destroy [ snapshot ]
[ snapshot ]には破棄対象のスナップショットを指定します。
主なオプション
- -d
- 依存関係などにより破棄される条件を満たしていないスナップショットに対し、削除遅延のマークをつけます。
- 条件を満たしているスナップショットは破棄されます。
- 依存関係などにより破棄される条件を満たしていないスナップショットに対し、削除遅延のマークをつけます。
- -r
- 子孫ファイルシステムで同一の名前を持つスナップショットを再帰的に破棄します。
- 条件を満たしていないスナップショットが存在した場合は、スナップショットは破棄されません。
- 子孫ファイルシステムで同一の名前を持つスナップショットを再帰的に破棄します。
- -R
- クローンファイルシステムを含む、すべての依存関係を再帰的に破棄します。
利用例
rpool/export/test1以下のスナップショット「20130201-1500」を、再帰的に破棄します。また、依存関係などにより、破棄できないスナップショットには削除遅延のマークをつけます。
# zfs destroy -rd rpool/export/test1@20130201-1500