Solaris ZFS 管理ガイド
  Search only this book
Download this book in PDF (2012 KB)

第 1 章 ZFS ファイルシステム (概要)

この章では、ZFS ファイルシステムの概要およびその機能と利点について説明します。また、このマニュアルの残りの章で使用されるいくつかの基本的な用語について説明します。

この章は、次の節で構成されます。

ZFS の新機能

この節では、ZFS ファイルシステムの新機能について概説します。

ZFS インストールおよびフラッシュインストールのサポート

Solaris 10 10/09 リリース: この Solaris リリースでは、JumpStart プロファイルを設定して、ZFS ルートプールのフラッシュアーカイブを特定できます。詳細は、「ZFS ルートファイルシステムをインストールする (フラッシュアーカイブインストール)」を参照してください。

ZFS ユーザーおよびグループの割り当て制限

Solaris 10 10/09 リリース: 以前の Solaris リリースでは、割り当て制限と予約を ZFS ファイルシステムに適用して、領域の管理および予約を行っていました。

この Solaris リリースでは、特定のユーザーまたはグループが所有するファイルによって消費される領域の量に対して割り当て制限を設定することができます。例えば、多数のユーザーまたグループが存在する環境でユーザーおよびグループの割り当て制限を設定する場合もあります。

ユーザーまたはグループの割り当て制限を設定するには、zfs userquota プロパティーおよび zfs groupquota プロパティーを次のように使用します。


# zfs set userquota@user1=5G tank/data
# zfs set groupquota@staff=10G tank/staff/admins

ユーザーまたはグループの現在の割り当て制限の設定を表示するには、次のようにします。


# zfs get userquota@user1 tank/data
NAME       PROPERTY         VALUE            SOURCE
tank/data  userquota@user1  5G               local
# zfs get groupquota@staff tank/staff/admins
NAME               PROPERTY          VALUE             SOURCE
tank/staff/admins  groupquota@staff  10G               local

割り当て制限に関する一般的な情報を表示するには、次のようにします。


# zfs userspace tank/data
TYPE        NAME   USED  QUOTA  
POSIX User  root     3K   none  
POSIX User  user1     0    5G  

# zfs groupspace tank/staff/admins
TYPE         NAME   USED  QUOTA  
POSIX Group  root     3K   none  
POSIX Group  staff     0    10G  

個々のユーザーまたはグループの領域使用状況を表示するには、userused@user プロパティーおよび groupused@group プロパティーを次のように使用します。


# zfs get userused@user1 tank/staff
NAME        PROPERTY        VALUE           SOURCE
tank/staff  userused@user1  213M            local
# zfs get groupused@staff tank/staff
NAME        PROPERTY         VALUE            SOURCE
tank/staff  groupused@staff  213M             local

ユーザーの割り当て制限の設定の詳細については、「ZFS の割り当て制限と予約を設定する」を参照してください。

実行権の ZFS ACL パススルー継承

Solaris 10 10/09 リリース: 以前の Solaris リリースでは、すべてのファイルが 0664 アクセス権または 0666 アクセス権付きで作成されるように、ACL 継承を適用することができました。ファイル作成モードを使用して、継承される ACL に実行ビットを含める場合、このリリースでは、実行権のパススルー継承を使用することができます。

ZFS データセットで aclinherit=passthrough-x を有効にすると、cc ツールまたは gcc ツールによって生成される出力ファイルに対する実行権を含めることができます。継承される ACL に実行権が含まれていない場合は、chmod コマンドを使用してファイルのアクセス権を変更しない限り、コンパイラから出力される実行ファイルは実行可能になりません。

詳細は、例 8–12 を参照してください。

ZFS プロパティーの拡張機能

Solaris 10/09 リリース: このリリースでは、ZFS ファイルシステムに関する拡張機能として、次のものが用意されています。

  • プール作成時の ZFS ファイルシステムプロパティーの設定 - プールを作成するときに ZFS ファイルシステムプロパティーを設定することができます。次の例では、プールと一緒に作成された ZFS ファイルシステムで圧縮が有効になっています。


    # zpool create -O compression=on pool mirror c0t1d0 c0t2d0
  • ZFS ファイルシステムにおけるキャッシュプロパティーの設定 - プライマリキャッシュ (ARC) またはセカンダリキャッシュ (L2ARC) にキャッシュされる内容を制御できるようにするため、2 つの新しい ZFS ファイルシステムプロパティーが用意されています。それらのキャッシュプロパティーは、次のように設定します。

    • primarycache – ARC にキャッシュされる内容を制御します。

    • secondarycache – L2ARC にキャッシュされる内容を制御します。

    • 両方のプロパティーに指定できる値 – allnonemetadataall に設定すると、ユーザーデータとメタデータの両方がキャッシュされます。none に設定すると、ユーザーデータも、メタデータも、キャッシュされません。metadata に設定すると、メタデータのみがキャッシュされます。デフォルトは all です。

    これらのプロパティーは、既存のファイルシステムで設定することも、ファイルシステムを作成するときに設定することもできます。次に例を示します。


    # zfs set primarycache=metadata tank/datab
    # zfs create -o primarycache=metadata tank/newdatab

    既存のファイルシステムで設定した場合、これらのプロパティーの値に基づいて、New I/O のみがキャッシュされます。

    データベース環境によっては、ユーザーデータをキャッシュしない方がよい場合があります。したがって、ご使用の環境ではキャッシュプロパティーを設定するのが妥当かどうか判定する必要があります。

  • スペースアカウンティングプロパティー – 新しい読み取り専用ファイルシステムプロパティーであり、クローン、ファイルシステム、およびボリュームに関する領域使用状況を確認する場合に役立ちます (ただし、スナップショットに関する領域使用状況を確認することはできません)。属性は次のとおりです。

    • usedbychildren - データセットの子によって使用される容量を特定します。この容量は、データベースのすべての子が破棄された場合に解放されます。このプロパティーの省略名は usedchild です。

    • usedbydataset - このデータセット自体によって使用される容量を特定します。この容量は、データベースが破棄された場合に解放されますが、このためには先にすべてのスナップショットを破棄し、refreservation をすべて削除する必要があります。このプロパティーの省略名は usedds です。

    • usedbyrefreservation - このデータセットの refreservation セットによって使用される容量を特定します。この容量は、refreservation が削除された場合に解放されます。このプロパティーの省略名は usedrefreserv です。

    • usedbysnapshots - このデータセットのスナップショットによって消費される容量を特定します。具体的には、これはデータセットのスナップショットがすべて破棄された場合に解放される容量です。これはスナップショットの used プロパティーの値を単純に合計した結果ではないことに注意してください。複数のスナップショットで共有されている容量も存在するためです。このプロパティーの省略名は usedsnap です。

    これらの新しいプロパティーは、used プロパティーの値を、容量を消費する各種の要素に分割します。具体的には、used プロパティーの値は次のように分割されます。


    used property = usedbychildren + usedbydataset + usedbyrefreservation + usedbysnapshots

    これらのプロパティーは、zfs list -o space コマンドを使用して表示できます。次に例を示します。


    $ zfs list -o space
    NAME               AVAIL   USED  USEDSNAP  USEDDS  USEDREFRESERV  USEDCHILD
    rpool              25.4G  7.79G         0     64K              0      7.79G
    rpool/ROOT         25.4G  6.29G         0     18K              0      6.29G
    rpool/ROOT/snv_98  25.4G  6.29G         0   6.29G              0          0
    rpool/dump         25.4G  1.00G         0   1.00G              0          0
    rpool/export       25.4G    38K         0     20K              0        18K
    rpool/export/home  25.4G    18K         0     18K              0          0
    rpool/swap         25.8G   512M         0    111M           401M          0

    前述のコマンドは、zfs list - o name,avail,used,usedsnap,usedds,usedrefreserv,usedchild -t filesystem,volume コマンドと同等です。

  • スナップショットの表示listsnapshots プールプロパティーは、zfs list コマンドでスナップショット情報が表示されるかどうかを制御します。デフォルト値は on です。つまり、デフォルトでは、スナップショット情報は表示されます。

    listsnapshots プロパティーを無効にした場合、zfs list -t snapshots コマンドを使用すればスナップショット情報が表示されます。

