NFS 服务

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 主程序
  • 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

你可能感兴趣的:(NFS 服务)