服务端操作
一.检查服务器是否已经安装nfs 客户端
rpm -q nfs-utils
nfs-utils-1.0.9-24.el5
如果出现以上结果,表示已经安装好了NFS。
二、安装NFS
yum -y install nfs-utils
三、配置端口(可以忽略):
nfs除了主程序端口2049和rpcbind的端口111是固定以外,还会使用一些随机端口,以下配置将定义这些端口,以便配置防火墙
vim /etc/sysconfig/nfs
#追加端口配置
MOUNTD_PORT=4001
STATD_PORT=4002
LOCKD_TCPPORT=4003
LOCKD_UDPPORT=4003
RQUOTAD_PORT=4004
四、配置NFS服务器
vim /etc/exports
打开配置文件后,一般空空如也,自己写,写入以下配置信息:
/home/example/rootfs 192.168.2.*(rw,sync,no_root_squash)
解析:
/home/example/rootfs -->共享的文件夹路径
192.168.2.* -->允许访问的IP号,当然也可以具体指定一个,比如192.168.2.11
(rw,sync,no_root_squash) -->权限等
五、启动/重启NFS服务
不管NFS事先有没有启动,都可以用重启命令,如下:
/sbin/service nfs restart
/etc/init.d/nfs restart --尝试的时候找不到命令
systemctl start nfs.service -- 没有试过
六、如果只是修改配置文件可以只是重新加载参数即可
exportfs -r #重载exports配置
exportfs -v #查看共享参数
exportfs参数说明:
-a 全部挂载或卸载 /etc/exports中的内容
-r 重新读取/etc/exports 中的信息 ,并同步更新/etc/exports、/var/lib/nfs/xtab
-u 卸载单一目录(和-a一起使用为卸载所有/etc/exports文件中的目录)
-v 输出详细的共享参数
七、查看所有共享的目录
showmount -e 127.0.0.1 --简略信息
cat /var/lib/nfs/etab --详细信息
八、查看服务端日志(调bug使用)
cat /var/log/messages | grep mount
客户端操作
1、直接挂载
mount -t nfs 192.168.2.22:/home/example/rootfs /mnt/nfs
解析:
mount -t nfs -->挂载命令,表示挂载NFS共享的文件夹
192.168.2.22:/home/example/rootfs -->服务器端共享的文件夹路径,格式为 IP:/共享文件夹路径
/mnt/nfs -->映射到本地的文件夹,即客户端开发板上的文件夹。
注:如果输入命令,出现如下错误“svc: failed to register lockdv1 RPC service (errno 111) ”,则改用如下命令:
mount -t nfs -o nolock 192.168.2.22:/home/example/rootfs /mnt/nfs
2、autofs挂载(没有用过)
yum -y install autofs
vim /etc/auto.master
#添加一行
/- /etc/auto.mount
vim /etc/auto.mount
#添加一行
/mnt -fstype=nfs,rw nfs.st.local:/var/nfs
启动服务:
systemctl start autofs --开始服务
systemctl enable autofs --结束服务
3、查看挂载情况
df -h
结果:
10.0.3.22:/data/10.0.0.59/dns_data 44T 14T 31T 32% /dist/dnsdata_import/data-bak
说明: FNS服务端信息, 本地文件路径
4、取消挂载
umount /mnt/test1
说明: umout 本地挂载的路径
客户端挂载错误处理
1、客户端没有commont 包
错误信息:
[root@localhost]# mount -t nfs 192.168.0.106:/home/nfs1
mount: wrong fs type, bad option, bad superblock on 192.168.0.106:/home/nfs1,
missing codepage or helper program, or other error
(for several filesystems (e.g. nfs, cifs) you might
need a /sbin/mount.<type> helper program)
In some cases useful info is found in syslog - try
dmesg | tail or so
解决办法:
apt-get install nfs-common
或者
yum install nfs-utils
2、unmatched host
错误信息:
[root@hadoopclient etc]# mount -t nfs 10.0.0.59:/dist/ipip_data/data ./ipip_data/
mount.nfs: access denied by server while mounting 10.0.0.59:/dist/ipip_data/data
检查日志:Mar 27 13:33:58 hadoopclient02 rpc.mountd[8705]: refused mount request from 10.0.0.80 for /dist/ipip_data/data (/dist/ipip_data/data): unmatched host
解决办法:
用 10.0.0.0/16 替代 10.0.* 方式 --(实际使用好使)
网上搜的:
解决方式1、去掉/etc/hosts中的主机名ip
解决方式2、查看客户端挂载的目录不具备读写权限,添加权限即可。
解决方式3、服务器和客户机网段不同引起,修改ip地址,使其同网段即可。
NFS服务器配置参数说明:
ro:共享目录只读
rw:共享目录可读可写
all_squash:所有访问用户都映射为匿名用户或用户组
no_all_squash(默认):访问用户先与本机用户匹配,匹配失败后再映射为匿名用户或用户组
root_squash(默认):将来访的root用户映射为匿名用户或用户组
no_root_squash:来访的root用户保持root帐号权限
anonuid=<UID>:指定匿名访问用户的本地用户UID,默认为nfsnobody(65534)
anongid=<GID>:指定匿名访问用户的本地用户组GID,默认为nfsnobody(65534)
secure(默认):限制客户端只能从小于1024的tcp/ip端口连接服务器
insecure:允许客户端从大于1024的tcp/ip端口连接服务器
sync:将数据同步写入内存缓冲区与磁盘中,效率低,但可以保证数据的一致性
async:将数据先保存在内存缓冲区中,必要时才写入磁盘
wdelay(默认):检查是否有相关的写操作,如果有则将这些写操作一起执行,这样可以提高效率
no_wdelay:若有写操作则立即执行,应与sync配合使用
subtree_check(默认) :若输出目录是一个子目录,则nfs服务器将检查其父目录的权限
no_subtree_check :即使输出目录是一个子目录,nfs服务器也不检查其父目录的权限,这样可以提高效率
参考的大神们的网址整理:
https://www.cnblogs.com/st-jun/p/7742560.html
https://www.cnblogs.com/arcer/p/3738522.html
https://blog.csdn.net/hustcxl/article/details/78561384
https://blog.csdn.net/ora_unix/article/details/9720153