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
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
エラー: 既知のデータエラーはありません
プール: 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
エラー: 既知のデータエラーはありません
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
エラー: 既知のデータエラーはありません
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
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 (すべてのホストへエクスポート)
devsol01.seton.private.local がエクスポートしているファイルシステムのリスト:
/tank (すべてのホストへエクスポート)
あとは好きなホストからマウントしよう。
とりあえずこんなところで。