Ubuntu 資料一覧
2014/06/18更新
対応バージョン: 0.6.3
公式サイト
準備
導入OS
Ubuntu 14.04
インストール
リポジトリ追加
% sudo apt-add-repository --yes ppa:zfs-native/stable
/etc/apt/sources.list.d/zfs-native-stable-trusty.listが作成される。中身は以下の通り。
deb http://ppa.launchpad.net/zfs-native/stable/ubuntu trusty main # deb-src http://ppa.launchpad.net/zfs-native/stable/ubuntu trusty main
ZFS on Linuxインストール
% sudo apt-get update % sudo apt-get install debootstrap spl-dkms zfs-dkms ubuntu-zfs
インストール確認
zfsモジュールを組み込み、有効になったことを確認する。
% sudo modprobe zfs % dmesg | grep zfs ZFS: Loaded module v0.6.3-2~trusty, ZFS pool version 5000, ZFS filesystem version 5
ストレージプール作成

まずそれぞれのUSBメモリをマシンに挿すと以下のようなデバイスファイルとして認識される。
/dev/sde1 (SONY 1GB)
/dev/sdf1 (ELECOM 8GB)
このデバイスファイル名はOSが動的に割り当てるものなので他のデバイスとの兼ね合いなどから割り当てが変わる場合があってストレージプールの構成要素として使用するには不安定である。
そこでデバイス名として、10ディスク以下程度の小規模の構成であればby-id名での指定を、大規模用途であればby-path名をそれぞれ使うとよい。こうすることでデバイスファイル名に左右されず、同じデバイスであれば常に同じ名前が使える。
ここではby-id名を指定する。by-id名は以下の方法で確認できる。
% ls -l /dev/disk/by-id | grep sde1 ... usb-Sony_Storage_Media_1A07031203610-0:0-part1 -> ../../sde1 % ls -l /dev/disk/by-id | grep sdf1 ... usb-ELECOM_MF-BSU3_070844129E20AC46-0:0-part1 -> ../../sdf1
このsdxxにシンボリックリンクが張られたファイルがby-id名である。ストレージプール作成時にはこのby-id名を指定する。
まずは中身をフォーマットする。ファイルシステムはext4とする。
% sudo umount /dev/sde1 % sudo umount /dev/sdf1 % sudo mke2fs -t ext4 /dev/disk/by-id/usb-Sony_Storage_Media_1A07031203610-0:0-part1 % sudo mke2fs -t ext4 /dev/disk/by-id/usb-ELECOM_MF-BSU3_070844129E20AC46-0:0-part1
続いてストレージプールを作成する。ストレージプール名はrpoolとし、2つのデバイスを指定する。
% sudo zpool create rpool /dev/disk/by-id/usb-Sony_Storage_Media_1A07031203610-0:0-part1 \ /dev/disk/by-id/usb-ELECOM_MF-BSU3_070844129E20AC46-0:0-part1
ストレージプールが作成され、2つのデバイスが含まれていることが確認できる。
% sudo zpool list NAME SIZE ALLOC FREE CAP DEDUP HEALTH ALTROOT rpool 8.12G 128K 8.12G 0% 1.00x ONLINE - % sudo zpool status rpool pool: rpool state: ONLINE scan: none requested config: NAME STATE READ WRITE CKSUM rpool ONLINE 0 0 0 usb-Sony_Storage_Media_1A07031203610-0:0-part1 ONLINE 0 0 0 usb-ELECOM_MF-BSU3_070844129E20AC46-0:0-part1 ONLINE 0 0 0 errors: No known data errors
デフォルトでは単一スライスが作成されるが他にも以下のような構成が組める。
ミラー
% sudo zpool create rpool mirror <デバイス1> <デバイス2>
(*)サイズの違うデバイス同士でミラーを作成した場合、ストレージプールのサイズは(当然ではあるが)一番小さいデバイスと同サイズになる。
RAID-Z
% sudo zpool create rpool raidz <デバイス1> <デバイス2> ...
パリティ付RAID-Z(パリティはシングル、ダブル、トリプルの3種類)
% sudo zpool create rpool raidz1 <デバイス1> <デバイス2> ... % sudo zpool create rpool raidz2 <デバイス1> <デバイス2> ... % sudo zpool create rpool raidz3 <デバイス1> <デバイス2> ...
他にもキャッシュデバイスやログデバイスも指定できる。
% sudo zpool create rpool mirror <デバイス1> <デバイス2> cache <デバイス3> log <デバイス4>
作成したストレージプールは自動的に/配下にマウントされる。
% df -h /rpool Filesystem Size Used Avail Use% Mounted on rpool 8.0G 0 8.0G 0% /rpool
アンマウントする時は以下のようにする。
% sudo zfs unmount rpool
ストレージプールを削除する場合は以下のようにする。
% sudo zpool destroy rpool
ストレージプールからは別のストレージプールを切り出すことができる。
% sudo zfs create rpool/sub % df -h -t zfs Filesystem Size Used Avail Use% Mounted on rpool 8.0G 128K 8.0G 1% /rpool rpool/sub 8.0G 128K 8.0G 1% /rpool/sub
こうすることで同じストレージプール内に独立したファイルシステムを作成することができる。
マウントポイントをデフォルト以外の場所にしたい場合は以下のようにする。
% sudo zfs umount rpool/sub % sudo mkdir /mnt/sub % sudo zfs set mountpoint=/mnt/sub rpool/sub % sudo zfs mount rpool/sub % df -h -t zfs Filesystem Size Used Avail Use% Mounted on rpool 8.0G 0 8.0G 0% /rpool rpool/sub 8.0G 0 8.0G 0% /mnt/sub
各種設定
OS起動時・停止時の挙動
/etc/default/zfsの以下の設定を変更することによってOS起動時・停止時の挙動を制御することができる。
OS起動時にmountするか(yes|no)
5 ZFS_MOUNT='no'
OS停止時にunmountするか(yes|no)
9 ZFS_UNMOUNT='no'
OS起動時にshareするか(yes|no)
13 ZFS_SHARE='no'
OS停止時にunshareするか(yes|no)
16 ZFS_UNSHARE='no'
プロパティ設定
ストレージプールに作成したファイルシステムには様々なプロパティが設定されており、これを操作することで細かい制御ができる。
現在のプロパティの設定情報を参照するにはgetサブコマンドに続いて参照したいプロパティ名を指定する。
% zfs get <プロパティ> <ファイルシステム>
全てのプロパティを参照するにはプロパティ名に「all」を指定する。
% sudo zfs get all rpool NAME PROPERTY VALUE SOURCE rpool type filesystem - rpool creation 水 6月 18 0:14 2014 - rpool used 112K - rpool available 8.00G - rpool referenced 30K - rpool compressratio 1.00x - rpool mounted yes - rpool quota none default rpool reservation none default rpool recordsize 128K default rpool mountpoint /rpool default rpool sharenfs off default rpool checksum on default rpool compression off default rpool atime on default rpool devices on default rpool exec on default rpool setuid on default rpool readonly off default rpool zoned off default rpool snapdir hidden default rpool aclinherit restricted default rpool canmount on default rpool xattr on default rpool copies 1 default rpool version 5 - rpool utf8only off - rpool normalization none - rpool casesensitivity sensitive - rpool vscan off default rpool nbmand off default rpool sharesmb off default rpool refquota none default rpool refreservation none default rpool primarycache all default rpool secondarycache all default rpool usedbysnapshots 0 - rpool usedbydataset 30K - rpool usedbychildren 82.5K - rpool usedbyrefreservation 0 - rpool logbias latency default rpool dedup off default rpool mlslabel none default rpool sync standard default rpool refcompressratio 1.00x - rpool written 30K - rpool logicalused 42.5K - rpool logicalreferenced 15K - rpool snapdev hidden default rpool acltype off default rpool context none default rpool fscontext none default rpool defcontext none default rpool rootcontext none default rpool relatime off default % sudo zfs get all rpool/sub/dev NAME PROPERTY VALUE SOURCE rpool/sub/dev type filesystem - rpool/sub/dev creation 水 6月 18 0:30 2014 - rpool/sub/dev used 30K - rpool/sub/dev available 8.00G - rpool/sub/dev referenced 30K - rpool/sub/dev compressratio 1.00x - rpool/sub/dev mounted yes - rpool/sub/dev quota none default rpool/sub/dev reservation none local rpool/sub/dev recordsize 128K default rpool/sub/dev mountpoint /rpool/sub/dev default rpool/sub/dev sharenfs off default rpool/sub/dev checksum on default rpool/sub/dev compression off inherited from rpool rpool/sub/dev atime on default rpool/sub/dev devices on default rpool/sub/dev exec on default rpool/sub/dev setuid on default rpool/sub/dev readonly off default rpool/sub/dev zoned off default rpool/sub/dev snapdir hidden default rpool/sub/dev aclinherit restricted default rpool/sub/dev canmount on default rpool/sub/dev xattr on default rpool/sub/dev copies 1 default rpool/sub/dev version 5 - rpool/sub/dev utf8only off - rpool/sub/dev normalization none - rpool/sub/dev casesensitivity sensitive - rpool/sub/dev vscan off default rpool/sub/dev nbmand off default rpool/sub/dev sharesmb off default rpool/sub/dev refquota none default rpool/sub/dev refreservation none default rpool/sub/dev primarycache all default rpool/sub/dev secondarycache all default rpool/sub/dev usedbysnapshots 0 - rpool/sub/dev usedbydataset 30K - rpool/sub/dev usedbychildren 0 - rpool/sub/dev usedbyrefreservation 0 - rpool/sub/dev logbias latency default rpool/sub/dev dedup off default rpool/sub/dev mlslabel none default rpool/sub/dev sync standard default rpool/sub/dev refcompressratio 1.00x - rpool/sub/dev written 30K - rpool/sub/dev logicalused 15K - rpool/sub/dev logicalreferenced 15K - rpool/sub/dev snapdev hidden default rpool/sub/dev acltype off default rpool/sub/dev context none default rpool/sub/dev fscontext none default rpool/sub/dev defcontext none default rpool/sub/dev rootcontext none default rpool/sub/dev relatime off default
以下、いくつかのプロパティの設定手順を紹介する。
quota
ディスククォータを設定する。
例えば以下のように一つのストレージプールを複数のファイルシステムに分割して使用している場合を考える。
% zfs list NAME USED AVAIL REFER MOUNTPOINT rpool 228K 8.00G 31K /rpool rpool/sub 92K 8.00G 32K /rpool/sub rpool/sub/dev 30K 8.00G 30K /rpool/sub/dev rpool/sub/pub 30K 8.00G 30K /rpool/sub/pub
この中でrpool/sub/pubに対して1GBのクォータを設定する場合は以下のようにする。
% sudo zfs set quota=1g rpool/sub/pub
これによりrpool/sub/pubの使用可能サイズは1GBになる。それ以外は以前と同じままである。
% zfs list NAME USED AVAIL REFER MOUNTPOINT rpool 230K 8.00G 31K /rpool rpool/sub 92K 8.00G 32K /rpool/sub rpool/sub/dev 30K 8.00G 30K /rpool/sub/dev rpool/sub/pub 30K 1024M 30K /rpool/sub/pub
クォータの解除はサイズに「none」を指定して再設定すればよい。
% sudo zfs set quota=none rpool/sub/pub % zfs list NAME USED AVAIL REFER MOUNTPOINT rpool 230K 8.00G 31K /rpool rpool/sub 92K 8.00G 32K /rpool/sub rpool/sub/dev 30K 8.00G 30K /rpool/sub/dev rpool/sub/pub 30K 8.00G 30K /rpool/sub/pub
reservation
ディスク領域を予約する。
これは前述のクォータのようにファイルシステムの最大サイズを制限するのとは逆に、あらかじめ指定したサイズの領域を確保する方法である。
例えばrpool/sub/devに対して4GBの領域を確保する場合は以下のようにする。
% sudo zfs set reservation=4g rpool/sub/dev
これによりrpool/sub/dev以外の使用可能サイズが8GB中の4GBになり、結果的にrpool/sub/devのために(最低)4GBが確保されたことになる。
% zfs list NAME USED AVAIL REFER MOUNTPOINT rpool 4.00G 4.00G 31K /rpool rpool/sub 4.00G 4.00G 32K /rpool/sub rpool/sub/dev 30K 8.00G 30K /rpool/sub/dev rpool/sub/pub 30K 4.00G 30K /rpool/sub/pub
領域の予約解除はサイズに「none」を指定して再設定すればよい。
% sudo zfs set reservation=none rpool/sub/dev % zfs list NAME USED AVAIL REFER MOUNTPOINT rpool 226K 8.00G 31K /rpool rpool/sub 92K 8.00G 32K /rpool/sub rpool/sub/dev 30K 8.00G 30K /rpool/sub/dev rpool/sub/pub 30K 8.00G 30K /rpool/sub/pub
compression
ファイルシステム内を圧縮モードにする。
% sudo zfs set compression=on rpool/sub/dev % sudo zfs get compression NAME PROPERTY VALUE SOURCE rpool compression off local rpool/sub compression off inherited from rpool rpool/sub/dev compression on local rpool/sub/pub compression off inherited from rpool
圧縮モードの解除は「off」を指定して再設定すればよい。
% sudo zfs set compression=off rpool/sub/dev
その他、様々なプロパティが存在するが、ここでは割愛する。