トップページ » Solaris10 その他, ZFS関連 » Solaris 10 10/09 (Update8) の新機能紹介
カテゴリー
My Yahoo!に追加
Sun社提供情報
Solarisパッケージダウンロード
Sunマシンは買うには
blogs.sun.com
お勧めサイト
プライベートリンク

Solaris 10 10/09 (Update8) の新機能紹介

Solaris 10 10/09 (u8) は http://jp.sun.com/practice/software/solaris/get.jsp からダウンロード可能です。

この Solaris リリースの新しい機能の中で気になるものをいくつか紹介します。

パッケージとパッチに関して

SVR4 パッケージコマンドのパフォーマンス改善:
SVR4 パッケージコマンド(pkgadd, pkgrm, pkginfo など)が改良されたことにより、ゾーンのインストール時間などが劇的に短縮されるようです。どのくらい短縮されたかを簡単にチェックすると以下のような結果が得られました。

# cat /etc/release; uname -a

                        Solaris 10 5/09 s10x_u7wos_08 X86
           Copyright 2009 Sun Microsystems, Inc.  All Rights Reserved.
                        Use is subject to license terms.
                             Assembled 30 March 2009
SunOS chapterhouse 5.10 Generic_141415-09 i86pc i386 i86pc

# time zoneadm -z zone1 install
Preparing to install zone .
Creating list of files to copy from the global zone.
Copying <2905> files to the zone.
Initializing zone product registry.
Determining zone package initialization order.
Preparing to initialize <1453> packages on the zone.
Initialized <1453> packages on zone.
Zone  is initialized.
Installation of these packages generated errors: 
The file  contains a log of the zone installation.

real    5m48.476s
user    0m45.538s
sys     2m9.222s
#  cat /etc/release; uname -a

                       Solaris 10 10/09 s10x_u8wos_08a X86
           Copyright 2009 Sun Microsystems, Inc.  All Rights Reserved.
                        Use is subject to license terms.
                           Assembled 16 September 2009
SunOS corrin 5.10 Generic_141445-09 i86pc i386 i86pc

# time zoneadm -z zone1 install
Preparing to install zone .
Creating list of files to copy from the global zone.
Copying <2915> files to the zone.
Initializing zone product registry.
Determining zone package initialization order.
Preparing to initialize <1432> packages on the zone.
Initialized <1432> packages on zone.
Zone  is initialized.
Installation of these packages generated errors: 
The file  contains a log of the zone installation.

real    3m4.677s
user    0m44.593s
sys     0m48.003s

上記のように、かなり改善されてます。Solaris 10 5/09 と比較すると Solaris 10 10/09 では約半分の時間でゾーンのインストールが完了します。特に sys の値が 129 秒から 48 秒に大幅に短縮されているのがポイントです。

ゾーンの並列パッチ:
Solaris 10 10/09 より前のリリースではパッチ適用プロセスはシングルスレッドだったため、非大域ゾーンを持つシステムではパッチ適用時間が結構長かったのです。Solaris 10 10/09 リリースからは、システムにパッチを適用するために使用するスレッドの数を指定できるようになりました。スレッドの数を指定するには /etc/patch/pdo.conf ファイルの num_proc の値を変更するだけです。デフォルトは 1 に設定されています。ちなみに num_proc の最大値はオンラインのCPU数の1.5倍に制限されています。

この機能はパッチ 119254-66 (SPARC) もしくは 119255-66 (x86) を適用すれば Solaris 10 10/09 以前のシステムでも利用可能です。

ZFS の強化

ZFS ルートファイルシステムへの Flash アーカイブのインストール:
Solaris 10 10/08 リリースから ZFS ルートファイルシステムをサポートしていますが、Flash インストールでは ZFS ルートファイルシステムが選択できず、UFS ルートファイルシステムになっていました。Solaris 10 10/09 リリースからは既存の ZFS ルートファイルシステムから作成した Flash アーカイブをインストールすることができるようになっています。また、Solaris 10 10/08 リリース以降のシステムにパッチ 119534-15, 124630-26 (SPARC) もしくは 119535-15, 124631-27 (x86) を適用すればこの機能が利用できます。ただし、使用する Flash アーカイブが ZFS ルートファイルシステムから作成されていることや、差分アーカイブが利用できないなど、いくつかの制限はまだあります。詳細な情報は ZFS ルートファイルシステムをインストールする (フラッシュアーカイブインストール) を参考にしてください。

