如何正確匯出和匯入也將子目錄作為掛載點的 NFS 共用?

如何正確匯出和匯入也將子目錄作為掛載點的 NFS 共用?

伺服器透過 NFS 使用選項A導出目錄。, ,中的子目錄是 NFS 伺服器上另一個位置的安裝點,使用選項,例如/srvnohide/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
    

相關內容