我有两个目录从 NFS 服务器导出。在我的 NFS 客户端计算机上,我可以使用默认语法将其中一个目录挂载为 NFS4。但是,只有当我明确指定“vers=3”时,另一个目录才会挂载。如果我不使用该语法,我会收到错误“mount.nfs:挂载 nat149app:/var/fea/jobs 时服务器拒绝访问”。
两个盒子都是 RHEL 6.1。
在服务器上:
[root@nat149app fea]# cat /etc/exports
# /var/fea/jobs -rw,async,no_root_squash xxx.xxx.1.0/24
# /usr/local -ro,async,no_root_squash xxx.xxx.1.0/24
/var/fea/jobs xxx.xxx.1.0/24(rw,async,no_root_squash)
/usr/local xxx.xxx.1.0/24(ro,async,no_root_squash)
在客户端上:
[root@nat145app ~]# mount
/dev/sda4 on / type ext4 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
tmpfs on /dev/shm type tmpfs (rw)
/dev/sda1 on /boot type ext4 (rw)
/dev/sda5 on /home type ext4 (rw)
/dev/sda3 on /usr type ext4 (rw)
/dev/sda6 on /var type ext2 (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)
[root@nat145app ~]# mount nat149app:/usr/local /usr/local
[root@nat145app ~]# mount nat149app:/var/fea/jobs /var/fea/jobs
mount.nfs: access denied by server while mounting nat149app:/var/fea/jobs
[root@nat145app ~]# ll /var/fea
total 20K
drwxrwx--T 4 root feausers 4.0K Nov 29 13:25 ./
drwxr-xr-x. 22 root root 4.0K Nov 29 13:25 ../
drwxrwx--T 2 root feausers 4.0K Nov 29 13:25 jobs/
drwxrwx--T 2 root feausers 4.0K Nov 29 13:26 temp/
[root@nat145app ~]# mount -o vers=3 nat149app:/var/fea/jobs /var/fea/jobs
[root@nat145app ~]# mount
/dev/sda4 on / type ext4 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
tmpfs on /dev/shm type tmpfs (rw)
/dev/sda1 on /boot type ext4 (rw)
/dev/sda5 on /home type ext4 (rw)
/dev/sda3 on /usr type ext4 (rw)
/dev/sda6 on /var type ext2 (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)
nat149app:/usr/local on /usr/local type nfs (rw,vers=4,addr=139.69.1.149,clientaddr=139.69.1.145)
nat149app:/var/fea/jobs on /var/fea/jobs type nfs (rw,vers=3,addr=139.69.1.149)
我尝试过使用 rw 和 ro 权限。我也尝试过不使用目录上的“o+t”权限。我还尝试过使用 /etc/fstab 中的条目。没有区别。
答案1
据我所知,NFS v4 要求所有导出的目录都位于单个“根”内(已fsid=0
在 /etc/exports 中设置)。例如:
/srv/nfs xxx.xxx.1.0/24(ro,root_squash)
/srv/nfs/usr-local xxx.xxx.1.0/24(ro,root_squash)
/srv/nfs/fea-jobs xxx.xxx.1.0/24(rw,root_squash)
然后将其安装为:
mount -t nfs4 nat149app:/usr-local /usr/local
mount -t nfs4 nat149app:/fea-jobs /var/fea/jobs
通常使用绑定安装来设置/srv/nfs
(或/exports
类似);例如:
mount --bind /usr/local /srv/nfs/usr-local
mount --bind /var/fea/jobs /srv/nfs/fea-jobs
(对于 fstab,/usr/local /srv/nfs/usr-local none bind 0 0
)
在您当前的配置中,/usr/local
被用作 NFS 根(nat149app:/usr/local
仅为了兼容性而被接受;真实地址是nat149app:/
),并且服务器拒绝对其外部的所有内容的访问。
答案2
在自己解决此错误时,按照以下方法操作Ubuntu 指南,我做了一个
apt-get purge nfs-kernel-server
apt-get install nfs-kernel-server
在我只保留默认配置文件并且它起作用之前我已经尝试了 5 次(NFSv4)。
这是 nfs 服务器 /etc/exports:
/export 172.20.50.0/24(ro,fsid=0,insecure,no_root_squash,no_subtree_check,async)
/export/companybackup 172.20.50.0/24(rw,nohide,insecure,no_root_squash,no_subtree_check,async)
/export/p1backup 172.20.50.0/24(rw,nohide,insecure,no_root_squash,no_subtree_check,async)
/export/p2backup 172.20.50.0/24(rw,nohide,insecure,no_root_squash,no_subtree_check,async)
/export/p3backup 172.20.50.0/24(rw,nohide,insecure,no_root_squash,no_subtree_check,async)
在导出中,no_root_squash 允许您的服务器的根用户写入共享,async 为您提供最佳 IO(尽管不可靠),其余的简化了权限。
和 nfs 服务器 /etc/fstab:
/dev/VG/LV /mnt/bigLV ext4 noatime 0 0
/mnt/bigLV /export/companybackup none bind 0 0
/mnt/bigLV/backups/p1 /export/p1backup none bind 0 0
/mnt/bigLV/backups/p2 /export/p2backup none bind 0 0
/mnt/bigLV/backups/p3 /export/p3backup none bind 0 0
最后,客户端的 fstab:
172.20.50.29:/p1backup /mnt/p1backup nfs4 _netdev,auto,rw,hard,intr 0 0
从 fstab 刷新挂载:
sudo mount -a