AI 用の仮想マシンから NAS を NFS で読む ― 専用ユーザーと Squash で読み取り専用に、NAS の再起動のあとは v3 に
家のサーバーの中に、AI を動かすための仮想マシン(ここでは vm1)を作ってあります。その AI から、NAS(QNAP)に置いた音楽や写真を読めるようにしました。NFS で、vm1 だけに読み取り専用で公開し、NAS 側で「専用ユーザー」として扱う形にしています。途中で「マウントはできたのに中が開けない」「NAS を再起動したらマウントが止まる」の2つでつまずいたので、その直し方も書いておきます。
- NFS:Linux などから、NAS のフォルダーを自分のフォルダーのように使う方式
- マウント:NAS のフォルダーを、パソコン側のフォルダーにつなぐこと
- Squash:接続してきたユーザーを、NAS 側のどのユーザーとして扱うかを決める設定
1. なぜ NFS にしたか
NAS は NFS・SMB・FTP・iSCSI のどれにも対応しています。用途は「AI がファイルを読むだけ」なので、次のように比べて NFS にしました。
- NFS:接続元のアドレスで許可するので、仮想マシンにパスワードを置かなくて済む。一覧の取得も SMB より速い
- SMB:次点。書き込みも必要ならこちら。ただし仮想マシンにパスワードを置くことになる
- AD に参加させて SMB:仮想マシンをドメインに依存させることになり、AI 用には大げさ
- FTP:パスワードも中身も暗号化されずに流れ、マウントにも向かない
- iSCSI:ディスクを丸ごと1台に渡す方式。ほかのパソコンと同じフォルダーを同時に使えない
NFS は暗号化されずに流れますが、家の LAN の中だけで使うので、ここは割り切っています。
2. NAS 側:NFS を有効にして、vm1 だけを許可する
QNAP(QTS 5)での設定です。
- コントロールパネル → ネットワークとファイルサービス → Win/Mac/NFS/WebDAV →「NFS サービス」タブで、NFS を有効にする
- コントロールパネル → 権限 → 共有フォルダー → 対象の共有の「共有フォルダー権限の編集」を開く
- 画面の一番上の「権限タイプの選択」を「NFSホストのアクセス」に切り替える
- 「アクセス権」にチェックを入れ、vm1 のアドレスを追加して、権限を「読み取り専用」にする
3 の切り替えが見つけにくいところです。開いた直後は「ユーザー」ごとの権限が表示されていて、NFS の設定はその奥にあります。QTS 5 からは、NFS の権限と SMB の権限は別の設定になっています。許可先に *(すべて)は使わず、アドレスを1つだけ指定します。
3. vm1 側:道具を入れてマウントする
vm1 は Ubuntu 24.04 です。AI を動かすユーザーには管理者の権限を与えていないので、ここからは管理用のユーザーで実行しました。
sudo apt install -y nfs-common
showmount -e 192.168.x.x
showmount は、NAS が公開している共有と、許可しているアドレスを表示します。ここで共有の名前を確かめておくと、打ち間違いに気づけます(実際、共有名を1文字打ち間違えて「access denied」になりました)。
sudo mkdir -p /mnt/nas/homes /mnt/nas/Backup
sudo mount -t nfs -o ro 192.168.x.x:/homes /mnt/nas/homes
sudo mount -t nfs -o ro 192.168.x.x:/Backup /mnt/nas/Backup
NAS 側で読み書きを許可していても、vm1 側で ro(読み取り専用)を付けておけば、AI がうっかりファイルを書き換えることはありません。
4. マウントできたのに、中のフォルダーが開けない
マウントはできたものの、Collection や Music など、ほとんどのフォルダーが「許可がありません」で開けませんでした。数字で権限を表示すると、理由が見えてきます。
$ ls -lnd /mnt/nas/homes/Collection
drwxrwx---+ 14 1000 100 4096 10月 27 10:31 /mnt/nas/homes/Collection
NFS(この使い方)は、ユーザーの名前ではなく番号で権限を判断します。フォルダーの持ち主は 1000番(NAS の nasuser)、グループは 100番で、「持ち主とグループだけが読める」設定です。vm1 の AI のユーザーは 1001番なので、どちらにも当たりません。
まず vm1 側で、AI のユーザーを 100番のグループに入れてみましたが、変わりませんでした。QNAP は、接続元が送ってくるグループの番号ではなく、NAS 側のユーザーで判断しているようです(推定)。
もう1つ気づいたことがあります。NAS には家族のユーザー(familyuser)がいて、その番号が 1001番でした。つまり vm1 の AI は、NAS から見ると家族のユーザーと同じ番号です。実際、そのユーザーのフォルダーだけは開けました。読み取り専用なので実害はありませんが、読み書きでつないでいたら、家族の名前でファイルを書くことになります。
5. 専用ユーザーを作り、Squash でそろえる
そこで、NAS に AI 専用のユーザー ai-reader を作り、vm1 からの接続はすべてこのユーザーとして扱うようにしました。