プールの作成時に ZFS ファイルシステムプロパティーが設定可能に:
Solaris 10 10/09 リリースより前は、ZFS ファイルシステムのプロパティーの設定は、ZFS プールを作成して、初期のファイルシステムが作成された後にしか行えませんでした。このことにより、既存のマウントされたファイルシステムと同じ名前のプールが作成できないなど、些細な問題がありました。Solaris 10 10/09 以降では zpool create コマンドに -O オプションを指定することにより ZFS ファイルシステムのプロパティーをあらかじめ設定することが可能です。

 zpool create -O mountpoint=/data,copies=3,compression=on datapool c1t1d0 c1t2d0

ZFS 読み取りキャッシュ (L2ARC):
Solaris 10 10/09 リリースでは、プールを作成し、ストレージプールのデータをキャッシュするための「キャッシュデバイス」を指定することができます。キャッシュデバイスにより、メインメモリーとディスクの間にキャッシュ層が追加されます。特に SSD などの高速なデバイスをキャッシュとして使用すると、ほぼ静的なコンテンツをランダムに読み込む作業負荷のパフォーマンスが大幅に向上します。

L2ARC デバイスは以下の例のように cache キーワードを使用して ZFS プールに組み込みます。

 
# zpool create datapool mirror c1t1d0 c1t2d0 cache c1t3d0 c1t4d0 spare c1t5d0

# zpool status datapool
  pool: datapool
 state: ONLINE
 scrub: none requested
config:

        NAME        STATE     READ WRITE CKSUM
        datapool    ONLINE       0     0     0
          mirror    ONLINE       0     0     0
            c1t1d0  ONLINE       0     0     0
            c1t2d0  ONLINE       0     0     0
        cache
          c1t3d0    ONLINE       0     0     0
          c1t4d0    ONLINE       0     0     0
        spares
          c1t5d0    AVAIL

errors: No known data errors

ZIL (ZFS Intent Log:書き込みログ)とは異なり、L2ARC キャッシュデバイスは zpool remove コマンドで動的に追加・削除が可能です。現時点では zpool remove が使用できるのは cache デバイスと spare デバイスのみです。

# zpool remove datapool c1t3d0
# zpool remove datapool c1t4d0

# zpool status datapool
  pool: datapool
 state: ONLINE
 scrub: none requested
config:

        NAME        STATE     READ WRITE CKSUM
        datapool    ONLINE       0     0     0
          mirror    ONLINE       0     0     0
            c1t1d0  ONLINE       0     0     0
            c1t2d0  ONLINE       0     0     0
        spares
          c1t5d0    AVAIL

errors: No known data errors


# zpool add datapool cache c1t3d0

# zpool status datapool
  pool: datapool
 state: ONLINE
 scrub: none requested
config:

        NAME        STATE     READ WRITE CKSUM
        datapool    ONLINE       0     0     0
          mirror    ONLINE       0     0     0
            c1t1d0  ONLINE       0     0     0
            c1t2d0  ONLINE       0     0     0
        cache
          c1t3d0    ONLINE       0     0     0
        spares
          c1t5d0    AVAIL

errors: No known data errors

新しいキャッシュ制御プロパティー:
Solaris 10 10/09 からはキャッシュを制御する以下のような 2 つの新しいプロパティーが追加されています。 Two new ZFS properties are introduced with Solaris 10 10/09. These control what what is stored (nothing, data + metadata, or metadata only) in the ARC (memory) and L2ARC (external) caches. These new properties are

  • primarycache - メモリ上の ARC キャッシュに格納するデータを制御
  • secondarycache - 外部デバイス上の L2ARC キャッシュに格納するデータを制御
これらのプロパティーの値には以下が設定できます。
  • none - 何もキャッシュしない。(DBサーバーなどが持つ別のキャッシュアルゴリズムを使用する場合などに、ZFSのキャッシュ機能を無効にすることがあります。)
  • metadata - ファイルシステムのメタデータのみをキャッシュします。
  • all - ファイルシステムのデータとメタデータの両方をキャッシュします。
# zpool create -O primarycache=metadata -O secondarycache=all datapool c1t1d0 c1t2d0 cache c1t3d0 

