Linux极简搭建nfs共享服务.md - liuxiang/liuxiang.github.io GitHub Wiki

一.介绍

FS(network file system)网络文件系统,类似Windows中的文件夹共享,如下有三台机器A, B, C,它们需要访问同一个目录,目录中都是图片,传统的做法是把这些图片分别放到A, B, C。但是使用NFS只需要放到A上,然后A共享给B和C即可。访问的时候,B和C是通过网络的方式去访问A上的那个目录。

  • server机(A):192.168.227.3

  • Client机(B,C):192.168.227.4; 192.168.227.5;

二.部署脚本

配置Service机: nfs-service.sh

/nfs-share仅为示例,如已确定目录位置,修改即可.

echo '切换安装nfs用户'
sudo su

echo '一.安装:nfs-utils'
yum -y install nfs-utils

echo '二.共享规则配置(vim /etc/exports)'
nfs_path=/opt/nfs-share  # 选择位置注意容量够用
mkdir $nfs_path
sudo tee /etc/exports << EOF
$nfs_path   *(rw,sync,no_subtree_check,no_root_squash)
EOF
cat /etc/exports

echo '先为rpcbind和nfs做开机启动'
systemctl enable rpcbind.service
systemctl enable nfs-server.service

echo '分别启动rpcbind和nfs服务'
systemctl restart rpcbind.service
systemctl restart nfs.service

echo 'nfs服务状态'
service nfs status

echo '查看service列中是否有nfs服务来确认NFS是否启动'
#IP=`/sbin/ifconfig|grep inet|grep -v inet6|grep -v 127.0.0.1|awk '{if(substr($2,1,5)=="addr:"){print substr($2,6)} else{print $2}}'|head -n 1`
#echo $IP
#showmount -e $IP
nfs_server_ip=localhost
showmount -e $nfs_server_ip

echo '切换目录权限用户(修改为部署应用的用户)'
chgrp admin $nfs_path -R
chown admin $nfs_path -R

# 试情况调整
chgrp users $nfs_path -R
chown tdops $nfs_path -R
  • 业务使用. 软连:ln -s <源位置> <目标位置>
# 业务账号创建目录 > 定位业务共享位置 > 并配置软连
nfs_path=/opt/nfs-share
mkdir -p $nfs_path/taskResult
echo $PWD
ln -s $nfs_path/taskResult $PWD

# 删除软连
rm -rf $PWD/taskResult/ # 删除目录下文件(慎用)
rm -rf $PWD/taskResult  # 删除软连(后缀非斜杠/)
  • 停用nfs.service
# 停用nfs.service
service nfs stop

配置Client机: nfs-client.sh

/nfs-share仅为示例,如已确定目录位置,修改即可.

echo '切换安装nfs用户'
sudo su

echo '一.安装:nfs-utils'
yum install -y nfs-utils

echo '二.开机启动 & 启动服务'
systemctl enable rpcbind.service
systemctl start rpcbind.service

echo '检查nfs服务(手动更新nfs-Servie-Ip)'
#nfs_server_ip=10.58.10.18
nfs_server_ip=10.57.16.13
showmount -e $nfs_server_ip

echo '挂载节点(注意目标文件夹需事先存在)'
mkdir /nfs-share-client
nfs_server_path=/opt/nfs-share
mount -t nfs $nfs_server_ip:$nfs_server_path /nfs-share-client  # 目录权限机制同步server端定义

echo '检查挂载情况及容量'
df -h
  • 业务使用. 软连:ln -s <源位置> <目标位置>
# 定位业务共享位置 > 并配置软连
ln -s /nfs-share-client/taskResult $PWD

# 删除软连
rm -rf $PWD/taskResult/ # 删除目录下文件(慎用)
rm -rf $PWD/taskResult  # 删除软连(后缀非斜杠/)
  • 卸除nfs挂载
umount -l /nfs-share-client

三. 共享机-配置NFS

一.安装:nfs-utils

yum -y install nfs-utils

二.共享规则配置(vim /etc/exports)

# 说明
<共享目录> <ip/ip段>(<读写/只读>,<是否同步>,<是否禁止root权限操作>)

# 指定ip配置
/nfsroot 192.168.227.4(rw,sync,fsid=0)  192.168.227.5(rw,sync,fsid=0)    

# ip段配置
/nfsroot   192.168.227.0/24(rw,no_root_squash,no_all_squash,sync,anonuid=501,anongid=501)

