コラム

UbuntuでZFSを使ってみよう 第18回 zfs でファイル共有してみよう

前回は、ZFSクローンを使用したリカバリ方法について説明しました。今回は、ZFSのファイル共有について説明します。

ZFS ファイルシステムの共有

ZFSではファイルシステムのプロパティを設定することで、指定したファイルシステムをNFSもしくはCIFS(Common Internet File System)で、指定したファイルシステム以下をファイル共有できます。NFSはLinuxを含むUNIX like OSで、CIFSはWindowsでファイル共有として使用されるファイルシステムです。

NFSによるファイル共有

通常Linuxでは、NFSでのファイル共有を許可するのに、/etc/exports への設定が必要になります。ZFSでは、ファイルシステムのプロパティsharenfs を on に設定するだけで済みます。/etc/exportsファイルに記述可能なオプションも、このプロパティへ設定可能です。ZFSのプロパティを変更した場合、通常それ以下のファイルシステムにも設定結果が継承されます。

NFS mount を提供する場合、nfs-kernel-server パッケージが必要になります。NFS mount する際は、nfs-common パッケージが必要になります。

# TargetマシンでNFSマウントを提供
$ hostname
target
$ sudo apt-get install nfs-kernel-server
    (省略)
$ zfs get sharenfs rpool/USERDATA/user1
NAME                  PROPERTY  VALUE     SOURCE
rpool/USERDATA/user1  sharenfs  off       default
$ sudo zfs set sharenfs=on rpool/USERDATA/user1
$ zfs get sharenfs rpool/USERDATA/user1
NAME                  PROPERTY  VALUE     SOURCE
rpool/USERDATA/user1  sharenfs  on        local

ここではexportsのオプションを指定していないので、どのホストからも読み書き可能な状態でNFSマウントできます。

# NFSマウントを実行
$ sudo mount -t nfs target:user1 /tmp/data
$ mount |grep /tmp/data
192.168.10.16:/user2 on /tmp/data type nfs4 (rw,relatime,vers=4.2,rsize=524288,wsize=524288,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,clientaddr=192.168.XX.XX,local_lock=none,addr=192.168.XX.XY)

NFS共有をオフにするには、プロパティ sharenfs に no を設定します。

$ sudo zfs set sharenfs=off rpool/USERDATA/user1
$ zfs get sharenfs rpool/USERDATA/user1
NAME                  PROPERTY  VALUE     SOURCE
rpool/USERDATA/user1  sharenfs  off       local

一時的にNFS共有のon/offを行うには、zfs share コマンドを使用します。

$ sudo zfs get sharenfs rpool/USERDATA/user{1,2}
NAME                  PROPERTY  VALUE     SOURCE
rpool/USERDATA/user1  sharenfs  on        local
rpool/USERDATA/user2  sharenfs  off       default
# プロパティ sharenfs が on で、既にマウントしている場合は、zfs share は何も行わない
$ sudo zfs share rpool/USERDATA/user1
cannot share 'rpool/USERDATA/user1': filesystem already shared
# zfs unshareを行うと、一時的にNFSマウント不可能になる
$ sudo zfs unshare rpool/USERDATA/user1
$ sudo zfs get sharenfs rpool/USERDATA/user{1,2}
NAME                  PROPERTY  VALUE     SOURCE
rpool/USERDATA/user1  sharenfs  on        local
rpool/USERDATA/user2  sharenfs  off       default
# zfs share を行うと、再度MFSマウント可能になる
$ sudo zfs share rpool/USERDATA/user1
# プロパティ sharenfs が on でない場合、zfs shareは 失敗する
$ sudo zfs share rpool/USERDATA/user2
cannot share 'rpool/USERDATA/user2': legacy share
use share(1M) to share this filesystem, or set sharenfs property on

CIFSによるファイル共有

NFSと同様に、ZFSはCIFSによるファイル共有をプロパティsharesmbで行います。CIFSマウントを提供する場合、samba パッケージをインストールします。その後、通常のsamba設定と同様に、使用ユーザを登録後に再起動します。