ZFS ログデバイスの回復

Solaris 10 10/09 リリース: このリリースでは、zpool status コマンドにおけるインテントログ障害を ZFS が認識します。それらのエラーは、FMA によっても報告されます。ZFS と FMA の両方によって、インテントログ障害から回復する方法が示されます。

例えば、別個のログデバイスを持つプールに対する同期書き込み操作が確定される前にシステムが突然シャットダウンされた場合には、次のようなメッセージが表示されます。


# zpool status -x
  pool: pool
 state: FAULTED
status: One or more of the intent logs could not be read.
        Waiting for adminstrator intervention to fix the faulted pool.
action: Either restore the affected device(s) and run 'zpool online',
        or ignore the intent log records by running 'zpool clear'.
 scrub: none requested
config:

        NAME        STATE     READ WRITE CKSUM
        pool        FAULTED      0     0     0 bad intent log
          mirror    ONLINE       0     0     0
            c0t1d0  ONLINE       0     0     0
            c0t4d0  ONLINE       0     0     0
        logs        FAULTED      0     0     0 bad intent log
          c0t5d0    UNAVAIL      0     0     0 cannot open

そのような場合には、次の方法で、ログデバイスの障害を解決する必要があります。

  • ログデバイスを交換または回復します(この例の場合、デバイスは c0t5d0)。

  • ログデバイスをオンラインに戻します。


    # zpool online pool c0t5d0
  • 障害が発生したログデバイスのエラー状況がリセットされます。


    # zpool clear pool

障害が発生したデバイスを交換せずにこのエラーから回復する場合は、zpool clear コマンドを使用してエラーを解決することができます。このシナリオでは、プールが縮退モードで実行され、ログレコードは、ログデバイスが交換されるまで、メインプールに書き込まれます。

ログデバイスの障害の発生を抑制するため、ミラー化ログデバイスを利用することを検討してください。

ZFS ストレージプールにおけるキャッシュデバイスの使用

Solaris 10 10/09 リリース: この Solaris リリースでは、プールを作成して、ストレージプールデータをキャッシュするために使用されるキャッシュデバイスを指定することができます。

キャッシュデバイスにより、メインメモリーとディスクの間にキャッシュ層が追加されます。キャッシュデバイスを使用すると、ほぼ静的なコンテンツをランダムに読み込む作業負荷のパフォーマンスが大幅に向上します。

プールの作成時に 1 つ以上のキャッシュデバイスを指定できます。次に例を示します。


# zpool create pool mirror c0t2d0 c0t4d0 cache c0t0d0
# zpool status pool
  pool: pool
 state: ONLINE
 scrub: none requested
config:

        NAME        STATE     READ WRITE CKSUM
        pool        ONLINE       0     0     0
          mirror    ONLINE       0     0     0
            c0t2d0  ONLINE       0     0     0
            c0t4d0  ONLINE       0     0     0
        cache
          c0t0d0    ONLINE       0     0     0

errors: No known data errors

キャッシュデバイスを追加すると、そのキャッシュデバイスにメインメモリーの内容が徐々に書き込まれていきます。キャッシュデバイスのサイズによっては、キャッシュがいっぱいになるまでに 1 時間以上かかる場合もあります。zpool iostat コマンドを次のように使用して、容量と読み込みを監視できます。


# zpool iostat -v pool 5

プールの作成後に、プールに対してキャッシュデバイスの追加や削除を行うことができます。

詳細は、「キャッシュデバイスを使用して ZFS ストレージプールを作成する」および例 4–4 を参照してください。

ZFS 環境でのゾーンの移行

Solaris 10 5/09 リリース: このリリースでは、ZFS 環境で Live Upgrade を使用してゾーンを移行するためのサポートが拡張されています。詳細は、「ゾーンが含まれているシステムを Solaris Live Upgrade で移行またはアップグレードする (Solaris 10 5/09 および Solaris 10 10/09)」を参照してください。

このリリースで認識されている問題のリストについては、『Solaris 10 5/09 ご使用にあたって』を参照してください。

ZFS のインストールおよび起動のサポート

Solaris 10 10/08 リリース: このリリースでは、ZFS ルートファイルシステムをインストールおよび起動する機能が追加されています。初期インストールまたは JumpStart 機能を使用して、ZFS ルートファイルシステムをインストールできます。あるいは、Live Upgrade 機能を使用して、UFS ルートファイルシステムを ZFS ルートファイルシステムに移行できます。スワップデバイスとダンプデバイスに関する ZFS のサポートも追加されています。詳細は、第 5 章ZFS ルートファイルシステムのインストールと起動を参照してください。

このリリースで認識されている問題のリストについては、『Solaris 10 10/08 ご使用にあたって』を参照してください。

マウント解除せずにデータセットをロールバックする

Solaris 10 10/08 リリース: このリリースでは、あらかじめマウント解除を行うことなくデータセットをロールバックする機能が追加されています。この機能により、マウント解除操作を強制的に実行する zfs rollback -f オプションは不要になりました。-f オプションはサポートされなくなり、このオプションを指定しても無視されます。

zfs send コマンドの拡張機能

Solaris 10 10/08 リリース: このリリースでは、zfs send コマンドに次の拡張機能が追加されています。

  • 1 つのスナップショットのすべての増分ストリームを累積スナップショットに送信します。次に例を示します。


    # 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 pool/fs@snapA pool/fs@snapD > /snaps/fs@combo

    fs@snapA から fs@snapD までのすべての増分スナップショットを fs@combo に送信します。

  • 元のスナップショットからの増分ストリームを送信してクローンを作成します。増分ストリームを受け入れるには、元のスナップショットが受信側にすでに存在している必要があります。次に例を示します。


    # zfs send -I pool/fs@snap1 pool/clone@snapA > /snaps/fsclonesnap-I
    .
    .
    # zfs receive -F pool/clone < /snaps/fsclonesnap-I
  • 指定されたスナップショットまでのすべての下位ファイルシステムの複製ストリームを送信します。受信時には、すべてのプロパティー、スナップショット、下位ファイルシステム、およびクローンが維持されます。次に例を示します。


    zfs send -R pool/fs@snap > snaps/fs-R

    詳細な例については、例 7–1 を参照してください。

  • 増分複製ストリームを送信します。


    zfs send -R -[iI] @snapA pool/fs@snapD

    詳細な例については、例 7–1 を参照してください。

詳細は、「複雑な ZFS スナップショットストリームを送信および受信する」を参照してください。

ファイルシステムデータのみに対する ZFS の割り当て制限と予約

Solaris 10 10/08 リリース: このリリースでは、ZFS の割り当て制限と予約の既存機能に加え、データセットの割り当て制限と予約が追加されました。この機能では、スナップショットやクローンなどの子孫は容量消費の計算に含まれません。

  • refquota プロパティーは、1 つのデータセットで消費できる容量を制限します。このプロパティーは、使用可能な容量に強い制限値を適用します。この強い制限値には、スナップショットやクローンなどの下位データで使用される容量は含まれません。

  • refreservation プロパティーは、1 つのデータセットに対して保証される最小限の容量を設定します。下位データは含まれません。

