Linux
有沒有辦法在 NFS 上實現上下文相關的路徑名 (CDPN)?
在我的 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