/nfsroot   *(rw,sync,no_subtree_check,root_squash)
/nfsroot   10.58.10.0/255(rw,sync,no_subtree_check,no_root_squash)
  • rw表示可读写,ro只读;
  • sync :同步模式,内存中数据时时写入磁盘;async :不同步,把内存中数据定期写入磁盘中;
  • no_subtree_check:不检查父文件夹权限
  • no_root_squash :加上这个选项后,root用户就会对共享的目录拥有至高的权限控制,就像是对本机的目录操作一样。不安全,不建议使用
  • root_squash:和上面的选项对应,root用户对共享目录的权限不高,只有普通用户的权限,即限制了root;all_squash:不管使用NFS的用户是谁,他的身份都会被限定成为一个指定的普通用户身份;
    • anonuid/anongid :要和root_squash 以及all_squash一同使用,用于指定使用NFS的用户限定后的uid和gid,前提是本机的/etc/passwd中存在这个uid和gid。
  • fsid=0表示将/opt/nfs整个目录包装成根目录

三.启动共享机的nfs服务

  • 先为rpcbind和nfs做开机启动
admin]# cat /etc/redhat-release
CentOS Linux release 7.7.1908 (Core)

# Centos 7X:    
systemctl enable rpcbind.service    
systemctl enable nfs-server.service

# Centos 6X:
chkconfig --list rpcbind
chkconfig --list nfs
chkconfig nfs on
  • 分别启动rpcbind和nfs服务:
Centos 7X:  
systemctl start rpcbind.service    
systemctl start nfs.service  

Centos 6X: 
service rpcbind start
service nfs start
  • 检查
确认NFS服务器启动成功: `rpcinfo -p`

# 查看nfs状态
service nfs status

# 通过查看service列中是否有nfs服务来确认NFS是否启动.查看可挂载目录及可连接的IP
nfs_server_ip=localhost
showmount -e $nfs_server_ip
# 停用nfs.service
service nfs stop

四.关闭共享机的防火墙或配置通过规则

systemctl stop firewalld.service

四. Client端-引用NFS

五.在B,C机上配置clinet端

  • 1、安装nfs,并启动服务。
yum install -y nfs-utils

systemctl enable rpcbind.service
systemctl start rpcbind.service

客户端不需要启动nfs服务,只需要启动rpcbind服务.

  • 2、检查 NFS 服务器端是否有目录共享
showmount -e 192.168.227.3
  • 3、使用 mount 挂载共享机的目录/opt/nfs到客户端B的目录/opt/nfs下
[root@localhost ~]# mkdir /opt/nfs   
[root@localhost ~]# mount -t nfs 192.168.227.3:/nfsroot/ /nfsroot/    
[root@localhost ~]# df -h    

六、在服务器端A再建立一个共享目录,并且可以允许A、B、C写入共享目录

  • 1、在B、C机上取得root用户ID号
[root@localhost home]# id root   
uid=0(root) gid=0(root) 组=0(root)
  • 2、在A服务器上再建立一个共享目录
mkdir /opt/nfs1

# vim /etc/exports   
/opt/nfs 192.168.227.4(rw,sync,fsid=0) 192.168.227.5(rw,sync,fsid=0)    
/opt/nfs1 192.168.227.0/24(rw,sync,all_squash,anonuid=0,anongid=0)

加入第二行,anonuid=0,anongid=0即为root用户id。

  • 3、让修改过的配置文件生效
exportfs –arv

使用exportfs命令,当改变/etc/exports配置文件后,不用重启nfs服务直接用这个exportfs即可,它的常用选项为[-aruv].     

-a :全部挂载或者卸载;      
-r :重新挂载;      
-u :卸载某一个目录;      
-v :显示共享的目录;
  • 4、 查看新的可挂载目录及可连接的IP
showmount -e 192.168.227.3    
  • 5、在B、C clinet端新挂载一个目录
showmount -e 192.168.227.3  #查看新的挂载共享目录是否有了。

mkdir nfs1   
mount -t nfs 192.168.227.3:/opt/nfs1/ /opt/nfs1/    

ll > /opt/nfs1/ll.txt   #测试向新的共享目录中可以写入文件了。    
(卸载挂载:umount /home/nfs1/)
  • 6、想在客户机B、C上实现开机挂载,则需要编辑/etc/fstab:
vim /etc/fstab
加入以下内容:
192.168.227.3:/opt/nfs                  /opt/nfs    nfs    nolock   0 0   
192.168.227.3:/opt/nfs1                 /opt/nfs1  nfs    nolock   0 0

保存后,重新挂载
mount -a

五.权限控制

  • no_root_squash
# 切换为业务账户
chgrp admin /nfsroot -R
chown admin /nfsroot -R

chgrp root /nfsroot -R
chown root /nfsroot -R
  • root_squash
/nfsroot   192.168.227.0/24(rw,no_root_squash,no_all_squash,sync,anonuid=501,anongid=501)

六.问题


参考
Linux搭建nfs共享服务
Linux-NFS
Linux实现NFS - 简书
Linux——NFS服务 - 简书
NFS服务的用户身份映射

⚠️ **GitHub.com Fallback** ⚠️