Skip to main content

Fujitsu

Japan

まっちーの仮想化講座
第11回:Oracle Solaris 11の標準ファイルシステム“ZFS”

2012年4月10日


 

Oracle Solaris 11から、標準ファイルシステムがUFSからZFSに変更になり、/(ルート)ファイルシステムはZFSのみ使用することができます。
ZFSはOracle Solaris 10でも使用することができたのですが、みなさん、すでにお使いでしょうか?UFSと比べて、機能も充実しており、慣れるとZFSの方が簡単に感じられると思います。そこで今回はZFSの設定や機能について、前回作成したOracle Solaris 11の環境を利用してご紹介したいと思います。 なお、ZFSの概要はこちらをご覧ください。

ストレージプールの作成

ZFSの設定をするには、まずはストレージプールを作成します。ストレージプールに登録するディスクをformatコマンドで確認しましょう。

root@s11-0:~# format
Searching for disks...done

AVAILABLE DISK SELECTIONS:
       0. c2d0 
          /virtual-devices@100/channel-devices@200/disk@0
       1. c2d2 
          /virtual-devices@100/channel-devices@200/disk@2
       2. c2d3 
          /virtual-devices@100/channel-devices@200/disk@3
Specify disk (enter its number):

c2d0は前回Oracle Solaris 11をインストールしたディスクですので、c2d2とc2d3を使ってストレージプールを作成します。

ストレージプールはzpoolコマンドを使用して作成します。今回はプール名をpool1としました。

root@s11-0:~# zpool create pool1 c2d2 c2d3
'pool1' successfully created, but with no redundancy; failure of one
device will cause loss of the pool

プール作成時に何やら表示されました。これはRAIDの指定をしなかったので、「冗長性がありませんよ」という警告です。Solaris 10では表示されなかったのですが、Solaris 11から表示されるようになりました。RAIDの指定をしないと、ストライピング(RAID 0)になります。
なお、zpoolコマンドでプールを作成するときに、以下のように指定すると、ミラー構成になります。

root@s11-0:~# zpool create pool1 mirror c2d2 c2d3

設定できるRAID構成にはmirrorのほかに、シングルパリティ(RAID 5相当)の”raidz”、ダブルパリティ(RAID 6相当)の”raidz2”、トリプルパリティの”raidz3”があります。

プールを作成したら、zpool statusコマンドで状態を確認しましょう。

root@s11-0:~# zpool status pool1
  pool: pool1
 state: ONLINE
  scan: none requested
config:

        NAME    STATE     READ WRITE CKSUM
        pool1   ONLINE       0     0     0
          c2d2  ONLINE       0     0     0
          c2d3  ONLINE       0     0     0

errors: No known data errors

ファイルシステムの作成

ストレージプールを作成したら、今度はファイルシステムを作ってみましょう。ファイルシステムはzfsコマンドで作成します。
先ほど作成したpool1にfilesys1とfilesys2を作成します。

root@s11-0:~# zfs create pool1/filesys1
root@s11-0:~# zfs create pool1/filesys2

作成したら、zfs listコマンドで状態を確認しましょう。

root@s11-0:~# zfs list
NAME                       USED  AVAIL  REFER  MOUNTPOINT
pool1                      166K  19.6G    33K  /pool1
pool1/filesys1              31K  19.6G    31K  /pool1/filesys1
pool1/filesys2              31K  19.6G    31K  /pool1/filesys2

rpool                     5.08G  9.44G  73.5K  /rpool
rpool/ROOT                1.98G  9.44G    31K  legacy
・・・省略・・・

ZFSの特長の一つとして、ファイルシステムを作っただけで、マウントポイントが自動で作成されて、そこにマウントされます。UFSで必要なnewfs/mountコマンド相当のことがzfs createコマンドだけで実施できます。

