|NO.Z.00036|——————————|^^ 部署 ^^|——|Linux&NFS服务.V02|——|NFS部署|
一、NFS服务器部署
### --- 安装nfs-utils服务
~~~ 注:通常情况下:是作为系统的默认包安装的
~~~ CentoOS6.x之前rpcbind叫portmap
[root@server21 ~]# yum install -y nfs-utils-*
[root@server21 ~]# yum install -y rpcbind-*
二、NFS服务器的启动与停止:
### --- 启动NFS服务器
~~~ 为了使NFS服务器能正常工作,需要启动rpcbind和nfs两个服务,
~~~ 并且rpcbing一定要先于nfs启动。
[root@server21 ~]# service rpcbind start
[root@server21 ~]# service nfs start
Starting RPC idmapd: [ OK ] // 最后一步是把nfs向rpc注册一下
### --- 查询NFS服务器状态
[root@server21 ~]# service rpcbind status
[root@server21 ~]# service nfs status
### --- 停止NFS服务器
~~~ 要停止NFS运行时,需要先停止nfs服务再停止rpcbind服务,
~~~ 对于系统中有其他服务(如NIS)需要使用时,不需要停止rpcbind服务
[root@server21 ~]# service nfs stop
[root@server21 ~]# service rpcbind stop // 可以不需要停止,rpc是默认启动的。若停止可能影响其他的服务
### --- 设置NFS服务器的自动启动状态
~~~ 设置rpcbind和nfs服务在系统运行级别2345自动启动
[root@server21 ~]# chkconfig --list rpcbind
rpcbind 0:off 1:off 2:on 3:on 4:on 5:on 6:off
[root@server21 ~]# chkconfig --list nfs
nfs 0:off 1:off 2:off 3:off 4:off 5:off 6:off
[root@server21 ~]# chkconfig nfs on
### --- 查看RPC服务器开启了那些端口
[root@server21 ~]# rpcinfo -p localhost
三、实验相关实例:
### --- 将NFS服务器的/atyanqi共享给20.20.20.22网段,rw权限
[root@server21 ~]# mkdir /atyanqi
[root@server21 ~]# chmod o+w /atyanqi/ // 给其他人设置共享写入的权限
[root@server21 ~]# ll -ld /atyanqi/
drwxr-xrwx 2 root root 4096 Feb 4 09:47 /atyanqi/
[root@server21 ~]# vim /etc/exports
/atyanqi 20.20.20.22(rw) // /atyanqi:共享那个目录 20.20.20.22:客户端地址(rw):给予的权限
[root@server21 ~]# service nfs reload // 重新把配置文件加载一下
### --- 重启rpcbind 和nfs服务
[root@server21 ~]# service rpcbind restart
[root@server21 ~]# service nfs restart
[root@server21 ~]# exportfs // 查看共享目录列表
/atyanqi 20.20.20.22
### --- 服务器端查看nfs共享状态
[root@server21 ~]# showmount -e 20.20.20.21 // 本机测试,
Export list for 20.20.20.21:
/atyanqi 20.20.20.22
### --- 查看自己共享的服务
### --- 客户端查看NFS共享状态
[root@server22 ~]# showmount -e 20.20.20.21 // 客户度测试,服务器端IP地址
Export list for 20.20.20.21:
/atyanqi 20.20.20.22
### --- 客户端挂载NFS服务器共享目录
~~~ 命令格式:mount NFS服务器IP:共享目录 本地挂载点目录
[root@server22 ~]# mkdir /atyanqi // 创建本地挂载点
[root@server22 ~]# service rpcbind start
[root@server22 ~]# mount -o vers=3 20.20.20.21:/atyanqi /atyanqi/ // 临时挂载 #-o vers=3 指定挂载使用nfs V3版本(避免同步延迟)
[root@server22 ~]# df -h
20.20.20.21:/atyanqi 94G 841M 88G 1% /atyanqi
[root@server22 ~]# mount |grep nfs
20.20.20.21:/atyanqi on /atyanqi type nfs (rw,vers=3,addr=20.20.20.21)
~~~ 测试挂载的目录是否可以正常读写
[root@server22 ~]# touch /atyanqi/a.txt
[root@server22 ~]# vim /atyanqi/a.txt
aaaaaaaaaaaaaaaaaaaaaaaaa
~~~ 验证客户端和nfs服务器端文件是否一致:
[root@server21 ~]# cat /atyanqi/a.txt // 服务端查看该文件正常
aaaaaaaaaaaaaaaaaaaaaaaaa
~~~ 修改服务器端响应权限,不然客户端无法正常访问和使用
### --- nfs共享权限和访问控制
### --- 客户端root用户
~~~ 使用客户端和root身份在nfs服务器上创建文件,文件的所有者和所属组是nfsnobody
~~~ 默认是以nfsnobody身份创建文件或者目录
[root@server22 ~]# touch /atyanqi/a.txt // root身份创建文件
[root@server22 ~]# ll /atyanqi/a.txt
-rw-r--r-- 1 nfsnobody nfsnobody 0 Feb 4 10:10 /atyanqi/a.txt // 但文件最终属于nfsnobody用户及组;默认采用的是rootsport会映射成nfsnobody
### --- 客户端普通用户
~~~ 使用客户端的普通用户身份在nfs服务器上创建文件,所有者和所属组是nobody或普通用户。
~~~ 如果明确设定了普通用户的映射用户身份,那么此时客户端用户的身份转换为指定映射用户
~~~ 如果NFS server上面有同名用户,
~~~ 那么此时客户端登录账户的身份转换为NFS server上面的同名用户。
~~~ 以root_squash身份运行
[root@server21 ~]# vim /etc/exports
/atyanqi 20.20.20.22(rw,no_root_squash)
[root@server21 ~]# service nfs reload
[root@server22 ~]# touch /atyanqi/b.txt // 客户端可能会保留之前的挂载记录,这样我们需要把挂载断开,重新挂载。
[root@server22 ~]# ll /atyanqi/ // 查看到以root身份创建用目录,目录权限未发生变化。
total 0
-rw-r--r-- 1 nfsnobody nfsnobody 0 Feb 4 10:10 a.txt
-rw-r--r-- 1 root root 0 Feb 4 10:19 b.txt
[root@server21 ~]# ll /atyanqi/
total 0
-rw-r--r-- 1 nfsnobody nfsnobody 0 Feb 4 10:10 a.txt
-rw-r--r-- 1 root root 0 Feb 4 10:19 b.txt
### --- 以其它身份运行
[root@server22 ~]# useradd nfstest
[root@server22 ~]# id nfstest
uid=500(nfstest) gid=500(nfstest) groups=500(nfstest)
[root@server21 ~]# vim /etc/exports // 说明在客户端不管你是用什么身份创建文件或者目录,都会显示是这个UID及GID是500的用户身份创建的,也就是nfstest这个用户创建的。
/atyanqi 20.20.20.22(rw,all_squash,anonuid=500,anongid=500)
[root@server21 ~]# service nfs reload
[root@server22 ~]# touch /atyanqi/c.txt
[root@server22 ~]# ll /atyanqi/ // 在服务器上查看都是这个UID及GID。
total 0
-rw-r--r-- 1 nfsnobody nfsnobody 0 Feb 4 10:10 a.txt
-rw-r--r-- 1 root root 0 Feb 4 10:19 b.txt
-rw-r--r-- 1 500 500 0 Feb 4 10:37 c.txt
[root@server21 ~]# ll /atyanqi/ // 在客户端查看到的是nfstest的用户创建的。
total 0
-rw-r--r-- 1 nfsnobody nfsnobody 0 Feb 4 10:10 a.txt
-rw-r--r-- 1 root root 0 Feb 4 10:19 b.txt
-rw-r--r-- 1 nfstest nfstest 0 Feb 4 10:37 c.txt
四、卸载和自动挂载
### --- 卸载和自动挂载:
### --- 卸载:
### --- 卸载客户端的挂载目录
[root@server22 ~]# umount /atyanqi/
### --- 停止服务器端的共享
[root@server21 ~]# exportfs -au // 停止挂载
[root@server22 ~]# cd /atyanqi
bash: cd: /atyanqi: Stale file handle // 无效的文件句柄,挂载已经失效了,客户端时没有办法进行写入的
[root@server22 ~]# ll /atyanqi
ls: cannot access /atyanqi: Stale file handle
[root@server21 ~]# exportfs -ra //重新挂载
[root@server22 ~]# cd /atyanqi/ //可以正常写入
~~~ 自动挂载:/etc/fstab
~~~ 格式:<server>:<remote/export></local/directory>nfs<options> 0 0
~~~ #192.168.115.10:/home/zhangsan /media/zhangsan nfs defaults 0 0
~~~ mount -a
[root@server22 ~]# vim /etc/fstab
20.20.20.21:/atyanqi /atyanqi nfs defaults,vers=3 0 0 //为避免延迟加,vers=3
[root@server22 ~]# umount /atyanqi/
[root@server22 ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 94G 841M 88G 1% /
tmpfs 931M 0 931M 0% /dev/shm
/dev/sda1 976M 35M 891M 4% /boot
/dev/sr0 3.7G 3.7G 0 100% /mnt/cdrom
[root@server22 ~]# mount -a // 重新读取/etc/fstab文件
[root@server22 ~]# df -h // 挂载成功
20.20.20.21:/atyanqi 94G 841M 88G 1% /atyanqi
### --- 相关命令
~~~ exportfs命令
~~~ 如果我们在启动了NFS之后又修改了/etc/exports,
~~~ 是不是还要重新启动nfs呢?这个时候我们就可以用exportfs命令来是改动立刻生效,
~~~ 该命令格式如下:
~~~ 格式:exportfs[-aruv]
~~~ -a:全部挂载或卸载/etc/exports中的内容
~~~ -r:重新读取/etc/exports中的信息,并同步更新/etc/exports /var/lib/nfs/xtab
~~~ -u:卸载单一目录(和-a一起使用为卸载所有/etc/exports文件中的目录
~~~ -v:在export的时候,将详细的信息输出到屏幕上。
### --- 具体例子:
~~~ exportfs -au:卸载所有共享目录
~~~ exportfs -ra:重新共享所有目录并输出详细信息
[root@server22 ~]# exportfs -au // 服务器端全部卸载
[root@server22 ~]# exportfs -ar // 服务器端全部挂载,重新读取
[root@server21 ~]# exportfs
/atyanqi 20.20.20.22
[root@server21 ~]# exportfs -v // 将信息输出到屏幕上
/atyanqi 20.20.20.22(rw,wdelay,root_squash,all_squash,no_subtree_check,anonuid=500,anongid=500,sec=sys,rw,root_squash,all_squash)
### --- rpcinfo命令
~~~ 利用rpcinfo -p 可以查看出RPC开启的端口所可提供的程序有哪些
~~~ 其中NFS开启的是2049,portmapper(rpcbind)开启的是111,其余则是rpc开启的。
~~~ rpcbind服务最好不要停止,可以reload,因为rpcbind并不只是为nfs提供服务,
~~~ 还需要为其他用户提供服务。
[root@server21 ~]# rpcinfo -p
100003 2 tcp 2049 nfs
100003 3 tcp 2049 nfs
100003 4 tcp 2049 nfs
100003 2 udp 2049 nfs
100003 3 udp 2049 nfs
100003 4 udp 2049 nfs
Walter Savage Landor:strove with none,for none was worth my strife.Nature I loved and, next to Nature, Art:I warm'd both hands before the fire of life.It sinks, and I am ready to depart
——W.S.Landor
分类:
cdv007-network
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下