本文环境: CentOS 7
简介
NFS(Network File System)是一个历史悠久的协议, 由 SUN 公司于 1984 年开发, 用于在 UNIX-like 系统之间共享某些目录, 采用 C/S 架构, NFS 服务器是一个大型文件服务器, 将自己想要共享的某些目录设置为输出目录, 然后客户端将需要的目录挂载到自己文件系统的某个目录下, 以后客户端对这个目录内的各种操作 (新建, 删除, 复制等) 其实是操作于远程服务器对应的真实目录.
RPC 协议
RPC(Romote Procedure Call)即远程过程调用, 这项协议简单的说就是: 编程人员可以像调用本地方法 (或函数) 一样调用一个位于远程计算机的方法 (或函数), 而这个方法(或函数) 的调用过程对于编程人员是完全透明的, 而 NFS 在通信时需要使用多个端口, 而这些端口就是利用 RPC 进行协商并选定.
权限问题
客户端操作已挂载的共享目录内的文件的具体用户身份由主配置文件决定, 如果所有用户都被压缩 (all_squash) 或者仅 root 被压缩(root_squash), 那么被压缩的用户将被映射为 nobody 用户, 这时在这个共享目录下操作文件的身份便是 nobody;
另外, 服务器共享目录中的文件所属的 UID 和 GID 会被映射为客户端对应的用户, 比如,
服务器有如下文件,
- readme.txt UID=1000(Tom) GID=1000(Tom)
- install.sh UID=1001(Bob) GID=1001(Bob)
- startgui.py UID=1009(Jerry) GID=1009(Jerry)
客户端的 passwd 文件的部分如下,
- Jack:x:1000:1000
- Natasha:x:1001:1001
- Bob:x:1002:1002
- Simoth:x:1003:1003
那么在客户机挂载的共享目录中的文件所属情况如下,
- readme.txt UID=1000(Jack) GID=1000(Jack)
- install.sh UID=1001(Natasha) GID=1001(Natasha)
- startgui.py UID=1009 GID=1009
如果想要访问 remove.py 文件, 要取决于这个文件的其他人权限!
配置
1. 服务器安装:
这里采用 YUM 源方式安装,
[[email protected] ~]# yum -y install nfs-utils
在安装时会自动安装 rpcbind 软件, 这个软件正是 RPC 协议的一种具体实现, 用于帮助 NFS 选定端口.
2. 配置主配置文件
NFS 的主配置文件是 / etc/exports, 正如其字面意思, 这个文件用于设置 NFS 的输出目录, 当 NFS 服务启动或重启时会自动读取此文件, 然后根据此文件中设置的参数来输出对应 的目录, 此配置文件配置规则比较简单, 语法如下,
待输出目录 主机 1(选择 1, 选择 2[,...])主机 2(选择 1, 选择 2[,...]) [...]
常见的选项如下,(共享目录即被输出的目录, 在 NFS 中输出目录也称为共享目录)
ro: 共享目录只读, 默认选项
rw: 共享目录可读可写
root_squash: 如果客户机使用 root 用户访问此共享目录, 则被压缩为 nobody 用户, 其 他用户不进行压缩, 默认选项
all_squash: 对所有访问此共享目录的用户都压缩为 nobody
no_root_squash: 对所有用户访问此共享目录时都不压缩, 包括 root 也不会被压缩, 所 以这个选项比较危险
anonuid: 指定被压缩后的用户的 UID, 默认就是 nobody 的 UID
anongid: 指定被压缩后的用户的 GID, 默认就是 nobody 的 GID
sync: 同步更新, 客户端将数据写入共享目录时, 马上写入到服务器的硬盘中, 默认选 项
async: 异步更新, 客户端将数据写入共享目录时, 先将写入的数据留在客户机的内存 中, 待空闲时再写入到服务器的硬盘中
insecure: 允许客户机使用非保留端口 (大于 1024) 与服务器进行连接
下面是一个简单的配置例子(请自行创建 / home/nfsshare, 并把权限改为 777),
/home/nfsshare 192.168.88.0/24(rw,async)
解释: 192.168.88.0/24 用于设置这个网段, 也可以用 192.168.88.* 代替, 但是并不建议, 因为通配符 * 多用于匹配主机名.
3. 验证配置
在重启 nfs 服务前要确保 rpcbind 服务已经运行, 所以两个服务的启动顺序是: 先启动 rpcbind, 再启动 nfs,
- [[email protected] ~]# systemctl start rpcbind
- [[email protected] ~]# systemctl start nfs
使用 exportfs 命令可以在不重启 nfs 服务下更新输出目录,
exportfs: 不加任何参数将打印当前正被输出的目录
exportfs -a: 输出所有列在 / etc/exports 中的目录
exportfs -r: 重新输出所有列在 / etc/exports 中的目录
exportfs -v: 打印正被输出目录的详细信息
4. 客户机配置
客户机如果需要使用 showmount 命令也需要安装 nfs-utils 软件, 使用 showmount 可以 查看远程服务器所提供的输出目录, 如在客户机输入如下命令,
- [[email protected] ~]# showmount -e 192.168.88.128
- Export list for 192.168.88.128:
- /home/nfsshare 192.168.88.0/24
如果命令显示如下错误,
clnt_create: RPC: Port mapper failure - Unable to receive: errno 113 (No route to host)
这是由于防火墙没放行相应的端口, 关闭服务器的防火墙即可,
[[email protected] ~]# systemctl stop firewalld
如果命令显示如下错误,
clnt_create: RPC:Program not registered
这是由于 rpcbind 没启动, 请重启 nfs 服务(因为重启 nfs 时, nfs 会自动启动 rpcbind 服务), 如果重启无效, 请手动按顺序重启这些服务,
- [[email protected] ~]# systemctl stop nfs rpcbind
- [[email protected] ~]# systemctl start rpcbind
- [[email protected] ~]# systemctl start nfs
现在在客户机上挂在这个共享目录,
[[email protected] ~]# mount 192.168.88.128:/home/nfsshare /media
将共享目录挂载到 / media 目录, 查看当前的文件系统,
- [[email protected] ~]# df -hT
- Filesystem Type Size Used Avail Use% Mounted on
- /dev/mapper/CentOS-root xfs 2.4G 1.3G 1.2G 54% /
- devtmpfs devtmpfs 223M 0 223M 0% /dev
- tmpfs tmpfs 235M 0 235M 0% /dev/shm
- tmpfs tmpfs 235M 5.6M 229M 3% /run
- tmpfs tmpfs 235M 0 235M 0% /sys/fs/cgroup
- /dev/sr0 iso9660 4.3G 4.3G 0 100% /mnt/localyumrepo
- /dev/mapper/CentOS-home xfs 505M 26M 479M 6% /home
- /dev/sda1 xfs 125M 107M 19M 86% /boot
- /dev/mapper/CentOS-var xfs 509M 207M 303M 41% /var
- tmpfs tmpfs 47M 0 47M 0% /run/user/0
- 192.168.88.128:/home/nfsshare nfs4 505M 26M 480M 6% /media
可以看到远程的这个共享目录已经被挂载, 并且文件系统类型是 nfs4, 现在的 mount 命令可以不加 - t 参数来指定挂在目录的类型, mount 命令能够自动区分大部分常用的 文件系统类型,-t 参数用法如下,
[[email protected] ~]# mount -t nfs 192.168.88.128:/home/nfsshare /media
5. 客户机永久挂载
上面挂载文件系统的方法是临时的, 当下次系统重启后挂载的 nfs 共享目录就消失了, 想要永久挂载需要将挂载信息写入到 / etc/fstab 文件, 正如字面意思, fstab 全称是 file system table, 即文件系统表, 操作系统每次开机会将这文件中设置的文件系统进行自 动挂载, 输入如下代码即可实现 nfsshare 共享目录的永久挂载,
[[email protected] ~]# echo "192.168.88.128:/home/nfsshare /media nfs defaults 0 0">> /etc/fstab
永久挂载需要注意, 在客户机启动时确保服务器正在运行, 并且能够进行通信(比如服 务器的防火墙已经关闭或者放行了相应的端口), 不然系统会因为无法挂载此共享目录 导致启动失败从而进入急救模式.
至此, NFS 的基础配置已经完成!
来源: http://www.bubuko.com/infodetail-3346798.html