Linux

有沒有辦法在 NFS 上實現上下文相關的路徑名 (CDPN)?

  • December 30, 2014

在我的 GFS 集群中,我使用CDPN功能/dev/log在不同的集群節點上擁有單獨的 chrooted 目錄:

/home/ftpuser/foo:
lrwxrwxrwx 1 root root 2010 年 9 月 26 日 18 日 dev -> .sys/@hostname/dev

/home/ftpuser/foo/.sys:
drwx--x--x 3 root root 3864 2010 年 9 月 26 日 server1.example.com
drwx--x--x 3 root root 3864 2010 年 9 月 26 日 server2.example.com
drwx--x--x 3 root root 3864 2010 年 9 月 26 日 server3.example.com

/home/ftpuser/foo/.sys/server2.example.com:
drwx--x--x 2 root root 3864 Sep 25 09:34 dev

/home/ftpuser/foo/.sys/server2.example.com/dev:
srw-rw-rw- 1 root root 0 Sep 25 09:23 log

/home/ftpuser/foo/dev: (根據節點名稱透明地選擇 1 個子目錄)
srw-rw-rw- 1 root root 0 Sep 25 09:23 log

我使用它是為了讓每個節點上的 rsyslog 守護程序不會相互干擾。它之所以有效,是因為@hostname在路徑中替換為解釋它的主機的主機名,因此不同的主機獲得不同的目錄。集群同時在所有節點上處於活動狀態。

我的問題:

  • 有沒有辦法在 NFS 共享上獲得相應的功能?
  • 理論上它是否可以在所有文件系統的 linux 核心中實現(通過掛載選項,因此預設情況下它不會破壞東西)?

這個問題與這個問題相似但不完全相同:NFS file with same name but different content取決於主機

我認為 NFS 不存在 CDPN,但您可以使用基本工具實現大致等效的目標。限制是您必須將所有特定於節點的文件放在同一位置(或者至少您必須保留位置列表),您不能在@hostname任何您喜歡的地方使用該功能。

在同一位置的所有節點上掛載本地文件系統,例如/local. 在該文件系統上,創建一個符號連結,其目標因節點而異,並指向遠端文件系統的節點特定區域。您不需要任何本地儲存,它可以是記憶體文件系統;因為它只需要儲存一個符號連結,所以成本很小。

mount -t tmpfs -o noexec,nodev,nosuid,mode=755,nr_inodes=2,nr_blocks=2 local-redirect /local
ln -s "/nfs/.sys/$HOSTNAME" /local/storage

在您的範例中使用的/local/storage地方使用。.sys/@hostname

另一種特定於 Linux 的方法是在每個節點上進行綁定掛載。在共享文件系統上有一個空目錄,並@hostname在掛載 NFS 文件系統後綁定到該目錄。

mount --bind "/.nfs/sys/$HOSTNAME" /nfs/.sys/@hostname

引用自:https://unix.stackexchange.com/questions/167085