首页 > Linux系统管理 > nfs安装配置

nfs安装配置

2016年11月8日

nfs安装配置

Server:
1.改写配置文件

#vi /etc/exports
#写上你的公享的文件路径
#例如
#/home 192.168.0(rw) **注意:地址与权限中间没有空格
#让192.168.0网段可以访问 /home 并有 读写权限

2.启动服务

#service portmap start
#service nfs start

Client:

#挂载目录

#mount -t nfs ip地址:/home /mnt

CentOS 6安装portmap
晚上在看UNIX网络编程的RPC,程序执行需要用到portmap,发现CentOS 6上不叫portmap,而是改为rpcbind
01.yum install rpcbind 2. 开机启动关闭

01.chkconfig rpcbind off

NFS介绍
NFS = network file system
NFS只有三个系统守护进程:
rpc.nfsd:它是基本的NFS守护进程,主要功能是管理客户端是否能够登录服务器
rpc.mountd:它是RPC安装守护进程,主要功能是管理NFS的文件系统。当客户端顺利通过rpc.nfsd登录NFS服务后,在使用NFS服务所提供的,还必须通过文件使用权限的验证。它会读取NFS的配置文件/etc/exports来对比客户端权限。
portmap:portmap的主要功能是进行端口映射工作。当客户端尝试连接并使用RPC服务器提供的服务(如NFS服务)时,portmap会将所管理的与服务对应的端口提供给客户端,从而使客户可以通过该端口向服务器请求服务。
nfs的端口是2049 ,但是它基于portmap,portmap的端口是111,所以默认策略是允许,禁止其中一个端口,都能禁止nfs服务器,而且nfs服务器自己的client描述功能已经很强大了。
相关文件:
1、/etc/exports
这个文件是NFS的主要配置文件,不过系统并没有默认值,所以这个文件不一定会存在,可能要使用vim手动建立,然后在文件里面写入配置内容。现在的版本都有的,等会我们修改的也就是这个文件
2、/usr/sbin/exportfs
这是维护NFS共享资源的命令
3、/usr/sbin/showmount
shouwmount命令主要是用在client端,可以用来查看NFS共享出来的目录资源
4、/var/lib/nfs/*tab
其中的etab记录了NFS分享出来的目录的完整权限设定值,另一个是xtab,记录曾经连接到此NFS主机的相关client数据。

一、下载或从光盘上找到nfs服务安装包。

二、安装(nfs*代表其安装包名称):
# rpm -ivh nfs*

三、配置NFS文件:
现在我们来定义我们需要共享的文件和目录,用NFS共享的目录和文件是没有selinux限制的。
这个配置文件只要分为三列
第一列,写入你需要共享的目录路径
第二列 写入客户端描述,也就是哪些客户端可以使用你的服务器
第三列是紧挨着第二列的,内容是共享的权限
NFS对client的表达方式要求不是很严格,常用的表达方式他都能识别
比如:
IP就直接输入IP:192.168.0.24
网段:192.168.0.0/24 或 192.168.0.0/255.255.255.0
域名: www.linux.com
域:*.linux.com
如果表示所有的IP都能访问,就直接输入:*
而且你还可以分段表示,如下:
/mnt/dvd 192.168.2.0/24(ro,sync) 192.168.1.168(rw)
我们来配置一个例子试一下:
# vi /etc/exports
在里面加入如下内容:
/mnt/dvd 192.168.2.0/24(ro,sync)
保存并退出。
# exportfs -r
# service nfs restart
如果上面的命令都返回正常的话,就配置成功了。
# exportfs (此命令可以查看到本机用NFS共享的目录)
# showmount -e [NFS服务器IP] (它也可以查看到)
配置成功了之后,就可以挂载了。
挂载可以使用mount命令手动挂载,也可以使用autofs挂载
如果使用fstab挂载的话,要注意了,由于系统启动读取fstab在启动rc.d之前。所以那个时候nfs还没有启动,所以会挂载失败,可以在rc.local里面写入 mount -a 来在最后从新挂载fstab
我们先手动挂载试试
# mount -t nfs 192.168.2.11:/mnt/dvd /mnt/nfs
如果没有报错,就证明挂载成功了,也可以用mount命令来查看是否挂载成功
进去看看,是不是和我们/mnt/dvd目录下的东西一样

(卸载命令 umount /mnt/nfs)

然后我们在/mnt/nfs里面建立一个文件,看看权限是什么
看见没有,我明明是root写入的,怎么变成nfsnobody了呢?
NFS的共享权限和访问控制
关于刚才文件属于nfsnobody的原因,这个是由于系统默认的NFS共享权限中的root_squash导致的
root_squash:当登陆NFS主机使用共享目录的使用者是root时,其权限被转换成匿名使用者,通常它的UID与GID都会变成nobody身份。
其实NFS有很多默认的参数,我们可以去看看
大家看见了吗,默认就有sync,wdelay,hide等等
no_root_squash是让root保持权限,root_squash是把root映射成nobody。
no_all_squash 就不让所有用户保持在挂载目录中的权限
所以,root建立的文件是nfsnobody
sync:同步写入资料到内存与硬盘中
async:资料会暂存到内存中,而非直接写入硬盘
这两个那个比较好?
如果你是重要的小文件,当然是sync,同步写入,避免文件丢失
如果你是很大的数据,建议不要同步写入
rw:可读可写
ro:只读,这个很简单
注意:如果iptables开启了,nfs相关端口TCP和UDP都要开启,只开启一个的话是不行的!!
附:权限详细说明
ro 只读访问
rw 读写访问
sync 所有数据在请求时写入共享
async NFS在写入数据前可以相应请求
secure NFS通过1024以下的安全TCP/IP端口发送
insecure NFS通过1024以上的端口发送
wdelay 如果多个用户要写入NFS目录,则归组写入(默认)
no_wdelay 如果多个用户要写入NFS目录,则立即写入,当使用async时,无需此设置。
hide 在NFS共享目录中不共享其子目录
no_hide 共享NFS目录的子目录
subtree_check 如果共享/usr/bin之类的子目录时,强制NFS检查父目录的权限(默认)
no_subtree_check 和上面相对,不检查父目录权限
all_squash 共享文件的UID和GID映射匿名用户anonymous,适合公用目录。
no_all_squash 保留共享文件的UID和GID(默认)
root_squash root用户的所有请求映射成如anonymous用户一样的权限(默认)
no_root_squash root用户具有根目录的完全管理访问权限
anonuid=xxx 指定NFS服务器/etc/passwd文件中匿名用户的UID
anongid=xxx 指定NFS服务器/etc/passwd文件中匿名用户的GID

搭建NFS遇到的问题
1,在启动NFS服务器的时候遇到的一个问题如下,原因在于NFS配置文件中地址与权限中间多了一个空格,去掉空格重新启动即可:

[root@youxia121 local]# service nfs restart

关闭 NFS mountd:[确定]
关闭 NFS 守护进程:[确定]
关闭 NFS 服务: [确定]
启动 NFS 服务: exportfs: No options for /usr/local/data/ 192.168.0.122: suggest 192.168.0.122(sync) to avoid warning

exportfs: No host name given with /usr/local/data (rw,no_root_squash,no_all_squash,sync), suggest *(rw,no_root_squash,no_all_squash,sync) to avoid warning

[确定]

关掉 NFS 配额:[确定]
启动 NFS 守护进程:[确定]
启动 NFS mountd:[确定]

2,客户端在挂载的时候遇到的一个问题如下,可能是网络不太稳定,NFS默认是用UDP协议,换成TCP协议即可:
[root@youxia122 local]# mount -t nfs 192.168.0.121:/usr/local/data /usr/local/data
mount.nfs: Input/output error
解决方法:mount -t nfs 192.168.0.121:/usr/local/data /usr/local/data -o proto=tcp -o nolock

分类: Linux系统管理 标签:
本文的评论功能被关闭了.