root@s11-0:~# mount | grep pool1
/pool1 on pool1 read/write/setuid/devices/rstchown/nonbmand/exec/xattr/atime/dev=391000d on 水  2月 22 19:13:23 2012
/pool1/filesys1 on pool1/filesys1 read/write/setuid/devices/rstchown/nonbmand/exec/xattr/atime/dev=391000e on 水  2月 22 19:14:41 2012
/pool1/filesys2 on pool1/filesys2 read/write/setuid/devices/rstchown/nonbmand/exec/xattr/atime/dev=391000f on 水  2月 22 19:14:52 2012

このようにZFSは、zpool/zfsコマンドのみで簡単に作成することができます。

重複排除機能(deduplication)

ファイルシステムが簡単に作れましたので、Solaris 11の新機能である「重複排除機能」を試してみたいと思います。まずはzfs setコマンドで重複排除機能をonにします。

root@s11-0:~# zfs set dedup=on pool1/filesys1
root@s11-0:~# zfs set dedup=on pool1/filesys2

テストで使うデータを各ファイルシステムに配置します。ここでは、Solaris 11のText InstallerのISOイメージを配置しました。

root@s11-0:~# ls -lh /pool1/filesys1
total 1078095
-rw-r--r--   1 root     root        526M  2月 22日  19:17 sol-11-1111-text-sparc.iso
root@s11-0:~# ls -lh /pool1/filesys2
total 1078089
-rw-r--r--   1 root     root        526M  2月 22日  19:18 sol-11-1111-text-sparc.iso

では、本当に重複データが排除されているのか見てみましょう。重複排除機能はプール単位で各ファイルの共通ブロックを共有しますので、重複排除率はプール単位で確認します。

root@s11-0:~# zpool list
NAME    SIZE  ALLOC   FREE  CAP  DEDUP  HEALTH  ALTROOT
pool1  19.9G   502M  19.4G   2%  2.10x  ONLINE  -
rpool  14.8G  4.98G  9.77G  33%  1.00x  ONLINE  -

約500MBのファイルをpool1に二つ配置しましたが、使用されている容量は1GBではなく、
約500MB(=19.9G-19.4G)になっていることが確認できます。また、DEDUP(重複排除率)の値を見てみると、2.10xということで、約半分になっていることが確認できます。
同じファイルを配置しましたので当然の結果ですが、重複排除機能が働いていることがわかると思います。
今回保存したISOイメージが、AからEまでの6つのブロックで構成されていたとすると、重複排除機能がonの場合とoffの場合を図にすると、以下のようになります。同一ファイル内でも同じブロックの場合は共有されます。

圧縮機能

重複排除機能と似た機能で圧縮機能もあります。これはSolaris 10から実装されていた機能です。この圧縮機能の効果も確認してみましょう。
まずはファイルシステムを作成します。

root@s11-0:~# zfs create -o compress=on pool1/filesys3

今回はファイルシステム作成時に-oオプションを指定して、圧縮機能をonにしました。では、同じISOイメージをコピーします。

root@s11-0:~# ls -lh /pool1/filesys3
total 865721
-rw-r--r--   1 root     root        526M  2月 22日  20:04 sol-11-1111-text-sparc.iso

どのくらい圧縮されているか確認しましょう。

root@s11-0:~# zfs list pool1/filesys3
NAME            USED  AVAIL  REFER  MOUNTPOINT
pool1/filesys3  423M  18.7G   423M  /pool1/filesys3
root@s11-0:~# zfs get compressratio pool1/filesys3
NAME            PROPERTY       VALUE  SOURCE
pool1/filesys3  compressratio  1.18x  -

526MBのファイルが423MBに圧縮されていることがわかります。圧縮比は1.18xということで約20%小さくなっていますね。

今回の結果では重複排除機能の方がディスクの使用量を節約する効果がありましたが、もちろん、ファイルの種類によっては、圧縮機能の方が効果がある場合もあります。
なお、重複排除機能と圧縮機能を併せて使用することもできます。

ZFSは豊富な機能が標準で実装されていますが、設定や基本的な使い方は簡単です。zpool create/zfs createコマンドだけで使うことができます。
みなさんもぜひZFSを使ってみてください。


応援メッセージはtwitterにて、ハッシュタグ #fjsparcOpen a new window までお願いします。