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 ルートファイルシステムへの 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
# 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 ファイルシステムに追加されています。
# 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
Solaris 10 10/09 では以下のソフトウェアがアップデートしています。
Solaris 10 10/09 リリースの新機能 を参考にしてください。
Solaris のバージョン間の機能の違いや、新機能の実装のタイミングなどは http://www.sun.com/software/solaris/whats_new.jsp もわかりやすいです。