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導入コンサルティングサービス