たとえば、studentA に 10G バイトの refquota を設定すると、「基準」容量として 10G バイトの強い制限値を設定することができます。柔軟性を高めるために、20G バイトの割り当て制限を設定して、studentA のスナップショットを管理することもできます。


# zfs set refquota=10g tank/studentA
# zfs set quota=20g tank/studentA

詳細は、「ZFS の割り当て制限と予約を設定する」を参照してください。

ZFS ストレージプールのプロパティー

Solaris 10 10/08 リリース: ZFS ストレージプールのプロパティーは以前のリリースで導入されました。このリリースでは、プロパティー情報が追加されています。次に例を示します。


# zpool get all mpool
NAME   PROPERTY     VALUE             SOURCE
mpool  size         33.8G             -
mpool  used         5.76G             -
mpool  available    28.0G             -
mpool  capacity     17%               -
mpool  altroot      -                 default
mpool  health       ONLINE            -
mpool  guid         2689713858991441653  -
mpool  version      10                default
mpool  bootfs       mpool/ROOT/zfsBE  local
mpool  delegation   on                default
mpool  autoreplace  off               default
mpool  cachefile    -                 default
mpool  failmode     continue          local

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

  • cachefile プロパティー – Solaris 10 10/08 リリース: このリリースでは、プール構成の情報をキャッシュする場所を制御する cachefile プロパティーが追加されています。システムの起動時に、キャッシュ内のすべてのプールが自動的にインポートされます。ただし、インストール環境とクラスタ化環境では、プールが自動的にインポートされないようにするために、この情報を別の場所にキャッシュすることが必要になる場合もあります。

    プール構成を別の場所にキャッシュするようにこのプロパティーを設定し、あとで zpool import c コマンドを使用してインポートすることができます。ほとんどの ZFS 構成で、このプロパティーは使用されません。

    cachefile プロパティーは持続性を持たず、ディスクには格納されません。このプロパティーは、プール情報をキャッシュしないように指定するために以前の Solaris リリースで使用されていた temporary プロパティーに代わるものです。

  • failmode プロパティー –Solaris 10 10/08 リリース: このリリースでは、デバイスの接続が失われたことによる壊滅的なプール障害やプールの全デバイスの障害が発生した場合の動作を決定する failmode プロパティーが追加されています。failmode プロパティーの値は、waitcontinue、または panic に設定できます。デフォルト値は wait です。これは、デバイスを再接続するか障害の発生したデバイスを交換し、zpool clear コマンドでエラーを解決する必要があることを意味します。

    failmode プロパティーは、ほかの設定可能な ZFS プロパティーと同様に、プールの作成前または作成後に設定することができます。次に例を示します。


    # zpool set failmode=continue tank
    # zpool get failmode tank
    NAME  PROPERTY  VALUE     SOURCE
    tank  failmode  continue  local

    # zpool create -o failmode=continue users mirror c0t1d0 c1t1d0

    ZFS プールのすべてのプロパティーについては、表 4–1 を参照してください。

ZFS コマンドの履歴の拡張機能 (zpool history)

Solaris 10 10/08 リリース: zpool history コマンドが拡張され、次の新機能が追加されています。

  • ZFS ファイルシステムのイベント情報が表示されます。次に例を示します。


    # zpool history
    History for 'rpool':
    2009-08-26.16:49:07 zpool create -f -o failmode=continue -R /a -m legacy -o cachefile=
    /tmp/root/etc/zfs/zpool.cache rpool c1t1d0s0
    2009-08-26.16:49:08 zfs set canmount=noauto rpool
    2009-08-26.16:49:08 zfs set mountpoint=/rpool rpool
    2009-08-26.16:49:09 zfs create -o mountpoint=legacy rpool/ROOT
    2009-08-26.16:49:10 zfs create -b 8192 -V 2048m rpool/swap
    2009-08-26.16:49:11 zfs create -b 131072 -V 1024m rpool/dump
    2009-08-26.16:49:14 zfs create -o canmount=noauto rpool/ROOT/zfs1009BE
    2009-08-26.16:49:15 zpool set bootfs=rpool/ROOT/zfs1009BE rpool
    2009-08-26.16:49:15 zfs set mountpoint=/ rpool/ROOT/zfs1009BE
    2009-08-26.16:49:16 zfs set canmount=on rpool
    2009-08-26.16:49:17 zfs create -o mountpoint=/export rpool/export
    2009-08-26.16:49:18 zfs create rpool/export/home
    2009-08-28.08:17:59 zpool attach rpool c1t1d0s0 c1t0d0s0
  • ユーザー名、ホスト名、および操作が実行されたゾーンを含む長形式で表示する -l オプション。次に例を示します。


    # zpool history -l rpool
    History for 'rpool':
    2009-08-26.16:49:07 zpool create -f -o failmode=continue -R /a -m legacy -o cachefile=
    /tmp/root/etc/zfs/zpool.cache rpool c1t1d0s0 [user root on neo:global]
    2009-08-26.16:49:08 zfs set canmount=noauto rpool [user root on neo:global]
    2009-08-26.16:49:08 zfs set mountpoint=/rpool rpool [user root on neo:global]
    2009-08-26.16:49:09 zfs create -o mountpoint=legacy rpool/ROOT [user root on neo:global]
    2009-08-26.16:49:10 zfs create -b 8192 -V 2048m rpool/swap [user root on neo:global]
    2009-08-26.16:49:11 zfs create -b 131072 -V 1024m rpool/dump [user root on neo:global]
    2009-08-26.16:49:14 zfs create -o canmount=noauto rpool/ROOT/zfs1009BE [user root on neo:global]
    2009-08-26.16:49:15 zpool set bootfs=rpool/ROOT/zfs1009BE rpool [user root on neo:global]
    2009-08-26.16:49:15 zfs set mountpoint=/ rpool/ROOT/zfs1009BE [user root on neo:global]
    2009-08-26.16:49:16 zfs set canmount=on rpool [user root on neo:global]
    2009-08-26.16:49:17 zfs create -o mountpoint=/export rpool/export [user root on neo:global]
    2009-08-26.16:49:18 zfs create rpool/export/home [user root on neo:global]
    2009-08-28.08:17:59 zpool attach rpool c1t1d0s0 c1t0d0s0 [user root on neo:global]
  • 内部イベント情報を表示するための -i オプション。この情報は診断目的で使用できます。次に例を示します。


    # zpool history -i rpool
    History for 'rpool':
    2009-08-26.16:49:07 zpool create -f -o failmode=continue -R /a -m legacy -o cachefile=
    /tmp/root/etc/zfs/zpool.cache rpool c1t1d0s0
    2009-08-26.16:49:07 [internal property set txg:6] mountpoint=/ dataset = 16
    2009-08-26.16:49:07 [internal property set txg:7] mountpoint=legacy dataset = 16
    2009-08-26.16:49:08 [internal property set txg:8] canmount=2 dataset = 16
    2009-08-26.16:49:08 zfs set canmount=noauto rpool
    2009-08-26.16:49:08 [internal property set txg:10] mountpoint=/rpool dataset = 16
    2009-08-26.16:49:08 zfs set mountpoint=/rpool rpool
    2009-08-26.16:49:09 [internal create txg:12] dataset = 31
    2009-08-26.16:49:09 [internal property set txg:13] mountpoint=legacy dataset = 31
    2009-08-26.16:49:09 zfs create -o mountpoint=legacy rpool/ROOT
    2009-08-26.16:49:09 [internal create txg:15] dataset = 37
    2009-08-26.16:49:10 [internal property set txg:16] refreservation=2147483648 dataset = 37
    2009-08-26.16:49:10 [internal refreservation set txg:16] 2147483648 dataset = 37
    2009-08-26.16:49:10 zfs create -b 8192 -V 2048m rpool/swap
    2009-08-26.16:49:10 [internal create txg:18] dataset = 43
    2009-08-26.16:49:10 [internal property set txg:19] refreservation=1073741824 dataset = 43
    2009-08-26.16:49:10 [internal refreservation set txg:19] 1073741824 dataset = 43
    .
    .
    .

