NFS入门实践

NFS简介

NFS(Network File System)即网络文件系统,用于计算机之间通过网络共享资源。

简单来说:将NFS主机分享的目录,挂载到本地客户端当中,本地NFS的客户端应用可以读写位于远端NFS服务器上的文件,就像访问本地文件一样

场景

多台服务器共享同一份静态资源

安装配置

  • 服务端安装
#服务端安装nfs(192.168.1.100)
yum install nfs-utils rpcbind -y

#创建共享目录
mkdir -p /opt/nfs

#编辑/etc/exports
vim /etc/exports
/opt/nfs 192.168.1.0/24(rw,async,no_root_squash) #具体客户端ip和策略

#重新挂载导出
exportfs -ra

# 开机启动
systemctl enable rpcbind
systemctl enable nfs

#启动nfs
systemctl start rpcbind;  #一定要先启动rpc
systemctl start nfs;     
# centos6 改成service rpcbind start;service nfs start

  • 客户端安装
#安装nfs(客户端) 192.168.1.101
yum install nfs-utils rpcbind -y

#创建目录
mkdir /mnt
#挂载
mount -t nfs 192.168.1.100:/opt/nfs /mnt 
#取消挂载
umount -v /mnt

# 开机自动挂载
vim /etc/fstab 
192.168.1.100:/opt/nfs  /mnt      nfs     defaults        0 0

在客户端机器/mnt 目录的操作就像在服务端/opt/nfs 操作一样,其实操作是同一个目录文件,只有服务器端是真实存储

/etc/exports

服务端配置文件
/opt/nfs 192.168.1.0/24(rw,async,no_root_squash)
格式:/path/to/somedir CLIENT_LIST
多个客户端使用空白字符分隔,每个客户端小括号里定义客户端访问特性

  • ro:只读 rw:读写

  • sync 数据会同步写入到内存与硬盘中
    async 数据会先暂存内存

  • root_squash 当NFS客户端以root管理员访问时,映射为NFS服务器的匿名用户,非root用户映射成NFS服务器跟客户端一样用户id的用户(默认值)
    no_root_squash 当NFS客户端以root管理员访问时,映射为NFS服务器的root管理员, 非root用户映射成NFS服务器跟客户端一样用户id的用户(存在安全隐患,不建议使用)
    all_squash 不论登入 NFS 的使用者身份为何, 均被映射为匿名用户, 通常也就是 nobody(nfsnobody)

  • anonuid, anongid 指定映射的来宾账号的UID和GID

当NFS客户端以非root访问时,映射为NFS服务器的nobody/(nfsnobody),

vim /etc/exports
#nfs服务端添加用户501
useradd -u 501 webrunner

#所有NFS使用者都映射为501用户,501组
/opt/nfs 192.168.1.0/24(rw,async,all_squash,anonuid=501,anongid=501) 

#客户端无论以什么用户身份创建文件,都映射成501用户和501组
cd /mnt
touch test.txt

#查看NFS客户端 test.txt 的属主为用户501,组501
#查看NFS服务端 test.txt 的属主为用户501,组501,由于存在501用户,直接显示webrunner 名称

常见命令

exportfs(服务器端使用)

    exportfs -ra #重新挂载导出
    # -a:跟-r或-u选项同时使用,表示重新挂载所有文件系统或取消导出所有文件系统;
    # -r: 重新导出
    # -u: 取消导出
    # -v: 显示详细信息

showmount

showmount -e #查看本机NFS服务器导出文件系统,以及客户端列表,与/etc/exports 配置文件一致

rpcinfo

rpcinfo -p #显示所有的 port 与 program 的信息

原理

NFS 涉及两个服务RPC和NFS,当客户端访问NFS服务器文件时,RPC client端通过(port 111)连接RPC server,RPC server找到对应的NFS注册端口(前提:RPC先启动,NFS服务启动向RPC注册信息,包括端口号),回报给客户端,客户端通过端口连接NFS server端,实现数据通讯。

  • 主要进程端口 rpcbind/portmapper(tcp和udp上111),nfsd(tcp和udp上2049),mountd(默认半随机分配),quotad(默认随机分配),编辑/etc/sysconfig/nfs 可以固定mountd和quotad进程的端口

  • 主要日志目录/var/lib/nfs

你可能感兴趣的:(NFS入门实践)