有没有办法在 NFS 上实现上下文相关的路径名 (CDPN)?

有没有办法在 NFS 上实现上下文相关的路径名 (CDPN)?

在我的 GFS 集群中,我使用CDPN/dev/log在单独的集群节点上拥有单独的 chroot 目录的功能:

/home/ftpuser/foo:
lrwxrwxrwx 1 root root 18 Sep 26 2010 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 根 根 3864 2010 年 9 月 26 日 server3.example.com

/home/ftpuser/foo/.sys/server2.example.com:
drwx--x--x 2 root root 3864 九月 25 09:34 开发

/home/ftpuser/foo/.sys/server2.example.com/dev:
srw-rw-rw- 1 root root 0 九月 25 09:23 日志

/home/ftpuser/foo/dev:(根据节点名称透明地选择 1 个子目录)
srw-rw-rw- 1 root root 0 九月 25 09:23 日志

我使用它是为了每个节点上的 rsyslog 守护进程不会互相干扰。它之所以有效,是因为@hostname路径中的内容被替换为解释它的主机的主机名,因此不同的主机会获得不同的目录。集群在所有节点上同时处于活动状态。

我的问题:

  • 有没有办法在 NFS 共享上获得相应的功能?
  • 理论上它可以在所有文件系统上的 Linux 内核中实现吗(通过挂载选项,这样默认情况下就不会破坏东西)?

这个问题与这个问题相似但不完全相同:名称相同但内容不同的 NFS 文件,具体取决于主机

答案1

我认为 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

相关内容