zpool history コマンドの使用方法の詳細については、「ZFS の問題を識別する」を参照してください。

ZFS ファイルシステムをアップグレードする (zfs upgrade)

Solaris 10 10/08 リリース: このリリースでは、今後の ZFS ファイルシステムの拡張機能を既存のファイルシステムに提供する zfs upgrade コマンドが追加されています。ZFS ストレージプールには、プール拡張を既存のストレージプールに提供する同様のアップグレード機能が備わっています。

次に例を示します。


# zfs upgrade
This system is currently running ZFS filesystem version 3.

All filesystems are formatted with the current version.

注 –

アップグレードされたファイルシステム、およびこれらのアップグレードされたファイルシステムから zfs send コマンドによって作成されたストリームには、古いソフトウェアリリースを実行しているシステムからはアクセスできません。


ZFS 委任管理

Solaris 10 10/08 リリース: このリリースでは、ZFS 管理タスクを実行するための詳細なアクセス権を非特権ユーザーに委任できるようになりました。

zfs allowzfs unallow の各コマンドを使ってアクセス権を付与および削除できます。

委任管理を使用する機能をプールの delegation プロパティーを使って変更できます。次に例を示します。


# zpool get delegation users
NAME  PROPERTY    VALUE       SOURCE
users  delegation  on          default
# zpool set delegation=off users
# zpool get delegation users
NAME  PROPERTY    VALUE       SOURCE
users  delegation  off         local

デフォルトでは、delegation プロパティーは有効になっています。

詳細は、第 9 章ZFS 委任管理および zfs(1M) を参照してください。

別個の ZFS ログデバイスを設定する

Solaris 10 10/08 リリース: 同期トランザクションの POSIX 要件を満たすために、ZFS インテントログ (ZIL) が提供されています。たとえば、多くの場合、データベースがシステムコールから戻るときは、そのトランザクションが安定したストレージデバイス上に置かれている必要があります。NFS やその他のアプリケーションでは、データの安定性を確保するために fsync() も使用できます。デフォルトでは、ZIL はメインストレージプール内のブロックから割り当てられます。しかし、NVRAM や専用ディスクなどで、別個のインテントログデバイスを ZFS ストレージプール内で使用することにより、パフォーマンスを向上できる可能性があります。

ZFS インテントログ用のログデバイスは、データベースのログファイルとは関連がありません。

ZFS ログデバイスは、ストレージプールの作成時または作成後に設定できます。ログデバイスの設定の例については、「ログデバイスを持つ ZFS ストレージプールを作成する」および 「ストレージプールにデバイスを追加する」を参照してください。

既存のログデバイスにログデバイスを接続して、ミラー化ログデバイスを作成できます。この操作は、ミラー化されていないストレージプール内にデバイスを接続する操作と同じです。

使用している環境で別個の ZFS ログデバイスを設定することが適切かどうかを判断するには、次の点を考慮してください。

  • 別個のログデバイスを実装することによって得られるパフォーマンスの向上は、デバイスの種類、プールのハードウェア構成、およびアプリケーションの作業負荷によって異なります。パフォーマンスの基礎情報については、次のブログを参照してください。

    http://blogs.sun.com/perrin/entry/slog_blog_or_blogging_on

  • ログデバイスは複製解除したりミラー化したりできますが、ログデバイスで RAID-Z はサポートされていません。

  • 別個のログデバイスがミラー化されていない場合、ログを格納しているデバイスに障害が発生すると、ログブロックの格納はストレージプールに戻ります。

  • ログデバイスは、より大規模なストレージプールの一部として、追加、置き換え、接続、切り離し、インポート、およびエクスポートすることができます。現時点では、ログデバイスを削除することはできません。

  • ログデバイスの最小サイズは、プール内の各デバイスの最小サイズと同じで、64M バイトです。ログデバイスに格納される可能性のある処理中のデータは比較的少量です。ログのトランザクション (システムコール) がコミットされると、ログブロックは解放されます。

  • ログデバイスの最大サイズは物理メモリーのサイズの約 1/2 になるようにしてください。これは、格納される可能性のある処理中のデータの最大量です。たとえば、16G バイトの物理メモリーを備えたシステムの場合、ログデバイスの最大サイズとして 8G バイトを検討してください。

ZFS 中間データセットを作成する

Solaris 10 10/08 リリース: zfs createzfs clone、および zfs rename コマンドで -p オプションを使用すると、中間データセットがまだ存在しない場合にそれをすばやく作成することができます。

たとえば、ZFS データセット (users/area51) を datab ストレージプールに作成します。


# zfs list
NAME                        USED  AVAIL  REFER  MOUNTPOINT
datab                       106K  16.5G    18K  /datab
# zfs create -p -o compression=on datab/users/area51

作成処理中に中間データセットが存在していれば、この処理は正常に完了します。

指定したプロパティーは、中間データセットではなく、ターゲットデータセットに適用されます。次に例を示します。


# zfs get mountpoint,compression datab/users/area51
NAME                PROPERTY     VALUE                SOURCE
datab/users/area51  mountpoint   /datab/users/area51  default
datab/users/area51  compression  on                   local

中間データセットは、デフォルトのマウントポイントで作成されます。中間データセットに対する追加のプロパティーはすべて無効になります。次に例を示します。


# zfs get mountpoint,compression datab/users
NAME         PROPERTY     VALUE         SOURCE
datab/users  mountpoint   /datab/users  default
datab/users  compression  off           default

詳細は、zfs(1M) のマニュアルページを参照してください。

ZFS ホットプラグの拡張機能

Solaris 10 10/08 リリース: このリリースでは、ZFS では取り外されるデバイスへの対応がより効果的に行われるようになりました。また、挿入されるデバイスを自動的に識別する機構に次の拡張が加わりました。

  • zpool replace コマンドを使用しなくても、既存のデバイスを同等のデバイスに置き換えることができます。

    autoreplace プロパティーは、自動デバイス交換を制御します。オフに設定されている場合、管理者が zpool replace コマンドを使ってデバイス交換を開始する必要があります。オンに設定されている場合、そのプールに以前属していたデバイスと物理的に同じ位置にある新しいデバイスは、いずれも自動的にフォーマットされ、置き換えられます。デフォルトの動作はオフです。

  • システムの実行中にデバイスが物理的に取り外された場合、デバイスやホットスペアが取り外されている間のストレージプールの状態は REMOVED になります。可能であれば、取り外されたデバイスはホットスペアデバイスで置き換えられます。

  • デバイスをいったん取り外してから挿入すると、デバイスはオンラインになります。デバイスを挿入し直すときにホットスペアがアクティブになっていた場合は、オンライン処理が完了すると、そのスペアが取り外されます。

  • デバイスの着脱時の自動検出はハードウェアに依存しているため、すべてのプラットフォームには対応していない可能性があります。たとえば、USB デバイスは挿入時に自動的に構成されます。ただし、cfgadm -c configure コマンドを使用して SATA ドライブを構成する必要がある場合もあります。

  • ホットスペアは、オンラインおよび使用可能かどうか定期的に確認されます。

