Cha*_*ang 6 linux nfs autofs automount
我使用 autofs 在文件夹 /mnt/iso 中挂载一些 iso 文件:
Fedora-13-x86_64-DVD.iso
Fedora-14-x86_64-DVD.iso
Fedora-15-x86_64-DVD.iso
Run Code Online (Sandbox Code Playgroud)
autofs 工作正常,我可以看到 iso 文件的内容:
# ls /mnt/iso/fedora.13/
# ls /mnt/iso/fedora.14/
# ls /mnt/iso/fedora.15/
Run Code Online (Sandbox Code Playgroud)
完成 autofs 测试后。我强制卸载所有iso文件夹:
# umount -l /mnt/iso/*
Run Code Online (Sandbox Code Playgroud)
然后我在 /etc/exports 中导出 /mnt/iso:
/mnt/iso 192.168.0.0/24(ro,insecure,crossmnt,all_squash)
Run Code Online (Sandbox Code Playgroud)
NFS 服务也运行良好。我可以通过 nfs 客户端从另一台机器挂载 /mnt/iso:
# mount -t nfs4 <nfs-server>:/mnt/iso /mnt
Run Code Online (Sandbox Code Playgroud)
我可以在 /mnt/ 文件夹中看到所有 iso 挂载:
# ls /mnt
dr-xr-xr-x 15 nobody nobody 4096 2011-06-11 10:23 .
drwxr-xr-x 24 root root 4096 2011-02-08 08:45 ..
drwxr-sr-x 7 nobody nobody 4096 2010-05-13 09:06 fedora.13
drwxr-sr-x 7 nobody nobody 4096 2010-10-22 02:32 fedora.14
drwxrwsr-x 7 nobody nobody 4096 2011-05-14 03:50 fedora.15
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试列出每个文件夹的内容时:
# ls /mnt/fedora.13
Run Code Online (Sandbox Code Playgroud)
屏幕上没有显示任何内容。使用这样的命令
# ls /mnt/fedora.13/*
Run Code Online (Sandbox Code Playgroud)
迅速的
ls: cannot access /mnt/fedora.13/*: No such file or directory
Run Code Online (Sandbox Code Playgroud)
我成功列出 nfs 客户端机器中 iso 文件夹内容的唯一情况是使用以下步骤:
从客户端机器卸载 nfs 共享:
# umount /mnt
Run Code Online (Sandbox Code Playgroud)
使用 ls 显示 nfs 服务器中 /mnt/iso 的所有子树:
# ls /mnt/iso/*
Run Code Online (Sandbox Code Playgroud)
autofs 将自动挂载所有 iso 文件。
在客户端机器上挂载 nfs 文件夹:
# mount -t nfs4 <nfs-server>:/mnt/iso /mnt
Run Code Online (Sandbox Code Playgroud)
列出 /mnt 的子树:
# ls /mnt/*
Run Code Online (Sandbox Code Playgroud)
然后您可以在 nfs 客户端机器中看到所有内容。
然而,这违背了 autofs 的目的,因为我需要先在 autofs 机器中显示一次内容。
有没有人有任何想法?我正在使用以下内容:
我认为您在这里遇到了问题,因为当您使用 NFS 导出文件系统时,它会锁定到源目录。您当时甚至试图不让该源目录可用,而只能稍后通过挂载将某些内容放在那里。
这是行不通的,因为一旦您为 NFS 提供了要共享的内容的句柄,它就会始终共享该内容,即使它最终位于挂载层之下。
假设您使用文件 'frog' 设置一个目录并使用 nfs 将其导出:
[server] $ mkdir /mnt/test && touch /mnt/test/frog
[server] $ echo '/mnt/test *(ro)' >> /etc/exports
[server] $ exportfs -a
Run Code Online (Sandbox Code Playgroud)
然后你把它挂载到客户端的某个地方,你会像预期的那样看到文件青蛙:
[client] $ mkdir /mnt/test
[client] $ mount -t nfs server:/mnt/test /mnt/test
[client] $ ls $/mnt/test
frog
Run Code Online (Sandbox Code Playgroud)
现在假设您在服务器上的该文件夹顶部安装了其他内容:
[server] $ mkdir /mnt/test2 && touch /mnt/test2/fish
[server] $ mount -o bind /mnt/test2 /mnt/test
[server] $ ls /mnt/test
fish
Run Code Online (Sandbox Code Playgroud)
漂亮。但是什么是 nfs 服务呢?
[client] $ ls /mnt/test
frog
Run Code Online (Sandbox Code Playgroud)
您甚至无法访问服务器上的文件青蛙,因为它上面安装了不同的东西,但是 NFS 正在为该底层提供服务!
长话短说,如果您想通过 NFS 导出您的文件系统,您需要在 NFS 启动和导出它们时正确安装它们,并且它们将需要保留。导出本身使用 autofs 挂载的文件系统永远不会正常工作。您需要永久安装这些 ISO 才能通过 NFS 导出它们。