1. NFS
1.1 概述
- NFS (Network File System) 网络文件系统, 最早由Sun 公司发展出来, 可以提供 通过网络, 让不同操作系统, 不同机器, 可以彼此分享指定的文件/目录, 所以可以看做是一个文件服务器, 但是这个NFS 可以让PC 通过网络访问.
- NFS 支持很多工功能, 不同功能启动不同程序, 每个程序都需要一些端口来传输数据, 所以NFS 没有固定端口, 是具体的功能提供的端口,
- NFS 最重要的就是远程调用(RPC) 服务, RPC服务是用于为 NFS 的每个功能分配对应的 port number, 并且返回给客户端, 客户端可以根据RPC 服务提供的 其他服务的端口, 然后连接到对应的端口
- NFS服务端 在启动任何服务时, 会主动向RPC 注册, 因此 RPC 会知道NFS 的功能对应的每个端口, 而RPC 的端口有时固定的, 所以客户端可以根据服务端的 RPC 知道NFS的功能.
1.2 客户端 到NFS 服务端的连接过程
- 客户端: 向服务端的RPC(port 111) 发出NFS 存取功能请求
- 服务端: 找到对应的注册 NFS daemon 端口, 发回客户端
- 客户端: 根据收到的端口, 与 NFS daemon 通信
1.2 NFS 软件结构
-
NFS 有两个必备的程序,
- RPC -- rpcbind
- 用于为客户端 提供NFS服务的端口map.
- NFS -- nfs-utils
- NFS 主程序
- RPC -- rpcbind
-
NFS 相关配置文件
-
主配置文件: /etc/exports
- NFS 的主配置文件, 系统没有默认设置, 需要手动建立
-
NFS 文件系统维护指令: /usr/sbin/exportfs
- 维护NFS 分享资源的指令, 可以利用该指令 重新分享 /etc/exports 文件内设置的目录资源, 可以将 NFS Server 分享的目录 卸载, 重新分享, 等等
-
分享资源的 登录文件 /var/lib/nfs/*tab
- nfs 服务器登陆文件, 两个比较重要的, etab 用于设置分享目录的完整权限设置, xtab 记录曾经连接到NFS 服务器的相关客户端数据
-
客户端查询分享资源的配置文件: /usr/sbin/showmount
- 客户端的配置文件, showmount 用来查看NFS 分享出来的目录资源
-
1.3 主配置文件
- 主配置文件 /etc/exports
- 常见参数
参数 内容
rw ro 该目录分享的权限 是可写的(read-write) 或者只读(read-only), 但是最终可不可读写, 还是文挨近系统的 rwx 以及用户身份.
sync async 代表目录是否是 立即同步写入硬盘, async 表示暂时缓存到 内存中, 而非直接写入硬盘.
no_root_sqaush root_squash 客户端使用账号如果是 root时, 如何判断该账号身份, root_squash 表示会变成 nfsnobody, 如果需要使用 root 用户 则应该使用 no_root_squash
all_squash 不论登录的 NFS 的用户身份是谁, 都会被被设置成匿名 nobody(nfsnobody)
anonuid anongid anon表示anonymous(匿名者) 设置用户UID/GID, 通常是 nobody
-
生效配置文件
exportfs -r
-
启动服务
systemctl start rpcbind
systemctl start nfs
-
查看 RPC 服务的注册状态
rpcinfo -p localhost
- rpc 选项
- -p: 针对某个IP(未写则设置成本机) 显示出所有port 和 porgram 信息
- -t: 检测 TCP
- -u: 检测 UDP
1.4 客户端配置
- 安装 nfs-utils
2. 安装
2.1 服务端安装
yum -y install nfs-utils rpcbind
- 查看
[root@node10009 ~]# systemctl start nfs
[root@node10009 ~]# systemctl status nfs | grep Active
Active: active (exited) since Sat 2018-12-22 08:38:56 CST; 1min 38s ago
[root@node10009 ~]# systemctl start rpcbind
[root@node10009 ~]# systemctl status rpcbind | grep Active
Active: active (running) since Sat 2018-12-22 08:34:09 CST; 6min ago
[root@node10009 ~]#
2.2 服务端配置
- 创建共享的目录
mkdir -p /data/share/
chmod 777 /data/share
- 编辑配置文件
[root@node10009 ~]# cat /etc/exports
/data/share 192.168.10.*(rw,no_root_squash,no_all_squash,sync)
-
注意事项:
-
/etc/exports
文件内主机和权限之间不可以有空格, 权限之间使用逗号(,) 分割, 且不可以有空格.
-
-
重启服务
systemctl restart nfs
2.3 客户端连接
[fangfc@node10011 ~]$ showmount -e 192.168.10.9
Export list for 192.168.10.9:
[fangfc@node10011 ~]$ mkdir /data
[fangfc@node10011 ~]$ sudo mkdir /data
[sudo] password for fangfc:
[fangfc@node10011 ~]$ sudo mount -t nfs 192.168.10.9:data/share /data/ -o proto=tcp -o nolock
[fangfc@node10011 ~]$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/centos-root 37G 25G 13G 68% /
devtmpfs 1.9G 0 1.9G 0% /dev
tmpfs 1.9G 0 1.9G 0% /dev/shm
tmpfs 1.9G 12M 1.9G 1% /run
tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
/dev/sda1 1014M 142M 873M 14% /boot
tmpfs 378M 0 378M 0% /run/user/1000
192.168.10.9:/data/share 17G 16G 1.5G 92% /data
[fangfc@node10011 ~]$
2.4 测试拷贝文件
- 服务端
[root@node10009 ~]# echo 'hello' > /data/share/a.txt
- 客户端
[fangfc@node10011 data]$ cp a.txt /tmp
[fangfc@node10011 data]$ cat /tmp/a.txt
hello
2.5 客户端添加文件
- 客户端
[fangfc@node10011 ~]$
[fangfc@node10011 ~]$ sudo echo 'hello' > /data/b.txt
[sudo] password for fangfc:
[fangfc@node10011 ~]$
- 服务端
[root@node10009 data]# ls /data/share/
a.txt b.txt
[root@node10009 data]#
END
网友评论