レック・テクノロジー・コンサルティング株式会社TECH BLOG

ZFSストレージをNFSマウントする際の注意点

■はじめに

ZFSストレージでシェア領域を作成し、OSからNFSマウントして利用する際のちょっとした注意点について、
今回はお伝えしようと思います。

【環境情報】
ZFSストレージ :ZFS Storage ZS9-2
OS :RedHat Enterprise Linux 8.6
NFSバージョン :最小NFSv3 最大NFSv4

※上記以外の環境では異なる結果となる可能性がある点、予めご了承ください。

■マウントオプションの差異による、lsコマンド表示結果の違い

ZFSのシェア領域をNFSマウントする際、
マウントオプションによってlsコマンドでの照会結果が異なります。

パターン1

[root@testvm01 ~]# mount -t nfs -o rw,bg,hard,nointr,rsize=32768,wsize=32768,tcp,actimeo=0,vers=3,timeo=600 192.168.5.100:/export/nfs01 /mnt


[root@testvm01 ~]# ls -l /mnt/zfs.file

-rw-r--r--+ 1 root root 0 Sep 1 20:52 /mnt/zfs.file

パターン2

[root@testvm01 ~]# mount -t nfs -o rw,bg,hard,nointr,rsize=32768,wsize=32768,tcp,actimeo=0,vers=3,timeo=600,noacl 192.168.5.100:/export/nfs01 /mnt

[root@testvm01 ~]# ls -l /mnt/zfs.file
-rw-r--r-- 1 root root 0 Sep 1 20:52 /mnt/zfs.file

パターン1と2の違いについて分かったでしょうか?
lsコマンドのパーミッション部分末尾をご覧いただけると分かりますが、パターン1は末尾に「+」が付いています。
パターン2ではマウントの際に明示的にオプションを指定しているため、「+」が付いていません。


■「+」の有無による違い

端的に申し上げると、「+」が付いているファイルは拡張ACLという設定が有効になっています。拡張ACLについては少し長くなるので後述しますが、「通常のパーミッションやオーナーとは別で個別に指定できる権限設定」と思っていただければ良いです。
拡張ACLが有効になっていると申し上げましたが、本来ZFSストレージは拡張ACLをサポートしていない様です。であるのにも関わらず、明示的に無効化しないと「+」が表示されてしまうことが分かりました。

基本的には「+」が付いていても支障ないのですが、-pオプション付きのcpコマンド(mvコマンド)にて、オーナー情報などを含めてコピーを試みる際に、以下のエラーが出力する場合があります。

cpコマンド実施時のエラー

[root@testvm01 ~]# cp -p /mnt/zfs.file /mnt/zfs.file.copy

cp: preserving permissions for '/mnt/zfs.file.copy': Operation not supported

エラー回避のためには

先述したパターン2のように、NFSマウントの際に "noacl" を指定して明示的に拡張ACLを無効化してあげればこの事象は回避できます。

また、-p オプション無しでのcpコマンドは問題なく通ります。
今後どうなるかは分かりませんが、少なくとも現時点でZFSストレージは拡張ACL非対応のようですので、NFSマウントを利用する際は "noacl" オプションを付けてあげるのが無難でしょうか。

cpコマンド成功時("noacl" 指定してマウント)

[root@testvm01 ~]# mount -t nfs -o rw,bg,hard,nointr,rsize=32768,wsize=32768,tcp,actimeo=0,vers=3,timeo=600,noacl 192.168.5.100:/export/nfs01 /mnt

[root@testvm01 ~]# ls -l /mnt/zfs.file

-rw-r--r-- 1 root root 0 Sep 1 20:52 /mnt/zfs.file

[root@testvm01 ~]# cp -p /mnt/zfs.file /mnt/zfs.file.copy

[root@testvm01 ~]# ls -l /mnt
-rw-r--r-- 1 root root 0 Sep 1 20:52 /mnt/zfs.file
-rw-r--r-- 1 root root 0 Sep 1 20:54 /mnt/zfs.file.copy

■補足 拡張ACLについて


ACLと聞いてまず思い浮かぶのがAccess Control List という方もいるかと思いますが、今回のお話でのACLは異なります。ネットワークに関するあれこれではありません。
Linuxの権限設定には「基本ACL」と「拡張ACL」が存在します。
基本ACLとは 皆さんがよく lsコマンドで目にするパーミッションやオーナーの部分です。


基本ACLのみ

[root@testvm01 ~]# ls -l /tmp/local.file

-rw-r--r-- 1 root root 0 Sep 1 20:52 /tmp/local.file

そして前述した通り、lsコマンド照会の際にパーミッション末尾に「+」が付いているファイルは拡張ACLが有効になっています。


拡張ACLあり

[root@testvm01 ~]# ls -l /tmp/local.file
-rw-r--r--+ 1 root root 0 Sep 1 20:52 /tmp/local.file

拡張ACLを付与すると、任意の個別のユーザーに対してアクセス権限を付与することが可能です。以下に拡張ACLの照会コマンド「getfacl」実施時のログを記します。


getfacl 照会結果

[root@testvm01 ~]# getfacl /tmp/local.file

getfacl: Removing leading '/' from absolute path names

# file: tmp/local.file

# owner: root

# group: root

user::rw-

user:test:rw-

group::r--

mask::rw-

other::r--

/tmp/local.file の所有ユーザーは root ですが、上記の例では test ユーザーに対して個別に rw権限を付与しています。
私はまだ経験が無いですが、運用上このような指定を用いたいお客様もいるかもしれませんね。

■最後に


今回はZFSストレージを用いてNFSマウントする際の注意点について記しました。
cpコマンドを使った際の挙動については、構築期間では気づきづらいかもしれません。お客様の運用が始まってから「ファイルコピーが出来なくて困っている!」と言われると大変かと思いますので、本記事にてそういった事象を防げれば幸いです。

この記事をシェアする

  • Facebook
  • X
  • Pocket
  • Line
  • Hatena
  • Linkedin

資料請求・お問い合わせはこちら

ページトップへ戻る