Skip to content
ngram edited this page May 7, 2011 · 1 revision

ZFSの概要、作成方法

ストレージプールの作成

まずはじめに、単独または複数のHDDを利用してストレージプールの作成を行なう。 ストレージプールとはZFSで利用可能なFileSystemやディスクを作成するための元となる 仮想的なディスクである。ストレージプールという形にすることにより、 複数のディスクをその提供形態(RAIDなど)・ディスク容量の 差異にかかわらず仮想的な一つのディスクとして利用することが可能になる。

ストレージプール作成の前にディスクのデバイス名を調べる必要がある。 デバイス名はformatコマンドを利用することで調べることが可能である。

 # format
 Searching for disks...done
 
 AVAILABLE DISK SELECTIONS:
       0. c0t0d0 <DEFAULT cyl 19454 alt 2 hd 255 sec 63>
          /pci@0,0/pci103c,1714@5/disk@0,0
       1. c0t1d0 <ATA-Hitachi HDT72505-A7EA-465.76GB>
          /pci@0,0/pci103c,1714@5/disk@1,0
       2. c2t0d0 <WDC-WD2500BB-22GUC0-08.0-232.89GB>
          /pci@0,0/pci103c,1714@2,1/storage@4/disk@0,0
       3. c3t0d0 <USB-HS-WDC WD3200JB-00K-0.01-298.09GB>
          /pci@0,0/pci103c,1714@2,1/storage@3/disk@0,0
       4. c4t0d0 <ATA-WDC WD10EACS-00D-1A01-931.51GB>
          /pci@0,0/pci103c,1714@5,1/disk@0,0
       5. c4t1d0 <ATA-SAMSUNG HD103UJ-1114-931.51GB>
          /pci@0,0/pci103c,1714@5,1/disk@1,0
 Specify disk (enter its number): 

「AVAILABLE DISK SELECTIONS:」の後のリストに書かれているc0t0d0などが ディスクのデバイス名となっている。通常0番?はOSがインストールされている ディスクとなっているはずなので、ZFSで利用可能なのは1番以降となる。 このリストからストレージプールの作成に利用するディスクのデバイス名をあらかじめ調べておく。

ストレージプールの作成には、zpoolコマンドを利用する。 以下のコマンド例ではc0t1d0というディスクを利用してtestpoolというプールを作成する。

 # zpool create testpool c0t1d0

作成されたプールは自動的にマウントされる。 Solaris Nevada b_97の場合には/testpoolにマウントされる。 しかし、OpenSolarisなどの場合には/dev以下にマウントされるようだ。(マニュアルより)

複数のディスクを利用してプールを作成する場合にはMirrorやRAID-Z(RAID5相当)、 RAID-Z2(RAID6相当)を利用したプールを作成することが可能である。 以下のコマンド例ではc4t0d0というディスクとc4t1d0というディスクの2つを ミラー構成で利用してストレージプールを作成している。RAID-Z, Z2構成も同様に mirrorの部分をraidz, raidz2とすることにより作成できる。 (RAID-Z構成の場合には3本以上、RAID-Z2構成の場合には4本以上のディスクが必要)

 # zpool create testmirrorpool mirror c4t0d0 c4t1d0

また多くのディスクを利用し、RAIDされたディスクのストライピング構成(RAID10など)を利用して ストレージプールを作成することも可能である。以下のコマンド例ではRAID-Z構成のディスクを ストライピングする構成のプールを作成している。

 # zpool create testmirrorpool raidz c0t1d0 c2t0d0 c3t0d0 raidz c4t0d0 c4t1d0 c4t2d0

この例の場合利用可能なストレージプールのディスク領域は1番目のRAID-Z構成の ディスク(raidz c0t1d0 c2t0d0 c3t0d0)で利用可能な ディスク領域と2番目のRAID-Z構成のディスク(raidz c4t0d0 c4t1d0 c4t2d0)で 利用可能なディスク領域を足したものとなる。

