Linux网络文件共享服务之NFS

Posted 白-胖-子

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux网络文件共享服务之NFS相关的知识,希望对你有一定的参考价值。

Linux网络文件共享服务

常见存储类型

NFS服务

  • NFS:Network File System 网络文件系统,Sun 公司开发。
  • 通过使用 NFS,用户和程序可以像访问本地文件一样访问远端系统上的文件,
  • NFS基于RPC(Remote Procedure CallProtocol 远程过程调用)实现
  • NFS依赖于RPC
  • NFS启动时会将本身端口注册到RPC中
  • NFS是文件系统,是基于内核的功能
  • 基于网络的资源通过文件系统实现
    NFS工作原理
 yum provides nfs-utils
nfs-utils-1:2.3.3-35.el8.x86_64 : NFS utilities
     ...: and supporting clients and daemons for
     ...: the kernel NFS server
Repo        : @System
Matched from:
Provide    : nfs-utils = 1:2.3.3-35.el8

nfs-utils-1:2.3.3-35.el8.x86_64 : NFS utilities
     ...: and supporting clients and daemons for
     ...: the kernel NFS server
Repo        : BaseOS
Matched from:
Provide    : nfs-utils = 1:2.3.3-35.el8

RPC 远程过程调用

  • RPC采用C/S模式,
  • 调用接口协商实现
  • 让远程服务为本地提供服务
  • RPC服务端口是固定的
  • rpcbind服务器
um info rpcbind.x86_64 
BaseOS           35 kB/s | 3.9 kB     00:00    
AppStream        17 kB/s | 4.3 kB     00:00    
EPEL             22 kB/s | 4.7 kB     00:00    
extras          4.4 kB/s | 1.5 kB     00:00    
centosplus      4.8 kB/s | 1.5 kB     00:00    
Installed Packages
Name         : rpcbind
Version      : 1.2.5
Release      : 7.el8
Architecture : x86_64
Size         : 108 k
Source       : rpcbind-1.2.5-7.el8.src.rpm
Repository   : @System
From repo    : BaseOS
Summary      : Universal Addresses to RPC
             : Program Number Mapper
URL          : http://git.linux-nfs.org/?p=steved/rpcbind.git;a=summary
License      : BSD
Description  : The rpcbind utility is a server
             : that converts RPC program numbers
             : into universal addresses.  It
             : must be running on the host to be
             : able to make RPC calls on a
             : server on that machine.
  • 查看rpc相关端口
rpc -info

RPC工作原理

  • 客户机请求程序调用进程发送一个有进程参数的调用信息到服务进程,然后等待应答信息。
  • 在服务器端,进程保持睡眠状态直到调用信息到达为止。
  • 当一个调用信息到达,服务器获得进程参数,计算结果,发送答复信息,然后等待下一个调用信息,
  • 最后,客户端调用进程接收答复信息,获得进程结果,然后调用执行继续进行。

NFS软件介绍

  • 软件包:nfs-utils(包括服务器和客户端相关工具,CentOS8 最小化安装时默认没有安装)
  • 相关软件包:rpcbind(必须),tcp_wrappers
  • Kernel支持:nfs.ko
  • 端口:2049(nfsd), 其它端口由portmap(111)分配
  • 日志:/var/lib/nfs/

NFS服务主要进程:

  • rpc.nfsd 最主要的NFS进程,管理客户端是否可登录
  • rpc.mountd 挂载和卸载NFS文件系统,包括权限管理
  • rpc.lockd 非必要,管理文件锁,避免同时写出错
  • rpc.statd 非必要,检查文件一致性,可修复文件
    说明:CentOS 6 开始portmap进程由rpcbind代替

NFS配置文件:

共享目录配置文件位置