詳細は、zpool(1M) のマニュアルページを参照してください。

ZFS スナップショットの名前を再帰的に変更する (zfs rename -r)

Solaris 10 10/08 リリース: zfs rename -r コマンドを使用して、すべての ZFS 子孫スナップショットの名前を再帰的に変更することができます。

たとえば、1 組の ZFS ファイルシステムのスナップショットを取ります。


# zfs snapshot -r users/home@today
# zfs list
NAME                     USED  AVAIL  REFER  MOUNTPOINT
users                    216K  16.5G    20K  /users
users/home                76K  16.5G    22K  /users/home
users/home@today            0      -    22K  -
users/home/markm          18K  16.5G    18K  /users/home/markm
users/home/markm@today      0      -    18K  -
users/home/marks          18K  16.5G    18K  /users/home/marks
users/home/marks@today      0      -    18K  -
users/home/neil           18K  16.5G    18K  /users/home/neil
users/home/neil@today       0      -    18K  -

そして、翌日にスナップショットの名前を変更します。


# zfs rename -r users/home@today @yesterday
# zfs list
NAME                         USED  AVAIL  REFER  MOUNTPOINT
users                        216K  16.5G    20K  /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 スナップショットの概要」と、周期的スナップショットの作成方法を記述した次のブログエントリを参照してください。

http://blogs.sun.com/mmusante/entry/rolling_snapshots_made_easy

GZIP 圧縮を ZFS に使用できる

Solaris 10 10/08 リリース: この Solaris リリースでは、ZFS ファイルシステムに対して lzjb 圧縮だけでなく gzip 圧縮も設定できます。圧縮は、gzip (デフォルト) と指定することも、gzip-N (N は 1 - 9) と指定することもできます。次に例を示します。


# zfs create -o compression=gzip users/home/snapshots
# zfs get compression users/home/snapshots
NAME                  PROPERTY     VALUE            SOURCE
users/home/snapshots  compression  gzip             local
# zfs create -o compression=gzip-9 users/home/oldfiles
# zfs get compression users/home/oldfiles
NAME                  PROPERTY     VALUE           SOURCE
users/home/oldfiles   compression  gzip-9          local

ZFS のプロパティーの設定方法の詳細については、「ZFS プロパティーを設定する」を参照してください。

ZFS ユーザーデータの複数のコピーを保存する

Solaris 10 10/08 リリース: 信頼性を高める機能として、可能であれば、ZFS ファイルシステムのメタデータが異なるディスクにまたがって何度か自動的に保存されます。この機能は、「ditto ブロック」として知られています。

この Solaris リリースでは、zfs set copies コマンドを使用して、ファイルシステムごとにユーザーデータの複数のコピーも保存されるように指定できます。次に例を示します。


# zfs set copies=2 users/home
# zfs get copies users/home
NAME        PROPERTY  VALUE       SOURCE
users/home  copies    2           local

使用できる値は 1、2、または 3 です。デフォルト値は 1。これらのコピーは、ミラー化構成または RAID-Z 構成などのプールレベルの冗長性を補うものです。

ZFS ユーザーデータの複数のコピーを保存する利点は次のとおりです。

  • すべての ZFS 構成について、メディア障害 (ビット腐敗) などの回復不能なブロックの読み取り障害から回復できるようにすることで、データ保持機能を向上させます。

  • 1 つのディスクしか使用できない場合でもデータの保護を行います。

  • ストレージプールの機能を超えて、ファイルシステムごとにデータ保護ポリシーを選択できます。

ストレージプールでの ditto ブロックの割り当てによっては、複数のコピーが単一のディスクに保存される場合もあります。そのあとでディスク全体の障害が発生すると、すべての ditto ブロックが使用不可になる可能性があります。

誤って非冗長プールを作成した場合や、データ保持ポリシーを設定する必要がある場合は、ditto ブロックの使用を検討することもできます。

単一ディスクのプールまたは複数ディスクのプールを備えたシステムでコピーを設定することにより、全体的なデータ保護がどのように影響を受けるかについて詳しくは、次のブログを参照してください。

http://blogs.sun.com/relling/entry/zfs_copies_and_data_protection

ZFS のプロパティーの設定方法の詳細については、「ZFS プロパティーを設定する」を参照してください。

改善された zpool status の出力

Solaris 10 8/07 リリース: zpool status -v コマンドを使用すると、永続的なエラーが発生しているファイルの一覧を表示できます。以前は、find -inum コマンドを使用して、表示された i ノードの一覧からファイル名を特定する必要がありました。

永続的なエラーが発生しているファイル一覧の表示に関する詳細は、「破壊されたファイルまたはディレクトリを修復する」を参照してください。

ZFS および Solaris iSCSI の向上

Solaris 10 8/07 リリース: この Solaris リリースでは、ZFS ボリュームに shareiscsi プロパティーを設定することで、ZFS ボリュームを Solaris iSCSI ターゲットデバイスとして作成できます。この方法は、Solaris iSCSI ターゲットをすばやく設定するのに便利です。次に例を示します。


# zfs create -V 2g tank/volumes/v2
# zfs set shareiscsi=on tank/volumes/v2
# iscsitadm list target
Target: tank/volumes/v2
    iSCSI Name: iqn.1986-03.com.sun:02:984fe301-c412-ccc1-cc80-cf9a72aa062a
    Connections: 0

iSCSI ターゲットが作成されたら、iSCSI イニシエータを設定します。Solaris iSCSI イニシエータの設定方法については、『Solaris のシステム管理 (デバイスとファイルシステム)』の第 14 章「Solaris iSCSI ターゲットおよびイニシエータの構成 (手順)」を参照してください。

ZFS ボリュームを iSCSI ターゲットとして管理するための詳細については、「ZFS ボリュームを Solaris iSCSI ターゲットとして使用する」を参照してください。

ZFS コマンドの履歴 (zpool history)

Solaris 10 8/07 リリース: この Solaris リリースでは、正常に実行された zfs および zpool コマンドが ZFS によって自動的に記録され、プールの状態の情報が更新されます。次に例を示します。


# zpool history
History for 'newpool':
2007-04-25.11:37:31 zpool create newpool mirror c0t8d0 c0t10d0
2007-04-25.11:37:46 zpool replace newpool c0t10d0 c0t9d0
2007-04-25.11:38:04 zpool attach newpool c0t9d0 c0t11d0
2007-04-25.11:38:09 zfs create newpool/user1
2007-04-25.11:38:15 zfs destroy newpool/user1

History for 'tank':
2007-04-25.11:46:28 zpool create tank mirror c1t0d0 c2t0d0 mirror c3t0d0 c4t0d0

この機能によって、ユーザーや Sun のサポート担当者は実行された「正確な」ZFS コマンドのセットを特定し、エラーシナリオのトラブルシューティングを行うことができます。

zpool history コマンドでは、特定のストレージプールを指定できます。次に例を示します。


# zpool history newpool
History for 'newpool':
2007-04-25.11:37:31 zpool create newpool mirror c0t8d0 c0t10d0
2007-04-25.11:37:46 zpool replace newpool c0t10d0 c0t9d0
2007-04-25.11:38:04 zpool attach newpool c0t9d0 c0t11d0
2007-04-25.11:38:09 zfs create newpool/user1
2007-04-25.11:38:15 zfs destroy newpool/user1

この Solaris リリースでは、zpool history コマンドで、ユーザー ID (user-ID)、ホスト名 (hostname)、またはゾーン名 (zone-name) は記録されません。詳細は、「ZFS コマンドの履歴の拡張機能 (zpool history)」を参照してください。

ZFS に関する問題のトラブルシューティングの詳細については、「ZFS の問題を識別する」を参照してください。

