之前本站有介绍过Ubuntu中如何安装和挂载使用NFS的文章,不清楚的可以再去看看。现在又有需要,然后我就照着做了一遍。不过非常不幸,这次不怎么顺利。接下来把过程记录下。安装非常简单,没什么问题。按照之前文章,先在服务端安装nfs-kernel-server,然后创建目录,修改/etc/exports配置文件,添加目录为可挂载,启动nfs程序。不过这次创建目录的时候我没有使用nobody用户,而是指定了某一个用户对该目录有可读写权限。该用户已指定uid、gid,主要目的是多个用户使用nfs-server的时候可以区别。
在挂载之前,需要先在客户端上创建和nfs server中需要挂载目录一样的属主、数组用户。如果已有该用户,那么修改用户uid,组gid和nfs server中的一样
如何修改linux用户uid、组gid可以参考这篇文章:
修改用户uid和组gid的命令分别是usermod和groupmod,思路很简单。先使用usermod修改用户的uid,然后使用groupmod修改组的gid,最后使用chown和chgrp命令修改原来用户文件和目录的属主属组。
例如测试用户foo和测试组foo。
foo old UID: 1005
foo new UID: 2005
foo old GID: 2000
foo new GID: 3000
命令:
1、修改foo用户的uid
# usermod -u 2005 foo
2、修改foo组的gid
# groupmod -g 3000 foo
3、foo用户的家目录下面的文件属主和属组会在1、2命令执行后自动修改成新的uid、gid对应的属主属组,但是其他文件目录需要手动修改。手动修改的命令也比较简单。
# find / -user 1005 -exec chown -h foo {} ;
# find / -group 2000 -exec chgrp -h foo {} ;
这样用户和组的uid、gid就修改好了。可以用id命令看下是否修改的如我们所愿。
# ls -l /home/foo/
# id -u foo
# id -g foo
# grep foo /etc/passwd
# grep foo /etc/group
最后mount挂载,这次又出现了“mount.nfs: access denied by server while mounting...”的错误。看nfs服务端上没有任何异常日志输出。也不是因为nfs客户端端口超过1024的关系,因为我已经在/etc/exports配置文件中加入了insecure参数。
没办法,再次google。。。最后在一个网址中找到一个解决办法,那就是在mount时指定nfs版本为v3 。mount命令最后变成类似如下,挂载成功。
mount -o v3 192.168.1.100:/path/to/export /path/to/mount
最后一步,需要让nfs客户端在每次重启服务器后能够自动挂载nfs目录。想到简单的做法是把上面类似mount命令放入/etc/rc.local文件,不过博主测试下来发现不行。最后还是把把放到/etc/fstab中,配置文件类似如下。
192.168.1.100:/path/to/export /path/to/mount nfs defaults,v3 1 1
这里需要在options中加入v3,不然还是会出现上面的问题。
折腾结束,有空好好再研究下nfs。