/etc/exports ## 全局共享配置文件
/etc/exports.d/*.exports ## 独立的共享配置文件

NFS共享配置文件格式

/共享目录dir 主机1(opt1,opt2) 主机2(opt1,opt2)...

NFS共享配置文件格式说明:

  • 共享允许的客户端主机地址格式
* # anonymous:使用*通配表示允许所有客户端连接
10.0.0.1 # 单个主机地址:ipv4,ipv6,FQDN
## IP networks:两种掩码格式均支持
10.0.0.0/255.255.255.0
10.0.0.0/24
*.sun.co # wildcards:主机名通配,IP不可以使用通配符
@sunhome # netgroups:NIS域的主机组,@group_name

NFS共享配置文件权限配置说明:

  • 在主机后括号()内添加需要赋予客户端的权限

  • 默认选项:(ro,sync,root_squash,no_all_squash)

  • ro,rw 只读和读写

  • async 异步,数据变化后不立即写磁盘,先写入到缓冲区中,过一段时间再写入磁盘,性能高,安全性低

  • sync(1.0.0后为默认)同步,数据在请求时立即写入共享存储磁盘,性能低,安全性高

  • root_squash (默认)远程root映射为nfsnobody,UID为65534,CentOS8 为nobody,CentOS7以前的版本为nfsnobody

  • no_root_squash 远程root映射成NFS服务器的root用户

  • all_squash 所有远程用户(包括root)都变成nfsnobody,CentOS8 为nobody

  • no_all_squash (默认)保留共享文件的UID和GID

  • anonuid和anongid 指明匿名用户映射为特定用户UID和组GID,而非nobody,可配合all_squash使用

NFS相关工具软件

rpcinfo

  • rpcinfo 工具可以查看RPC相关信息
  • 查看注册在指定主机的RPC程序
    rpcinfo -p hostname
  • 查看RPC注册程序
    rpcinfo -s hostname

exportfs

  • exportfs:可用于查看和重新加载NFS共享配置文件
-v #查看本机所有NFS共享
-r #重读配置文件,并共享目录
-a #输出本机所有共享
-au #停止本机所有共享

showmount

  • 查看远程主机的NFS共享
showmount -e hostname

mount.nfs

  • 客户端NFS挂载
  • 示例
    mount -o rw,nosuid,fg,hard,intr 10.0.0.192:/nfsdir /data/nfs/
  • 基于安全考虑,建议使用nosuid,netdev,noexec 挂载选项
fg #(默认)前台挂载
bg #后台挂载
hard #(默认)持续请求
soft #非持续请求
intr #和hard配合,请求可中断
rsize #和wsize 一次读和写数据最大字节数,rsize=32768
_netdev #无网络服务时不挂载NFS资源
vers #指定版本,客户端centos8默认4.2 ,centos7默认4.1 centos6默认4.0

实现nfs网络共享

  • 客户端和服务器端都需要安装nfs-utiles
  • nfs-server为服务器端主程序

服务器端

  • 安装好nfs-untiles
    yum -y install nfs-untiles

启动服务

systemctlenable --now rpcbind.service
systemctl enable --now nfs-server.service

选择或者创建共享文件夹

  • 创建文件夹或者选择文件夹
  • 修改需要的权限
    setfacl -m u:nobody:rwx /data

写共享规则

  • /etc/exports 共享规则,系统自带空空
  • 写个后缀名字叫.exports配置文件载/etc/exports.d/目录下
  • 格式 /共享目录 被允许访问的主机(权限)
cat /etc/exports.d/m44.exports 
/data *(rw) # 共享/data目录给所有主机同时具有读写权限
  • 更改规则后使用 exportfs -r刷新共享规则
    exportfs -r
  • 查看共享exportfs -v
exportfs -v
/data         	<world>(sync,wdelay,hide,no_subtree_check,sec=sys,rw,secure,root_squash,no_all_squash)
  • 只压榨root,如果允许root,需要不压榨
  • 账号不统一可能造成读写权限冲突

客户端挂载共享目录

确定挂载目录

  • 查看远端服务器共享目录
showmount -e 10.0.0.192
Export list for 10.0.0.192:
/data *

挂载

  • 将远端共享目录挂载到本地目录

mount 10.0.0.192:/data /linux44/

测试

  • 查看挂载情况
[13:04:07 root@C8-88[ linux44]#df -h
Filesystem           Size  Used Avail Use% Mounted on
devtmpfs             886M     0  886M   0% /dev
tmpfs                904M     0  904M   0% /dev/shm
tmpfs                904M  8.8M  895M   1% /run
tmpfs                904M     0  904M   0% /sys/fs/cgroup
/dev/mapper/cl-root   17G  7.3G  9.8G  43% /
/dev/sda1            976M  139M  771M  16% /boot
tmpfs                181M     0  181M   0% /run/user/0
10.0.0.192:/data      50G  389M   50G   1% /linux44

实现开机自动挂载

  • 编辑/etc/fstab添加对用条目
vim /etc/fstab
10.0.0.192:/data /linux44 nfs defaults,_netdev 0 0

以上是关于Linux网络文件共享服务之NFS的主要内容,如果未能解决你的问题,请参考以下文章

第九章 网络文件共享服务之NFS

Linux三阶段之三:存储服务(NFS)

Linux网络之YUM仓库的补充和NFS共享服务

0基础linux运维教程 共享存储之nfs介绍

linux集群搭建之nfs服务的搭建

Linux之NFS网络文件系统