Ubuntu 16.04: ZFSを使ってみる

Ubuntu 16.04上でZFSでストレージプールを作成し、NFS/SMBでネットワーク共有します。

 

1 zfsutils-linuxのインストール

ユーザランドのツールであるzfsutils-linuxをインストールします。

$ sudo apt-get install -y zfsutils-linux

2 zfs.koのロード

デバイスドライバのzfs.koをロードします。

$ sudo modprobe zfs

3 ストレージプールの作成

/dev/vdbを用いてtankという名前のストレージプールを作成します。

$ sudo zpool create -f tank /dev/vdb
$ sudo zpool list
NAME   SIZE  ALLOC   FREE  EXPANDSZ   FRAG    CAP  DEDUP  HEALTH  ALTROOT
tank  79.5G    50K  79.5G         -     0%     0%  1.00x  ONLINE  -

/tankが作成されます。

$ ls /
bin    dev   initrd.img  lost+found  opt   run   srv   tmp  vmlinuz
boot   etc   lib         media       proc  sbin  sys   usr
cdrom  home  lib64       mnt         root  snap  tank  var
$ df -h /tank
Filesystem      Size  Used Avail Use% Mounted on
tank             78G     0   78G   0% /tank

この時点で/tank配下を通常のファイルシステム同様に扱うことができます。

RAID等の機能はOracle社のマニュアルを参照してください。

4 NFS共有

NFSサーバをインストールします。

$ sudo apt-get install -y nfs-kernel-server

ストレージプールをNFSで共有します。以下の例では省いてますが、NFSマウントのオプションは192.168.11.0/24,rw,sync等のように指定します。

$ sudo zfs set sharenfs="rw=@192.168.11.0/24" tank

192.168.11.0/24のマシンからZFSのマシンに対してNFSマウントします。ここでは192.168.11.67がZFSのマシンです。

$ sudo mount -t nfs 192.168.11.67:/tank /mnt

5 SMB共有

sambaをインストールします。

sudo apt-get install -y samba

NFS共有で/etc/exportsの編集が不要であったのとは異なり、こちらは/etc/samba/smb.confの編集が必要です。

ここではguestアクセスを禁止し、pdbeditで追加したユーザのみアクセスできるようにします。

/var/lib/samba/usersharesはzfsコマンドで作成される共有用の設定ファイルが格納されるディレクトリです。

$ diff -uprN /etc/samba/smb.conf{.org,}
--- /etc/samba/smb.conf.org     2016-04-30 20:46:35.778323625 +0900
+++ /etc/samba/smb.conf 2016-04-30 20:48:23.866009451 +0900
@@ -177,13 +177,14 @@

 # Setup usershare options to enable non-root users to share folders
 # with the net usershare command.
+   usershare path = /var/lib/samba/usershares

 # Maximum number of usershare. 0 (default) means that usershare is
 # disabled.
-;   usershare max shares = 100
+   usershare max shares = 100

 # Allow users who've been granted usershare privileges to create
 # public shares, not just authenticated ones
-   usershare allow guests = yes
+   usershare allow guests = no

 #======================= Share Definitions =======================

sambaのみの場合と同様、pdbeditでユーザを追加します。

$ sudo pdbedit -a hiroom2
new password:
retype new password:

ストレージプールをSMBで共有します。なお、このままでは/tank配下にアクセスできるだけでファイル追加はできないので、/tank配下のアクセス権限を適時設定してください。

$ sudo zfs set sharesmb=on tank

Windowsから\\[Host Name]\tankへアクセスするとpdbeditで作成したユーザ名とパスワードを求められます。

 

画像のubuntu-16.04-zfs.hiroom2.comはZFSのマシンのホスト名です。

0001_Access-to-ZFS-via-SMB-on-Windows.png