- コントロールパネル → 権限 → ユーザーで
ai-readerを作る。共有フォルダーの権限は、対象の2つを「読み取り専用(RO)」にし、「変更をサブフォルダーに適用する」にチェックを入れる。パスワードは NFS では使わないので、vm1 には置かない - 2 の「NFSホストのアクセス」の画面で、vm1 の行の Squash を「すべてのユーザー」にし、匿名 UID を
ai-reader、匿名 GID をeveryoneにする - vm1 でマウントし直す
最初は Squash を「すべてのユーザー」にしただけで、匿名 UID・GID が guest のままでした。この状態では guest として扱われるので、やはり開けません。匿名 UID を専用ユーザーに変えたところで、Collection・Music・Photo など、ほぼすべてのフォルダーが読めるようになりました。
この形にしておくと、vm1 には秘密の情報が何も無く、NAS 側でも「読み取り専用の専用ユーザー」に閉じ込められます。ほかのユーザーと取り違えることもなくなります。
6. 起動時に自動でつなぐ(fstab)
/etc/fstab に2行を足しました。
192.168.x.x:/homes /mnt/nas/homes nfs ro,vers=3,_netdev,nofail 0 0
192.168.x.x:/Backup /mnt/nas/Backup nfs ro,vers=3,_netdev,nofail 0 0
_netdev:ネットワークがつながってからマウントするnofail:NAS が止まっていても、vm1 の起動を止めない
書き換えたら sudo systemctl daemon-reload で読み直させます。vers=3 にしている理由は次の節です。
7. NAS を再起動したら、NFS v4.1 のマウントが止まった
設定を終えた直後に、ちょうど QNAP のファームウェアの更新が来ていたので、更新して再起動しました。すると、それまで NFS v4.1 でつながっていたマウントが外れ、つなぎ直そうとしても応答待ちのまま止まりました。NAS の NFS は動いていて、v4・v4.1 も有効のままです。
同じ共有を vers=3 でマウントすると、すぐにつながり、Squash も効いていました。そこで fstab を v3 に変えています。
- NFS v4.1:接続中の状態(どのファイルを開いているかなど)を NAS と vm1 の両方で持つ。NAS が再起動すると、vm1 はその状態を回復しようとする。今回はこの回復がうまくいかず、新しいマウントも待たされたとみています(推定)
- NFS v3:接続中の状態を持たない方式。NAS が戻れば、そのまま続きから使える
家の LAN の中で、読み取り専用で使うだけなら、v4.1 の利点(暗号化など)はほとんど関係ありません。NAS の再起動に強い v3 のほうが向いていると判断しました。
補足:コマンドが止まったように見えるとき
mount や umount は、NAS の返事を待つ間、何も表示しません。プロンプトが戻らず、カーソルだけが点滅している状態になります。ここで気を付けることが2つありました。
- 待っている間にキーを打たない:打った Enter や貼り付けは、ためておかれて、終わったあとにまとめて実行される。fstab に同じ行が2組入ったのは、これが原因とみられる
- 止めるなら Ctrl + C:Ctrl + Z は「一時停止」なので、処理が残り続ける。残ったものは
sudo pkill -9 mount.nfsなどで片付けた
まとめ
- AI に NAS を読ませるだけなら、NFS で、仮想マシンのアドレスだけに読み取り専用で公開するのが手軽。パスワードを置かなくて済む
- NFS は番号で権限を判断する。番号が NAS のほかのユーザーと重なると、別人として扱われる
- NAS に専用ユーザーを作り、Squash(すべてのユーザー・匿名 UID を専用ユーザー)でそろえると、読み取り専用で確実に読める
- NAS の再起動で止まらないように、読み取りだけなら NFS v3 が無難
