Skip to main content

Fujitsu

Japan

まっちーの仮想化講座
第12回:ZFSでサーバをストレージに

2012年5月15日


 

Oracle Solarisには、古くからファイルシステムを他のサーバと共用する機能(NFS)があります。すでにOracle Solarisをお使いの方は、NFSを使ってファイルサーバなどにしている方は多いのではないでしょうか。
ZFSにはNFSのほかにiSCSIなどを使ってボリュームを共有する機能も備わっています。これらの機能は、Oracle Solaris 10から実装されているのですが、Oracle Solaris 11では設定方法が変わっています。
そこで、今回はOracle Solaris 11のZFSを用いて、サーバをストレージにしてしまう方法をご紹介したいと思います。

NFSを使ったファイルシステム共有

まずはお馴染みのNFSを使ったファイルシステム共有の設定です。
前回作成したpool1に共有用のファイルシステムを作成し、そのファイルシステムにNFSの設定をします。

root@s11-0:~# zfs create pool1/sharefs1
root@s11-0:~# zfs set share=name=public,path=/pool1/sharefs1,prot=nfs,sec=sys, rw=*,public pool1/sharefs1

name=public,path=/pool1/sharefs1,prot=nfs,public=true,sec=sys,rw=*
root@s11-0:~# zfs set sharenfs=on rpool1/sharefs1

各設定値の詳細は、オラクル社のマニュアル(Oracle Solarisの管理:ZFSファイルシステム)を参照してください。

設定ができたら、shareコマンドを使って確認しましょう。

root@s11-0:~# share
public  /pool1/sharefs1 nfs     public,sec=sys,rw

NFSサーバ側の設定が完了しましたので、他のサーバ(クライアント)からマウントして動作を確認しましょう。

client# mount -F nfs 192.168.10.195:/pool1/sharefs1 /mnt
client# df -h /mnt

ファイルシステム     サイズ 使用済み 使用可能 容量      マウント先 192.168.10.195:/pool1/sharefs1
                        12G    33K    12G     1%    /mnt

さて、マウントはできましたが、今の設定ではNFSマウントした領域にクライアントから書き込むことはできません。これはNFSの設定をしたディレクトリに書き込み権限があるのがNFSサーバのrootユーザだけだからです。

client# touch /mnt/file1
touch: /mnt/file1 を作成できません: アクセス権がありません。

書き込みができるようにするためには、ディレクトリのパーミッションを変更したり、NFSのshareの設定を変更したりする必要があります。以下はNFSマウントする際に、root権限を与える設定の一例です。

root@s11-0:~# zfs set share=name=public,prot=nfs,anon=0 pool1/sharefs1
name=public,path=/pool1/sharefs1,prot=nfs,public=true,anon=0,sec=sys,rw=*
root@s11-0:~# share
public  /pool1/sharefs1 nfs     public, anon=0,sec=sys,rw

上記はanon=0の設定を追加しました。これは、NFS領域にマウントする際に、uid=0(root)の権限でマウントすることを意味します。
ただ、この設定ですと、すべてのクライアントにroot権限で読み込み/書き込み権限を与えることになりますので、みなさんの環境に合わせて適切なアクセス権を設定してください。

iSCSIターゲット機能

ZFSのボリュームをiSCSIのターゲットにすることができます。Solaris 10では、ZFSのプロパティにshareiscsiというものがあり、これをonにするだけでした。Solaris 11では、COMSTAR(Common Multiprotocol SCSI TARget)という新しい機能が実装され、iSCSIターゲット機能が新しくなっています。

パッケージのインストール

iSCSIターゲット機能を使うには、必要となるパッケージをリポジトリサーバからインストールする※必要があります。
※Solaris 11では、パッケージがIPS(Image Packaging System)形式になっており、IPSパッケージはリポジトリサーバからインストールします。IPSとリポジトリサーバについてはこちらをご参照ください。

root@s11-0:~# pkg install storage-server
           Packages to install:  50
       Create boot environment:  No
Create backup boot environment: Yes
            Services to change:   4

DOWNLOAD                                  PKGS       FILES    XFER (MB)
Completed                                50/50   6851/6851  137.2/137.2$<3>

PHASE                                        ACTIONS
Install Phase                              9197/9197

PHASE                                          ITEMS
Package State Update Phase                     50/50
Image State Update Phase                         2/2
Loading smf(5) service descriptions: 35/35

パッケージをインストールしたら、stmfサービスを有効にします。