# TargetマシンでCIFSマウントをを提供
$ hostname
target
$ sudo apt-get install samba
    (省略)
$ zfs get sharesmb rpool/USERDATA/user2
NAME                  PROPERTY  VALUE     SOURCE
rpool/USERDATA/user2  sharesmb  off       default
# ユーザ登録
$ sudo /usr/bin/pdbedit -a user2
new password:
retype new password:
Unix username:        user2
NT username:
Account Flags:        [U          ]
User SID:             S-1-5-21-4008691106-82142559-3922997875-1001
Primary Group SID:    S-1-5-21-4008691106-82142559-3922997875-513
Full Name:
Home Directory:       \\ubuntu2004\user2
HomeDir Drive:
Logon Script:
Profile Path:         \\ubuntu2004\user2\profile
Domain:               UBUNTU2004
Account desc:
Workstations:
Munged dial:
Logon time:           0
Logoff time:          木, 07  2月 2036 00:06:39 JST
Kickoff time:         木, 07  2月 2036 00:06:39 JST
Password last set:    日, 23  5月 2021 20:30:47 JST
Password can change:  日, 23  5月 2021 20:30:47 JST
Password must change: never
Last bad password   : 0
Bad password count  : 0
Logon hours         : FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
sudo /usr/bin/pdbedit -L
user2:1001:
# 再起動
$ sudo reboot

# CIFSマウントを有効にする
$ sudo zfs set sharesmb=on rpool/USERDATA/user2
$ zfs get sharenfs rpool/USERDATA/user2
NAME                  PROPERTY  VALUE     SOURCE
rpool/USERDATA/user2  sharesmb  on        local

このとき外部から見えるパスは、rpool/USERDATA/user2のパス名として使用できない文字(この場合は/)を_で置き換えた、rpool_USERDATA_user2が設定されます。
今回は、パッケージ cifs-utils をインストールした別のUbuntuマシンでマウントします。

# pbdedit -a した際に設定したパスワードを入力する
$ sudo mount -t cifs -o username=user2 //192.168.10.16/rpool_USERDATA_user2 /tmp/data                                           Password for user2@//192.168.10.16/rpool_USERDATA_user2:  ************
$ mount |grep cifs
//192.168.10.16/rpool_USERDATA_user2 on /tmp/data type cifs (rw,relatime,vers=3.1.1,cache=strict,username=user2,uid=0,noforceuid,gid=0,noforcegid,addr=192.168.10.16,file_mode=0755,dir_mode=0755,soft,nounix,serverino,mapposix,rsize=4194304,wsize=4194304,bsize=1048576,echo_interval=60,actimeo=1)
$ ls /tmp/data
aaa*  ccc*  core*  ddd*  eee*

Windowsからも、Windowsファイル共有で同じ様にファイルシステムをマウント可能です。

CIFS共有をoffにするには、プロパティsharesmb にoffを設定します。

# CIFSマウントを無効にする
$ sudo zfs set sharesmb=off rpool/USERDATA/user2
$ zfs get sharenfs rpool/USERDATA/user2
NAME                  PROPERTY  VALUE     SOURCE
rpool/USERDATA/user2  sharesmb  off       local

NFSと同様に、zfs share/unshare コマンドによりファイル共有のon/offが可能です。また、NFS/CIFSの共有はそれぞれon/offを設定可能です。そのため、-a オプションでshare/unshareする対象を選択します。

# NFS共有の停止
$ sudo zfs unshare -a nfs  rpool/USERDATA/user1
$ sudo zfs unshare -a cifs rpool/USERDATA/user2
$ sudo zfs share rpool/USER2/user{1,2}

終わりに

今回回はZFSのファイル共有機能について説明しました。次回は、今回触れたZFSのプロパティについて説明します。次回をお楽しみに。

さて、このコラムを掲載いただいているデジタル・ヒュージ・テクノロジー社は老舗のOSSインテグレーターです。特にLinuxは強く、OSSを活用した業務システムの実績も多いです。興味がある方は以下のページもご覧ください。
DHT OSS導入コンサルティングサービス

関連記事一覧