2008年12月19日金曜日

Soralis10、ZFSを使ってNFS共有をつくる

Solaris10 でZFSを使ったNFS共有を作ったのでメモ。
 
 


ZFS仕込み、プール用領域の確保


ZFSに使うのは本来RAWデバイスが望ましいらしいんだけど、
HDD一台しかないので仕方なくパーティション分けてブロックデバイスを確保。
では4つに切ってみよう。
 

Partition Status Type Start End Length %
========= ====== ============ ===== === ====== ===
1 Active Solaris2 1 4144 4144 11
2 Solaris2 4145 15429 11285 29
3 Solaris2 15430 26714 11285 29
4 Solaris2 26715 37999 11285 29

これでパーティション2-4の領域を、それぞれZFSのプールに追加できる。
各領域の名称は "c1d1p2","c1d1p3","c1d1p4"。
 
 


ZFS作成


まず "zpool" コマンドで tank というZFS領域を作る。

$ zpool create tank c1d1p2


領域 "tank" が作成され、自動で "/tank" にマウントされた。
 
"zfs list"コマンドで確認する、84.7GBだ。
$zfs list
NAME USED AVAIL REFER MOUNTPOINT
tank 108K 84.7G 18K /tank

 
 

"zpool status"コマンドで見ると "デバイス:c1d1p2" が使われていることがわかる。
$zpool status tank
プール: tank
状態: ONLINE
スクラブ: 何も要求されませんでした
構成:

NAME STATE READ WRITE CKSUM
tank ONLINE 0 0 0
c1d1p2 ONLINE 0 0 0

エラー: 既知のデータエラーはありません

 
 

ついでにZFSの領域拡張


ついでにZFSの機能、デバイスの追加による容量増加を試す、いまのプール"tank"に "c1d1p3"を追加してみる。
$zpool add tank c1d1p3

 

するとこうなる、追加した分の容量が増えている。
$zfs list
NAME USED AVAIL REFER MOUNTPOINT
tank 111K 169G 18K /tank
 
$zpool status tank
プール: tank
状態: ONLINE
スクラブ: 何も要求されませんでした
構成:

NAME STATE READ WRITE CKSUM
tank ONLINE 0 0 0
c1d1p2 ONLINE 0 0 0
c1d1p3 ONLINE 0 0 0

エラー: 既知のデータエラーはありません

うーん便利。
 
 


さらについで、ZFSホットスペア追加


デバイス追加の際、オプション "spare" を指定するとホットスペア扱いでデバイスが追加される。
$zpool add tank spare c1d1p4

既存のデバイスが壊れたら、代わりに使われるんだろう。多分。
 

容量が増えていない代わりに、スペアという項目が追加されてデバイスが確認できる。
$zfs list
NAME USED AVAIL REFER MOUNTPOINT
tank 111K 169G 18K /tank
 
$zpool status tank
プール: tank
状態: ONLINE
スクラブ: 何も要求されませんでした
構成:

NAME STATE READ WRITE CKSUM
tank ONLINE 0 0 0
c1d1p2 ONLINE 0 0 0
c1d1p3 ONLINE 0 0 0
スペア
c1d1p4 AVAIL

エラー: 既知のデータエラーはありません

 


ちなみにホットスペアは取り外せる、やっぱり普通の領域に突っ込みたい時などに便利。
$zpool remove tank c1d1p4

しかし、普通の領域をはずすのは色々手順があるみたい、そこは未調査。
 
 


ZFSの領域をNFS共有する


一応これが目的だった。
では "/tank" を共有しよう、コレだけでOKだ。

$zfs set sharenfs=on tank

 

ZFSは領域ごとにプロパティーを持っていて、ステータスを変えてあげればそれだけでいろいろ出来るようになっている。"on" の変わりに "ro" などで指定もOKだ。
 

"tank" のプロパティを確認してみよう、"sharenfs" が onだね。
$zfs get all tank
NAME PROPERTY VALUE SOURCE
tank type filesystem -
tank creation 金 12月 ** **:** 2008 -
tank used 123K -
tank available 169G -
tank referenced 18K -
tank compressratio 1.00x -
tank mounted yes -
tank quota none default
tank reservation none default
tank recordsize 128K default
tank mountpoint /tank default
tank sharenfs on local
tank checksum on default
tank compression off default
tank atime on default
tank devices on default
tank exec on default
tank setuid on default
tank readonly off default
tank zoned off default
tank snapdir hidden default
tank aclmode groupmask default
tank aclinherit restricted default
tank canmount on default
tank shareiscsi off default
tank xattr on default
tank copies 1 default
tank version 3 -
tank utf8only off -
tank normalization none -
tank casesensitivity sensitive -
tank vscan off default
tank nbmand off default
tank sharesmb off default
tank refquota none default
tank refreservation none default

 

念のため "showmount" コマンドで共有状態を確認するとちゃんと共有している。
$showmount -e
devsol01.seton.private.local がエクスポートしているファイルシステムのリスト:
/tank (すべてのホストへエクスポート)

 
 

あとは好きなホストからマウントしよう。
とりあえずこんなところで。