root@s11-0:~# svcs stmf
STATE          STIME    FMRI
disabled       17:07:40 svc:/system/stmf:default
root@s11-0:~# svcadm enable stmf
root@s11-0:~# svcs stmf

STATE          STIME    FMRI
online         19:13:17 svc:/system/stmf:default

LUNの作成

次にLUNを作成する必要があります。まずはLUNとなるボリュームを作成します。

root@s11-0:~# zfs create -V 2g pool1/iscsitgt

zfs createコマンドに-Vオプションをつけると、ボリュームを作成することができます。今回は、2GBのボリュームを作成しました。
続いて、このボリュームをSCSIブロック型デバイスのLUNとして設定します。

root@s11-0:~# sbdadm create-lu /dev/zvol/rdsk/pool1/iscsitgt
Created the following LU:

              GUID                    DATA SIZE           SOURCE
--------------------------------  -------------------  ----------------
600144f000144ffbe5794f6c4b3f0001  2147483648           /dev/zvol/rdsk/pool1/iscsitgt
root@s11-0:~# sbdadm list-lu

Found 1 LU(s)

              GUID                    DATA SIZE           SOURCE
--------------------------------  -------------------  ----------------
600144f000144ffbe5794f6c4b3f0001  2147483648           /dev/zvol/rdsk/pool1/iscsitg

LUNが作成されてことを確認し、作成したLUNを公開します。

root@s11-0:~# stmfadm list-lu
LU Name: 600144F000144FFBE5794F6C4B3F0001
root@s11-0:~# stmfadm add-view 600144F000144FFBE5794F6C4B3F0001

LUNの構成を確認します。

root@s11-0:~# stmfadm list-view -l 600144F000144FFBE5794F6C4B3F0001
View Entry: 0
    Host group   : All
    Target group : All
    LUN          : 0

iSCSIターゲットの作成

まずはサービスを有効にします。

root@s11-0:~# svcadm enable -r iscsi/target

次にiSCSIターゲットを作成し、作成したターゲットの情報を確認します。

root@s11-0:~# itadm create-target
Target iqn.1986-03.com.sun:02:f169f809-ba92-c0a8-fa8c-e93e3dd01bc3 successfully created
root@s11-0:~# itadm list-target -v
TARGET NAME                                                  STATE    SESSIONS
iqn.1986-03.com.sun:02:f169f809-ba92-c0a8-fa8c-e93e3dd01bc3  online   0
        alias:                  -
        auth:                   none (defaults)
        targetchapuser:         -
        targetchapsecret:       unset
        tpg-tags:               default

これで、iSCSIターゲット側の設定は終了です。次はイニシエータ(クライアント)側の設定が必要になります。

イニシエータ

では、イニシエータからこのターゲットを認識させてみましょう。まずはiSCSIイニシエータサービスが有効になっているか確認します。無効になっていたら、有効にしてください。

initiator# svcs svc:/network/iscsi/initiator:default
STATE          STIME    FMRI
online          3月_23  svc:/network/iscsi/initiator:default

iSCSIターゲットの設定方法にはいくつか種類があるのですが、今回は静的な発見方法で設定します。iscsiadmコマンドでtarget nameを指定しますが、指定するtarget nameは、上記のitadm list-targetコマンドで確認した値です。

initiator# iscsiadm add static-config iqn.1986-03.com.sun:02:f169f809-ba92-c0a8-fa8c-e93e3dd01bc3,192.168.10.195

静的構成情報を確認します。

initiator# iscsiadm list static-config
Static Configuration Target: iqn.1986-03.com.sun:02:f169f809-ba92-c0a8-fa8c-e93e3dd01bc3,192.168.10.195:3260

静的ターゲット発見方式を有効にして、デバイスの再構成を行います。

initiator# iscsiadm modify discovery --static enable
initiator# devfsadm -i iscsi

では、formatコマンドで確認してみましょう。

initiator# format
Searching for disks...done

AVAILABLE DISK SELECTIONS:
       0. c0d0 
          /virtual-devices@100/channel-devices@200/disk@0
       1. c1t600144F000144FFBE5794F6C4B3F0001d0 
          /scsi_vhci/ssd@g600144f000144ffbe5794f6c4b3f0001

Specify disk (enter its number):

2GBのディスクとして認識されていますね。

このようにZFSを使うことで、サーバにストレージの機能を持たせることができます。前回ご紹介した重複排除機能や圧縮機能と併用することで、ディスク容量の節約をすることもできます。このような色々な機能が標準で実装されているのもZFSの魅力の一つですね。


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