此处声明 : 实验环境为 Centos 6.5
nfs 服务器端: nfs-utils
一般默认安装 (如果没有安装的话 : yum install -y nfs-utils )
生成的主要文件为 : ( 可以用 rpm -ql nfs-utils 查看)
/usr/sbin/rpc.mountd
/usr/sbin/rpc.nfsd
启动服务 :
service nfs start
注意启动之前请先确保 rpcbind 启动(service rpcbind start | status)
rpcbind(以前 称为 Portmap) 工作于 111/tcp 111/udp
查看相应端口也可用
rpcinfo -p localhost
启动 nfs 后, nfs 会向 rpc 注册使用一系列端口
nfs 会启用三个子进程:
nfsd(nfs服务的主服务)
mountd(接受客户端的挂载请求)
quotad(限定客户端在本地能使用多大磁盘空间 即磁盘配额)
一般来讲:
nfs 的端口是启动的时候向 rpc 注册的是可变的
nfsd 监听在 2049/tcp 2049/udp 这个是不变的虽然是注册使用的。
但是 mounted 和 quotad 监听的端口是半随机的 (rpc 帮其选取的 ,rpc 会选用一个
还没被占用的随机端口给 mounted 和 quotad )
所以 有可能出现占用其他服务的端口 如web 的 80 。
服务脚本 :
/etc/rc.d/init.d/nfslock 对文件加锁防止同时修改,还有防止客户端在访问文件时崩溃。
当访问一个文件时向 nfs 申请加锁。
好了下面确保 nfs 开机自启动:
chkconfig nfs on ( 也可以 chkconfig --level 35 nfs on 设置, chkconfig --list | grep nfs 查看)
实现文件输出的配置文件:
/etc/exports
在这个文件中,每一行包含一个共享出去的文件系统,以及那些客户端能够访问,及客户端的访问特性,如果有多个客户端,使用空格隔开,每个客户端后必须跟(),里面定义此客户端访问特性。
格式为:
/path/to/somedir 客户端列表(客户端访问特性)
如:
/nfs_shared 128.1.1.5(rw)
在这个文件中如果想要注释掉一行,使用 # 。
下面说一下客户端的定义: FQDN(即域名) ,IP 地址, IP地址/掩码
下面说一下客户端访问属性:
ro (只读,只能对文件进行读操作)
rw(读写,对文件即能读也能修改)
sync (同步,对文件的修改会立即写入磁盘)
async(异步,对文件的修改不会立即写入磁盘,一般都是使用异步,同步性能不大好)
现在开始来操作: (服务端的ip 为: 128.1.1.5 客户端的ip为: 128.1.1.7)
运行前请确保 iptables 和 selinux 已经关闭
假设已经事先在 服务端创建 /nfs/shared 目录, 客户端创建 /nfs/mount1 目录
修改 /etc/exports
修改完记得重启服务:
查看本机导出的目录:
这里说一下: showmount 主要用来查看本机导出去那些目录,详情请 man showmount。
查看 nfs 服务器导出的各文件系统
用法:showmount -e NFS_SERVER 这个命令在 客户端 ,服务端 都能用
如 : showmount -e 128.1.1.7 (这里的 128.1.1.7 也可以写为:
128.1.1.7/255.255.255.0 或者 128.1.1.7/24 )
在客户端挂载服务端导出的目录,并且用 df 查看是否已经挂载 (请事先在客户端创建
一个目录 /nfs/mount1 )
这里说一下客户端如何挂载:
使用 mount 命令挂载 :
用法 :
mount -t nfs NFS_SERVER:/PATH/TO/SOME_EXPORT /PATH/TO/SOMEWHERE
NFS_SERVER : nfs 服务器地址
/PATH/TO/SOME_EXPORT : nfs 服务器导出目录
/PATH/TO/SOMEWHERE : 客户端的挂载目录
接下来就可以在客户端上对挂载目录进行操作了:
如果想要在客户端实现写操作请确保,请现在服务端让挂载目录具有写权限。
如 chmod 777 /nfs/shared
接下来说一下 exportfs 命令 :
当修改 /etc/exports 配置文件后,使用 exportfs 命令可以实现挂载而不重启服务。
说一下可用选项:
-a : 跟 -r 或 -u 选项同时使用,表示重新挂载所有文件系统或取消导出所有文件
系统。
-r : 重新导出
-u : 取消导出
-v : 显示详细信息
所以可用 exportfs -arv 来重新读取 /etc/exports
exportfs -auv 来取消所有导出的目录
例如:将128.1.1.7 改为 128.1.1.7/24 此时 128.1.1.0/24 网段内的所有主机都能挂载 /nfs/shared
此时在主机 128.1.1.3 上尝试挂载目录,发现能挂载成功
测试一下 exportfs -auv (发现执行后系统没有导出任何目录)
如果想实现在客户端在开机时候自动挂载的话:
请自己在 /etc/fstab 中添加如下一行:
128.1.1.5/nfs/shared /mnt nfs defaults,_rnetdev 0 0
上面的 _rnetdev 是为了避免开机挂载不上,启动不起来。
如果出现在客户端挂载之后卸载不了:
可用 fuser -v 挂载目录 查看有哪些进程占用此目录
fuser -km 挂载目录 可把正在访问某挂载点的进程都杀死
说一下随机端口问题吧,如果不想让 nfs 使用随机端口
编辑配置文件 /etc/sysconfig/nfs 能让 mountd 和 quotad 等进程监听在固定端口
RQUOTAD_PORT=875
LOCKD_TCPPORT=32803
LOCKD_UDPPORT=32769
MOUNTD_PORT=892
只需要将上面4项都启用,也即是去掉这4项前面的 #