伺服器透過 NFS 使用選項A
導出目錄。, ,中的子目錄是 NFS 伺服器上另一個位置的安裝點,使用選項,例如/srv
nohide
/srv
/srv/foo
--bind
server# mount --bind /bar/foo/ /srv/foo/
客戶端使用 NFSB
導入A:/srv
並安裝它/mnt/srv
。的內容/mnt/srv
是 的內容A:/srv
。
問題是它/mnt/srv/foo
是空的,而我期待看到A:/bar/foo/
那裡的內容。
如何正確匯出和匯入也將子目錄作為掛載點的 NFS 共用?
答案1
crossmnt
是你的朋友。
/srv *(rw,fsid=0,no_subtree_check,crossmnt)
答案2
我在關注時偶然發現了這個問題無盤拱門指南,這確實減慢了我的速度。我將在這裡分享我的發現,因為我很好奇這是否對其他人有用。
根據無磁碟指南,我在環回映像中擁有無磁碟客戶端的根檔案系統(我需要匯出的實際資料),該映像已安裝在/srv/des1
:
/srv/des1.img on /srv/des1 type btrfs (rw,relatime,compress=lzo,discard,space_cache)
然後我創建了一個掛載點,/nfs/des1
然後運行掛載,並確認我可以看到一切:
# mkdir -p /nfs/des1
# mount --bind /srv/des1 /nfs/des1
# ls -l /nfs/des1
bin boot dev usr #[SNIP]
參考架構 NFS指南,然後我將以下內容放在/etc/exports
伺服器上:
/nfs/ *(rw,no_root_squash,no_subtree_check,fsid=root)
/nfs/des1/ *{rw,no_root_squash,no_subtree_check,nohide)
exportfs -rav
然後我在伺服器上運行以應用這些更改。
mount server:/des1 /mnt/tmp
然而,當我期望無盤根檔案系統在那裡時,我隨後在測試客戶端上安裝了共用:卻發現它是一個空目錄。
在這個階段,我嘗試了幾乎所有的方法,直到有東西引導我在exports
手冊頁中看到這個選項:
crossmnt
This option is similar to nohide but it makes it possible for clients
to move from the filesystem marked with crossmnt to exported filesystems
mounted on it. Thus when a child filesystem "B" is mounted on a parent "A",
setting crossmnt on "A" has the same effect as setting "nohide" on B.
因此,在嘗試了其他所有方法後,我將其交換了,所以我的/etc/exports
看起來像這樣:
/nfs/ *(rw,no_root_squash,no_subtree_check,fsid=root,crossmnt)
/nfs/des1/ *{rw,no_root_squash,no_subtree_check)
閱讀完手冊頁條目後,您可能會認為這與先前的程式碼具有相同的效果,但是當我exportfs -rav
再次運行以註冊更改,然後嘗試從客戶端重新安裝時,它起作用了!
答案3
看起來每個掛載子點都必須由 NFS 伺服器匯出才能對客戶端可見。在上述情況下,/etc/exports
文件應如下所示:
/srv *(rw,fsid=0,nohide,no_subtree_check)
/srv/foo *(rw,nohide,no_subtree_check)
然後,/srv
透過選項在客戶端上匯入-t nfs
將使/srv
和/srv/foo
正確可用。
由OP編輯
這條線
/srv/foo *(rw,fsid=0,nohide,no_subtree_check)
在我的情況下有效而不是
/srv/foo *(rw,nohide,no_subtree_check)
答案4
筆記:僅啟用單一用戶
它添加的是伺服器端和客戶端的一組編輯。在伺服器端/etc/exports
和/etc/fstab
客戶端。
伺服器端
- Linux Mint 18.3 西爾維亞 32 位
- 核心 Linux 4.4.0-138-通用 i686
華碩EEPC
$ cat /etc/exports #insert shares (one for each mounted partition sub-folder): /nfsshare/ /192.168.1.155(rw,no_root_squash,no_subtree_check,fsid=root,crossmnt) /nfsshare/media/ 192.168.1.155(rw,no_root_squash,no_subtree_check) /nfsshare/extra/ /192.168.1.155(rw,no_root_squash,no_subtree_check) $ cat /etc/fstab #shared media files on /media/ed/ /media/ed/ /nfsshare/ nfs bind 0 0 /media/ed/media/ /nfsshare/media/ nfs bind 0 0 /media/ed//extra /nfsshare/extra/ nfs bind 0 0
客戶端
- Linux Mint 19 塔拉 64 位
核心 Linux 4.15.0-38-通用 x86_64
$ cat /etc/fstab #NFS Shares line added 192.168.1.158:/nfsshare /mnt/share nfs rw,soft,intr,noatime,x-gvfs-show