NSF 笔记:
NFS是通过网络来进行服务器和客户端之间的数据传输的,我们大家都知道,要想通过网络进行传输,必须得知道是通过哪一个端口进行传输的!
NFS服务器对于端口的选择是随机的,那么问题在于,服务器端随机选择的端口,客户端如何才能知道呢?
这就有了第三方的管理:
NFS服务器端,通过RPC(remote procedure call:远程过程调用)来实现,RPC统一管理NFS的端口
RPC统一对外端口是111,使用NFS的时候,必须先启动RPC,再启动NFS,这样NFS才能到RPC去注册端口信息,然后客户端向服务器的RPC请求服务器的NFS端口信息,这样就能够传输数据了。
实现过程:
1) 服务器端启动RPC服务,对外开放端口111
2) 启动NFS服务,向RPC注册端口。
3) 客户端启动RPC,向服务器端RPC请求服务器的NFS端口
4) 服务器端RPC服务反馈NFS端口给客户端
5) 客户端获取NFS端口,建立和服务器端的连接,进行数据传输!
Ubuntu环境下:
① 安装必要软件
sudo apt-get install nfs-kernel-server centos下执行:yum install -y nfs-utils
上述命令,apt会自动安装nfs-common、rpcbind等13个安装包
② 编写配置文件
#配置文件在 /etc/exports
sudo vim /etc/exports
#最后一行添加配置:共享目录 可连接的客户端网段ip(指定网段:192.168.0.0/16或者完全开放: *)
/home/dong/embeded_study 192.168.7.2(rw,sync,no_root_squash,no_subtree_check)
配置说明:
/home/dong/embeded_study:NFS服务器端的目录,用于共享
192.168.7.2:允许的IP访问,也可以使用 * ,允许所有网段
rw:挂接此目录的客户端对该共享目录的读写权限
sync:资料同步写入内存和硬盘
no_root_squash:root用户具有对根目录的完全管理访问权限
no_subtree_check:不检查父目录的权限
③ 更新exports文件
sudo exportfs -arv
-a:全部mount或umount文件/etc/exports中的内容。
-r:重新mount文件/etc/exports中的共享内容。
-u:umount目录。
-v:在exportfs的时候,将详细的信息输出到屏幕上。
④ 启动nfs服务
sudo /etc/init.d/rpcbind start #先启动rpcbind
sudo /etc/init.d/nfs-kernel-server start #再启动nfs
或
systemctl start rpcbind
systemctl start nfs-kernel-server
systemctl enable rpcbind
systemctl enable nfs-kernel-server
centos下执行:
systemctl start rpcbind
systemctl start nfs-server
systemctl enable rpcbind
systemctl enable nfs-server
一定得先启动rpcbind
⑤ 其他命令
#显示已经mount到本机nfs目录的客户端机器。
sudo showmount -e localhost
#将配置文件中的目录全部重新export一次!无需重启服务。
sudo exportfs -rv
#查看NFS的运行状态
sudo nfsstat
#查看rpc执行信息,可以用于检测rpc运行情况
sudo rpcinfo
#查看网络端口,NFS默认是使用111端口。
sudo netstat -tu -4
客户端使用:
① 安装工具
sudo apt install nfs-common
上述命令,apt会自动安装nfs-common、rpcbind等12个安装包
② 查看共享目录
#显示指定的(ip_localname)NFS服务器上export出来的目录
#ip_localname为服务端主机名或IP地址
sudo showmount -e ip_localname
#这一步,如果有问题,需要进行排查
#可能遇到timeout、unable to send等相关问题,排查服务器rpcbind、nfs启动顺序,客户端的ip地址是否设置正确,以及服务器端的/etc/hosts中,ip和计算机名是否匹配等等
③ 创建挂载目录
通过上一个showmount命令,可以查询到服务器端共享的文件
接下来就是挂载到客户端了!
#创建一个目录,用于挂载
sudo mkdir -p ./share_dir
④ 挂载
#将NFS服务器IP上的目录,挂载到本地的/data/use/目录下
mount -t nfs ip_localname:/data/use /data/use
⑤ 查询挂载情况
#完成挂载后,可以查询挂载情况
df -h
⑥ 自动挂载设置
vim /etc/fstab
ip_localname:/data/freeswitch /data/freeswitch nfs defaults 0 0
⑥ 参数列表
NFS常用参数
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
Linux系统中通过service管理的,需要在/etc/init.d/目录下创建启动程序
启动
service rpcbind start
开机启动
chkconfig rpcbind on
通过systemctl管理的,需要在/lib/systemd/system/配置相应的service
启动
systemctl start rpcbind
开机启动
systemctl enable rpcbind