ZFS プロパティーの改善

ZFS xattr プロパティー

Solaris 10 8/07 リリース: xattr プロパティーを使用すると、特定の ZFS ファイルシステムの拡張属性を無効または有効にできます。デフォルト値は on です。ZFS プロパティーについては、「ZFS のプロパティーの紹介」を参照してください。

ZFS canmount プロパティー

Solaris 10 8/07 リリース: 新しいプロパティーである canmount を使用すると、zfs mount コマンドを使ってデータセットをマウントできるかどうかを指定できます。詳細については、canmount プロパティー」を参照してください。

ZFS ユーザープロパティー

Solaris 10 8/07 リリース: ZFS では、内部の統計情報をエクスポートしたり、ZFS ファイルシステムの動作を制御したりできる標準のネイティブプロパティーのほかに、ユーザープロパティーもサポートします。ユーザープロパティーは ZFS の動作には影響しませんが、これらを使用すると、使用環境内で意味のある情報をデータセットに注釈として付けることができます。

詳細については、「ZFS ユーザープロパティー」を参照してください。

ZFS ファイルシステムの作成時にプロパティーを設定する

Solaris 10 8/07 リリース: この Solaris リリースでは、ファイルシステムの作成後だけでなく、ファイルシステムの作成時にもプロパティーを設定できます。

次の 2 つの例は、同等の構文を示しています。


# zfs create tank/home
# zfs set mountpoint=/export/zfs tank/home
# zfs set sharenfs=on tank/home
# zfs set compression=on tank/home

# zfs create -o mountpoint=/export/zfs -o sharenfs=on -o compression=on tank/home

すべての ZFS ファイルシステムの情報を表示する

Solaris 10 8/07 リリース: この Solaris リリースでは、データセットまたは all を指定しない場合、さまざまな形式の zfs get コマンドを使用してすべてのデータセットに関する情報を表示できます。以前のリリースでは、zfs get コマンドですべてのデータセットに関する情報を取得することはできませんでした。

次に例を示します。


# zfs get -s local all
tank/home               atime          off                    local
tank/home/bonwick       atime          off                    local
tank/home/marks         quota          50G                    local

新しい zfs receive -F オプション

Solaris 10 8/07 リリース: この Solaris リリースでは、zfs receive コマンドに新しい -F オプションを指定することで、受信を行う前に、最新のスナップショットへのファイルシステムのロールバックを強制することができます。このオプションの使用は、ロールバックの発生から受信の開始までの間にファイルシステムが変更されるときに必要となる場合があります。

詳細は、「ZFS スナップショットを受信する」を参照してください。

再帰的な ZFS スナップショット

Solaris 10 11/06 リリース: zfs snapshot コマンドを使ってファイルシステムのスナップショットを作成する場合、-r オプションを使用すると、すべての子孫ファイルシステムのスナップショットを再帰的に作成できます。また、スナップショットを破棄するときに -r オプションを使用すると、すべての子孫スナップショットが再帰的に破棄されます。

再帰的な ZFS スナップショットは、1 つの原子動作としてすばやく作成されます。スナップショットは、まとめて (一度にすべて) 作成されるか、まったく作成されないかのどちらかです。原子スナップショット動作の利点は、子孫ファイルシステムにまたがる場合でも、常にある一貫した時間のスナップショットデータが取得されることです。

詳細は、「ZFS スナップショットを作成および破棄する」を参照してください。

ダブルパリティー RAID-Z (raidz2)

Solaris 10 11/06 リリース: 冗長な RAID-Z 構成でシングルパリティーまたはダブルパリティーを使用できるようになりました。これはそれぞれ、1 つまたは 2 つのデバイスで障害が発生しても、データを失うことなく処理を続行できることを意味します。raidz2 キーワードを指定すれば、ダブルパリティー RAID-Z 構成にすることができます。あるいは、raidz または raidz1 キーワードを指定すれば、シングルパリティー RAID-Z 構成にすることができます。

詳細は、「RAID-Z ストレージプールを作成する」または zpool(1M) のマニュアルページを参照してください。

ZFS ストレージプールのデバイスのホットスペア

Solaris 10 11/06 リリース: ZFS ホットスペア機能を使用すると、1 つ以上のストレージプールで障害が発生したデバイスまたはエラー状態のデバイスの置き換えに使用可能なディスクを特定できます。デバイスを「ホットスペア」として指定しておくと、プールのアクティブデバイスで障害が発生した場合に、そのデバイスがホットスペアに自動的に置き換えられます。ストレージプールのデバイスを手動でホットスペアに置き換えることもできます。

詳細は、「ストレージプールにホットスペアを指定する」および zpool(1M) のマニュアルページを参照してください。

ZFS ファイルシステムを ZFS クローンに置き換える (zfs promote)

Solaris 10 11/06 リリース: zfs promote コマンドを使用すると、ある既存の ZFS ファイルシステムをそのファイルシステムのクローンで置き換えることができます。この機能は、ファイルシステムの代替バージョンでテストを実行してから、そのファイルシステムの代替バージョンをアクティブファイルシステムに置き換えるときに利用できます。

詳細は、「ZFS ファイルシステムを ZFS クローンで置き換える」および zfs(1M) のマニュアルページを参照してください。

ZFS ストレージプールをアップグレードする (zpool upgrade)

Solaris 10 6/06 リリース: zpool upgrade コマンドを使用すると、ストレージプールを新しいバージョンにアップグレードして、その最新機能を利用できるようになります。また、古いバージョンのプールを実行している場合、zpool status コマンドによって通知されます。

詳細は、「ZFS ストレージプールをアップグレードする」および zpool(1M) のマニュアルページを参照してください。

以前の Solaris リリースのプールを持つシステムで ZFS 管理コンソールを使用する場合は、必ずプールをアップグレードしてから ZFS 管理コンソールを使用するようにしてください。プールのアップグレードが必要かどうかを調べるには、zpool status コマンドを使用します。ZFS 管理コンソールについては、「Web ベースの ZFS 管理」を参照してください。

zfs backup コマンドと zfs restore コマンドの名前が変更されている

Solaris 10 6/06 リリース: この Solaris リリースでは、zfs backup および zfs restore コマンドの名前が、それらの機能をより正確に表すように、zfs send および zfs receive にそれぞれ変更されています。これらのコマンドの機能は、ZFS データストリーム表現を保存および復元することです。

これらのコマンドの詳細については、「ZFS データを送信および受信する」を参照してください。

破棄されたストレージプールの回復

Solaris 10 6/06 リリース: このリリースには、zpool import -D コマンドが含まれています。このコマンドを使用すると、以前に zpool destroy コマンドで破棄されたプールを回復できます。

詳細は、「破棄された ZFS ストレージプールを回復する」を参照してください。

ZFS が Fault Manager と統合されている

Solaris 10 6/06 リリース: このリリースには、プールの障害やデバイスの障害を診断および報告できる ZFS 診断エンジンが組み込まれています。プールまたはデバイスの障害に関連するチェックサム、入出力、デバイス、およびプールのエラーも報告されます。

この診断エンジンでは、チェックサムと入出力のエラーを予測分析する機能や、障害分析に基づいて予防処理を行う機能はありません。

ZFS に障害が発生すると、fmd からの次のようなメッセージが表示されます。