ユーザーおよびグループレベルでの quota 設定:
ZFS では当初からファイルシステムレベルでのディスク領域の割り当て機能(quota)があり、ファイルシステムを細分化することでユーザーのホームディレクトリなどわかりやすい領域であれば、quota を設定して何不自由なく領域を割り当てることができていました。Solaris 10 10/09 リリースではさらに一歩進めて、UFS と同様に大きな区画のファイルシステム内でもユーザーやグループレベルで quota の設定ができるようになりました。ユーザーやグループレベルでの quota 機能を利用するには zpool バージョン 15 以降かつ zfs バージョン 4 以降である必要があります。

zpool や zfs のバージョンは以下のように確認できます。ちなみに Solaris 10 10/09 の zpool のバージョンは 15 です。以下の例では Solaris Express Community Edition の b121 を使用していますので 18 になっています。

# zpool get version rpool
NAME   PROPERTY  VALUE    SOURCE
rpool  version   18       default


# zpool upgrade -v
This system is currently running ZFS pool version 18.

The following versions are supported:

VER  DESCRIPTION
---  --------------------------------------------------------
 1   Initial ZFS version
 2   Ditto blocks (replicated metadata)
 3   Hot spares and double parity RAID-Z
 4   zpool history
 5   Compression using the gzip algorithm
 6   bootfs pool property
 7   Separate intent log devices
 8   Delegated administration
 9   refquota and refreservation properties
 10  Cache devices
 11  Improved scrub performance
 12  Snapshot properties
 13  snapused property
 14  passthrough-x aclinherit
 15  user/group space accounting
 16  stmf property support
 17  Triple-parity RAID-Z
 18  snapshot user holds
For more information on a particular version, including supported releases, see:

http://www.opensolaris.org/os/community/zfs/version/N

Where 'N' is the version number.


# zfs get version rpool/newdata
NAME           PROPERTY  VALUE    SOURCE
rpool/newdata  version   4 

# zfs upgrade -v
The following filesystem versions are supported:

VER  DESCRIPTION
---  --------------------------------------------------------
 1   Initial ZFS filesystem version
 2   Enhanced directory entries
 3   Case insensitive and File system unique identifier (FUID)
 4   userquota, groupquota properties

For more information on a particular version, including supported releases, see:

http://www.opensolaris.org/os/community/zfs/version/zpl/N

Where 'N' is the version number.

上記のように問題ないので、ユーザーやグループに quota を設定してどのようになるのかを確認してみます。とりあえずユーザー bobn への割り当てを 2GB、グループ local への割り当てを 1GB に設定してみます。ユーザー bobn はグループ local に所属していると仮定しています。

# zfs set groupquota@local=1g rpool/newdata
# zfs set userquota@bobn=2g rpool/newdata

# su - bobn

% mkfile 500M /rpool/newdata/file1
% mkfile 500M /rpool/newdata/file2
% mkfile 500M /rpool/newdata/file3
file3: initialized 40370176 of 524288000 bytes: Disc quota exceeded

予想通り、グループの割り当ての上限に引っ掛かって file3 の作成でエラーが出ています。そこで作成できた 2 つのファイルの所有グループを local 以外の別のグループに変更してしまいます。そうすれば、bobn の上限である 2GB まではファイルを作成できるはずです。

% rm /rpool/newdata/file3
% chgrp sales /rpool/newdata/file1 /rpool/newdata/file2
% mkfile 500m /rpool/newdata/file3
Could not open /rpool/newdata/disk3: Disc quota exceeded

ありゃりゃ!何でかな?
まぁ落ち着きましょう。 実を言うと ZFS は非同期で処理をしています。鋭い読者は、前の手順で file3 を作成しようとしたときに、途中まで作成できたことも疑問だったかと思います。つまり、ZFS は現在のディスク使用量を正確にキャッチアップできていなかったわけです。以下のように sync してあげれば直ちに使用量が反映されますので期待通りに動いてくれます。(実際、運用ではそれほど問題にはならないでしょう。)

% sync
% mkfile 500M /rpool/newdata/file3
% mkfile 500M /rpool/newdata/file4
% mkfile 500M /rpool/newdata/file5
/rpool/newdata/disk5: initialized 140247040 of 524288000 bytes: Disc quota exceeded

と、予想通りに働いてくれました。
ところで、quota に対して各ユーザーやグループがどれくらいファイルシステムを使用しているのかを調べるにはどうしたらいいのでしょうか?
実は以下のように userused, groupused という新しいプロパティーの値で確認できます。