ストレージプールの作成では、異なるディスクの構成をストライピングして 利用することは推奨されていないようである。 そのため、1つのプールではmirror, raidz, raidz2のどれかのオプション1つのみを 利用することが望ましい。

zpool statusの話

ファイルシステムの作成

ZFSファイルシステムの作成を行なうにはzfsコマンドを利用する。 以下のコマンド例では上で作成したtestpool上に hogeという名前のファイルシステムが作成される。

 # zfs create testpool/hoge

また複数の階層を持つファイルシステムの作成も可能である。この場合、 作成するファイルシステム名とプール名の中間にあるファイルシステムは プール内に既に作成されている必要がある。以下の例では、先ほど作成したhoge以下に fuga/hageという構造を持つファイルシステムを作成している。

 # zfs create testpool/hoge/fuga
 # zfs create testpool/hoge/fuga/hage

作成したファイルシステムはストレージプール作成時にマウントされた 場所に自動的にマウントされる。例の場合では、/testpool以下に作成した 階層と同様にマウントされる。

マウントする場所は変更することが可能である。指定の方法には、作成時に指定する 方法と作成後に指定する方法の2種類が存在する。以下の例では testpool/hoge/fuga/hageというファイルシステムを/export/home/hageに マウントしている。どちらのコマンドでも指定可能である。

 # zfs create -o mountpoint=/export/home/hage testpool/hoge/fuga/hage
 # zfs set mountpoint=/export/home/hage testpool/hoge/fuga/hage

スナップショットの作成・クローンの作成

ZFSでは標準の機能としてスナップショットが可能である。スナップショットとは ストレージプール上に作成されたファイルシステムやボリューム(iSCSIで後述)の 読み取り専用のコピーのことである。スナップショットを作成すると、 スナップショット作成後にそのシステムに変更を加えてもロールバック 操作を行うことによりスナップショット作成時の状態に戻すことが可能となる。

また、作成したスナップショットから対象ファイルシステム・ボリュームの クローンを作成することが可能である。クローンはスナップショットと違い、 読み書きが可能となる。また、クローン元(スナップショット)からの差分のみ が新たに追記されるため、ディスク領域の消費を最低限に抑えられる。 (Copy-On-Writeだと思われる)

スナップショットの作成には、zfs snapshotコマンドを利用する。 スナップショット名は作成の対象となるファイルシステム・ボリュームのパス名の後に@を 付けた形で指定を行う。以下の例では、testpool/hoge/fuga/hageというファイルシステム に20081024という名前(スナップショット作成日)のスナップショット名を指定して スナップショット作成を行っている。

 # zfs snapshot testpool/hoge/fuga/hage@20081024

作成したスナップショットは以下のコマンドなどで確認することができる。

 # zfs list -t snapshot
 NAME                              USED  AVAIL  REFER  MOUNTPOINT
 testpool/hoge/fuga/hage@200810248  0G      -   690G  -

Samba(CIFS)の提供

ZFSストレージプールから作成したZFSファイルシステムに対してSamba経由で アクセスすることが可能である。これにより、WindowsマシンなどSambaを サポートするクライアントから容易に接続を行うことができる。 以下の例では、testpool/hoge/fuga/hageをtestshareという名前で公開する 設定を行っている。

 # svcadm enable -r smb/server
 # smbadm join -w workgroup
 # echo “other password required pam_smb_passwd.so.1 nowarn" >> /etc/pam.conf
 # zfs sharesmb=on testpool/hoge/fuga/hage
 # zfs sharesmb=name=testshare testpool/hoge/fuga/hage

NFSの提供

iSCSI Target Deviceの作成

iSCSIとはIPネットワークを利用してSCSIコマンドを転送するためのプロトコルである。 そのため、このプロトコルを利用すると、ネットワークの向こう側にあるディスクを あたかも直接接続されたSCSIディスクにように利用する ことが可能となる。

iSCSIには、iSCSI InitiatorとiSCSI Targetが存在する。

参考文献(URI List)