SUNW-MSG-ID: ZFS-8000-D3, TYPE: Fault, VER: 1, SEVERITY: Major
EVENT-TIME: Fri Aug 28 09:10:27 PDT 2009
PLATFORM: SUNW,Sun-Fire-T200, CSN: -, HOSTNAME: neo
SOURCE: zfs-diagnosis, REV: 1.0
EVENT-ID: d6725ad6-4546-6c48-fa16-eace4d371981
DESC: A ZFS device failed.  Refer to http://sun.com/msg/ZFS-8000-D3 for more information.
AUTO-RESPONSE: No automated response will occur.
IMPACT: Fault tolerance of the pool may be compromised.
REC-ACTION: Run 'zpool status -x' and replace the bad device.

推奨される操作として、zpool status コマンドの指示に従って再調査することにより、障害をすばやく特定して解決することができます。

報告された ZFS の問題から回復する例については、「見つからないデバイスに関する問題を解決する」を参照してください。

新しい zpool clear コマンド

Solaris 10 6/06 リリース: このリリースには、デバイスやプールに関連するエラーカウントをクリアーするための zpool clear コマンドが含まれています。以前は、zpool online コマンドを使ってプール内のデバイスがオンラインになったときに、エラー数がクリアーされていました。詳細は、zpool(1M) および 「ストレージプールのデバイスをクリアーする」を参照してください。

NFSv4 ACL コンパクト形式

Solaris 10 6/06 リリース: このリリースでは、次の 3 つの NFSv4 ACL 形式を使用できます。冗長、定位置、およびコンパクトです。ACL を設定および表示するときに、新しいコンパクトおよび定位置 ACL 形式を使用できます。3 つの ACL 形式は、chmod コマンドを使ってすべて設定できます。コンパクトおよび定位置の ACL 形式を表示するときは ls -V コマンドを、冗長 ACL 形式を表示するときは ls -v コマンドを使用できます。

詳細は、「ZFS ファイルの ACL をコンパクト形式で設定および表示する」、および chmod(1)ls(1) のマニュアルページを参照してください。

ファイルシステム監視ツール (fsstat)

Solaris 10 6/06 リリース: 新しいファイルシステム監視ツール fsstat を使用すると、ファイルシステムの動作を報告できます。アクティビティーは、マウントポイント単位またはファイルシステムタイプ単位で報告できます。一般的な ZFS ファイルシステムアクティビティーの例を示します。


$ fsstat zfs
 new  name   name  attr  attr lookup rddir  read read  write write
 file remov  chng   get   set    ops   ops   ops bytes   ops bytes
7.82M 5.92M 2.76M 1.02G 3.32M  5.60G 87.0M  363M 1.86T 20.9M  251G zfs

詳細は、fsstat(1M) のマニュアルページを参照してください。

Web ベースの ZFS 管理

Solaris 10 6/06 リリース: Web ベースの ZFS 管理ツールを使用して、さまざまな管理アクションを実行できます。このツールでは、次の処理を実行できます。

  • 新規ストレージプールを作成する。

  • 既存のプールに容量を追加する。

  • 既存のプールを別のシステムに移動 (エクスポート) する。

  • 以前にエクスポートしたストレージプールを別のシステムで使用できるようにインポートする。

  • ストレージプールに関する情報を表示する。

  • ファイルシステムを作成する。

  • ボリュームを作成する。

  • ファイルシステムまたはボリュームのスナップショットを作成する。

  • ファイルシステムを以前のスナップショットにロールバックする。

セキュリティー保護された Web ブラウザから次の URL の ZFS 管理コンソールにアクセスできます。


https://system-name:6789/zfs

正しい URL を入力しても ZFS 管理コンソールにアクセスできない場合は、サーバーが起動していない可能性があります。サーバーを起動するには、次のコマンドを実行します。


# /usr/sbin/smcwebserver start

システムをブートするときにサーバーを自動的に実行するには、次のコマンドを実行します。


# /usr/sbin/smcwebserver enable

注 –

Solaris 管理コンソール (smc) を使って ZFS ストレージプールまたは ZFS ファイルシステムを管理することはできません。


ZFS の概要

ZFS ファイルシステムは、ファイルシステムの管理方法を根底から変える革命的な新しいファイルシステムであり、現在利用できるほかのファイルシステムにはない機能と特長を備えています。ZFS は、堅牢性と拡張性を実現しながら、管理しやすいファイルシステムとして設計されています。

プールされた ZFS ストレージ

ZFS では、物理ストレージを管理するために、「ストレージプール」という概念を使用します。従来のファイルシステムは、1 つの物理デバイス上に構築されていました。複数のデバイスへの対応とデータの冗長性を実現するために、「ボリュームマネージャー」の概念が導入されました。ファイルシステムを変更しなくても複数のデバイスが利用できるように、1 つのデバイスイメージを使用しています。このファイルシステムの設計は、仮想化したボリューム上の物理的なデータの配置を制御する手段を用意していないため、ファイルシステムをより複雑にし、ある面でのファイルシステムの進化を阻んできました。

ZFS では、ボリューム管理は一切不要です。ZFS では、仮想化されたボリュームを作成する代わりに、デバイスをストレージプールに集約します。ストレージプールは、ストレージの物理特性 (デバイスのレイアウト、データの冗長性など) を記述したもので、ファイルシステムを作成できる任意のデータストアとして機能します。ファイルシステムが個々のデバイスに制約されなくなり、デバイスの領域をプール内のすべてのファイルシステムで共有することができます。ファイルシステムのサイズを事前に決定する必要はなくなりました。ファイルシステムのサイズは、ストレージプールに割り当てられた領域内で自動的に拡張します。新しいストレージを追加すると、何も操作しなくても、プール内のすべてのファイルシステムで追加した領域をすぐに使用できます。多くの点で、ストレージプールは仮想的なメモリーシステムと言えます。システムに DIMM メモリーを追加したときに、メモリーの構成と各プロセスへの割り当てを実行するコマンドの呼び出しをオペレーティングシステムから要求されることはありません。追加したメモリーは、システムのすべてのプロセスによって自動的に使用されます。

トランザクションのセマンティクス

ZFS はトランザクションファイルシステムです。つまり、ファイルシステムの状態がディスク上で常に一定であることを意味します。従来のファイルシステムは、データをその場所で上書きします。このため、たとえば、データブロックが割り当てられてからディレクトリにリンクされるまでの間にマシンの電源が切断された場合、ファイルシステムは不整合な状態のままになります。従来、この問題は fsck コマンドを使用して解決されていました。このコマンドは、ファイルシステムの状態を調査および確認し、そのプロセスに不整合な状態があれば修復しようとするコマンドでした。この問題は管理者にとって大きな負担であり、発生する可能性のある問題がすべて解決される保証もありませんでした。最近では、ファイルシステムに「ジャーナリング」の概念が導入されました。ジャーナリングプロセスでは各処理がそれぞれのジャーナルに記録されるため、システムのクラッシュが発生したときに処理を安全に再現できます。このプロセスでは、不必要な負荷が発生します。これはデータを 2 回書き込む必要があるためで、多くの場合、ジャーナルを正しく再現できないなどの新しい問題が発生します。

トランザクションファイルシステムでは、データは「コピーオンライト」セマンティクスを使用して管理されます。データが上書きされることはなく、一覧の処理が完全に確定されるか、完全に無視されます。この方法では、電源が突然切断されたりシステムがクラッシュしても、ファイルシステムが破壊されることはありません。このため、fsck に相当するコマンドは必要ありません。直近に書き込まれたデータが失われることがあっても、ファイルシステム自体の整合性は常に保持されます。また、O_DSYNC フラグを使用して書き込まれる同期データは、書き込まれてから戻ることが常に保証されているため、失われることがありません。

チェックサムと自己修復データ