% zfs get userquota@bobn,userused@bobn rpool/newdata
NAME           PROPERTY        VALUE           SOURCE
rpool/newdata  userquota@bobn  2G              local
rpool/newdata  userused@bobn   1.95G           local

% zfs get groupquota@local,groupused@local rpool/newdata
NAME           PROPERTY          VALUE             SOURCE
rpool/newdata  groupquota@local  1G                local
rpool/newdata  groupused@local   1000M             local

% zfs get groupquota@sales,groupused@sales rpool/newdata
NAME           PROPERTY          VALUE             SOURCE
rpool/newdata  groupquota@sales  none              local
rpool/newdata  groupused@sales   1000M             local

% zfs get groupquota@scooby,groupused@scooby rpool/newdata
NAME           PROPERTY           VALUE              SOURCE
rpool/newdata  groupquota@scooby  -                  -
rpool/newdata  groupused@scooby   -   

新しいディスク使用量に関するプロパティー:
Solaris 10 10/09 では、以下の 4 つのプロパティーが ZFS ファイルシステムに追加されています。

  • usedbychildren (usedchild) - 指定したデータセットの子データセットによって使用される領域の量。
  • usedbydataset (usedds) - 指定したデータセット自体によって使用される領域の量。
  • usedbyrefreservation (usedrefreserv) - 指定したデータセットに設定されている refreservation によって使用される領域の量。
  • usertbysnapshots (usedsnap) - 指定したデータセットのスナップショットによって消費される領域の量。
# zfs get all datapool | grep used
datapool  used                  5.39G                  -
datapool  usedbysnapshots       19K                    -
datapool  usedbydataset         26K                    -
datapool  usedbychildren        5.39G                  -
datapool  usedbyrefreservation  0                      -

これらの新しいプロパティーは zfs list -o space コマンドを使用してわかりやすく表示することができます。この表示はスナップショットやクローンなどを作成したり、予約(reservation)を多用したりして、実際のファイルシステムの使用量がわかりづらくなっているときに非常に便利です。

# zfs list -r -o space datapool
NAME           AVAIL   USED  USEDSNAP  USEDDS  USEDREFRESERV  USEDCHILD
datapool        480M  5.39G       19K     26K              0      5.39G
datapool@now       -    19K         -       -              -          -
datapool/fs1    480M   400M         0    400M              0          0
datapool/fs2   1.47G  1.00G         0   1.00G              0          0
datapool/fs3    480M    21K         0     21K              0          0
datapool/fs4   2.47G      0         0       0              0          0
datapool/vol1  1.47G     1G         0     16K          1024M          0

ドライバの機能拡張

  • LSI 6180 コントローラでの MPxIO サポート
  • LSI MPT2.0準拠のSAS2.0コントローラ用のドライバ (mpt_sas)
  • x86: Broadcom NetXtreme II ギガビット Ethernet ドライバ (bcm5716c and bcm5716s)
  • x86: Intel VT-x での割り込み再マッピングのサポート
  • x86: AHCIドライバによる SATAテープデバイスのサポート
  • Sun StorageTek 6Gb/s SAS PCIe RAID HBA ドライバ (mt_sas)
  • Intel 82598/82599 10Gb PCI Express Ethernetコントローラ

オープンソースソフトウェアのアップデート

Solaris 10 10/09 では以下のソフトウェアがアップデートしています。

  • NTP 4.2.5
  • PostgreSQL 8.1.17, 8.2.13, 8.3.7
  • Samba 3.0.35

その他の情報は・・・

Solaris 10 10/09 リリースの新機能 を参考にしてください。

Solaris のバージョン間の機能の違いや、新機能の実装のタイミングなどは http://www.sun.com/software/solaris/whats_new.jsp もわかりやすいです。

Solaris10 その他, ZFS関連のその他のリンク

Solaris系技術トレーニング一覧

Solaris10システム管理基本コース
Solaris10ネットワーク・インターネットサーバー管理コース
セキュリティ・パフォーマンス管理・トラブルシューティング等
Sun Cluster、ボリューム管理ソフトウェア
仮想化技術全般
シンクライアント、SunRay、デスクトップソフトウェア
アイデンティティマネージメントサービス
アプリケーションサーバーとWebポータル
サーバー(ハードウェア)メンテナンス
Sun Java CAPS
MySQL