ZFS では、すべてのデータおよびメタデータのチェックサムはユーザーが選択したアルゴリズムを使って計算されます。チェックサムの機能を持つ従来のファイルシステムでは、ボリューム管理層および従来のファイルシステムの設計のために、強制的にブロック単位でチェックサムが計算されていました。従来の設計では、ブロック全体を不正な場所に書き込むなどの確実な障害モードのときに、実際には正しく計算されていないデータのチェックサムを正しく計算された結果にすることがあります。ZFS のチェックサムはそのような障害モードを検出し、障害モードから正常に回復できるような方法で格納されます。すべてのチェックサムの計算とデータの回復は、ファイルシステム層でアプリケーションに透過的に実行されます。

また、ZFS は自己修復データも備えています。ZFS のストレージプールは、ミラー化や RAID-5 と同種のデバイスなど、さまざまなレベルのデータ冗長性に対応しています。不正なデータブロックが検出されると、ZFS は別の冗長コピーから正しいデータを取得し、不正なデータを適切なコピーで置き換えて修復します。

優れたスケーラビリティー

ZFS は、これまででもっともスケーラブルなファイルシステムとなるように、新たな視点から設計されています。ファイルシステム自体は 128 ビットで、25 京 6000 兆 (256 クアデリリオン) ゼタバイトの記憶域に対応しています。すべてのメタデータは動的に割り当てられるため、i ノードを事前に割り当てたり、初回作成時にファイルシステムのスケーラビリティーを制限する必要はありません。すべてのアルゴリズムは、スケーラビリティーを考慮して記述されています。ディレクトリには、248 (256 兆) のエントリを格納することができ、ファイルシステムの数およびファイルシステムに格納できるファイル数の制限はありません。

ZFS スナップショット

スナップショット」とは、ファイルシステムまたはボリュームの読み取り専用コピーのことです。スナップショットは、短時間で簡単に作成できます。最初のスナップショットのために、プール内の領域が余分に消費されることはありません。

有効なデータセット内のデータが変更されると、スナップショットは古いデータを参照し続けるための領域を消費します。その場合、スナップショットのため、古いデータの領域は解放されずプールに戻されません。

簡素化された管理

ZFS の重要な特長として、管理モデルが大幅に簡素化されていることが挙げられます。ZFS では、階層構造のファイルシステムレイアウト、プロパティーの継承、およびマウントポイントと NFS 共有セマンティクスの自動管理により、複数のコマンドを使用したり、構成ファイルを編集したりしなくても、ファイルシステムを簡単に作成できます。割り当て制限や予約を設定したり、圧縮の有効/無効を切り替えたり、大量のファイルシステムのマウントポイントを管理したりする操作を、1 つのコマンドだけで簡単に実行することができます。デバイスを検査したり修復したりするときも、ボリュームマネージャーコマンドを詳細に理解している必要はありません。ファイルシステムのスナップショットは、数に制限なくすぐに作成できます。ファイルシステムは、個別にバックアップおよび復元できます。

ZFS では、ファイルシステムを階層構造で管理するので、割り当て制限、予約、圧縮、マウントポイントなどのプロパティーを簡単に管理できます。この管理モデルでは、ファイルシステムが重要な役割を果たします。ファイルシステム自体は新しいディレクトリと同じようにとても簡単に操作できるので、ユーザー、プロジェクト、ワークスペースなどのために個別のファイルシステムを作成することをお勧めします。この設計を利用して、きめの細かい管理ポイントを定義できます。

ZFS の用語

ここでは、このマニュアルで使用される基本的な用語について説明します。

代替ブート環境

lucreate コマンドによって作成され、場合によっては luupgrade コマンドで更新されているが、現時点ではアクティブなブート環境または主ブート環境ではないブート環境。luactivate コマンドを実行することにより、代替ブート環境 (ABE) を主ブート環境に (PBE) 変更できます。

チェックサム

ファイルシステムブロック内の 256 ビットのハッシュデータ。チェックサム機能には、単純で高速な fletcher2 (デフォルト) から SHA256 などの暗号強度の高いハッシュまで、さまざまなものがあります。

クローン

初期コンテンツがスナップショットの内容と同じであるファイルシステム。

クローンの詳細については、「ZFS クローンの概要」を参照してください。

データセット

次の ZFS エンティティーの総称名。 クローン、ファイルシステム、スナップショット、またはボリューム。

各データセットは、ZFS 名前空間内で一意の名前で識別されます。データセットは、次の形式を使用して識別されます。

pool/path[ @snapshot]

pool

データセットを格納するストレージプールの名前

path

データセットオブジェクトのスラッシュ区切りのパス名

snapshot

データセットのスナップショットを識別するオプションコンポーネント

データセットの詳細については、第 6 章ZFS ファイルシステムの管理を参照してください。

ファイルシステム

標準のシステム名前空間内にマウントされ、別のファイルシステムのように動作する、filesystem タイプの ZFS データセット。

ファイルシステムの詳細については、第 6 章ZFS ファイルシステムの管理を参照してください。

ミラー

複数のディスク上にデータの同一コピーを格納する仮想デバイス。ミラー上のいずれかのディスクで障害が発生した場合には、ミラー上の別のディスクにある同じデータを利用できます。

pool

デバイスの論理グループ。使用可能なストレージのレイアウトおよび物理特性を記述します。データセットの領域は、プールから割り当てられます。

ストレージプールの詳細については、第 4 章ZFS ストレージプールの管理を参照してください。

主ブート環境

lucreate コマンドによって代替ブート環境の構築に使用されるブート環境。デフォルトでは、主ブート環境 (PBE) は現在のブート環境です。このデフォルトは、lucreate -s オプションを使用して無効にすることができます。

RAID-Z

データとパリティーを複数のディスクに格納する仮想デバイスで、RAID-5 に似ています。RAID-Z の詳細については、「RAID-Z ストレージプール構成」を参照してください。

再同期化

あるデバイスのデータを別のデバイスに転送する処理のことを「再同期化」と言います。たとえば、ミラーコンポーネントが置き換えられてオフラインになっている場合には、最新のミラーコンポーネントのデータが新しく復元されたミラーコンポーネントにコピーされます。この処理は、従来のボリューム管理製品では「ミラー再同期化」と呼ばれています。

ZFS の再同期化の詳細については、「再同期化の状態を表示する」を参照してください。

snapshot

特定の時点におけるファイルシステムまたはボリュームの読み取り専用イメージ。

スナップショットの詳細については、「ZFS スナップショットの概要」を参照してください。

仮想デバイス

プール内の論理デバイス。物理デバイス、ファイル、または一連のデバイスを仮想デバイスに設定できます。

仮想デバイスの詳細については、「ストレージプールの仮想デバイスの情報を表示する」を参照してください。

ボリューム

物理デバイスをエミュレートするために使用するデータセット。たとえば、スワップデバイスとして ZFS ボリュームを作成できます。

ZFS ボリュームの詳細については、「ZFS ボリューム」を参照してください。

ZFS コンポーネントに名前を付けるときの規則

各 ZFS コンポーネントには、次の規則に従って名前を付ける必要があります。

  • 空のコンポーネントは許可されません。

  • 各コンポーネントに使用できる文字は、英数字および次の 4 つの特殊文字だけです。

    • 下線 (_)

    • ハイフン (-)

    • コロン (:)

    • ピリオド (.)

  • プール名の先頭は英字にする必要があります。ただし、次の制限事項があります。

    • c[0-9] の順序で始まる名前は許可されません。

    • log という名前は予約されています。

    • mirrorraidz、または spare で始まる名前は許可されません。これらの名前は予約されています。

    また、プール名にはパーセント記号 (%) を含めないでください。

  • データセット名の先頭は英数字にする必要があります。データセット名にはパーセント記号 (%) を含めないでください。