目录
一:什么是NFS服务?
二:NFS的挂载原理
三.NFS工作原理
四.NFS服务的配置
Ⅰ.安装NFS服务
Ⅱ.相关配置文件
/etc/exports NFS服务的主要配置文件
/usr/sbin/exportfs NFS服务的管理命令
/usr/sbin/showmount 客户端的查看命令
/var/lib/nfs/etab 记录NFS分享出来的目录的完整权限设定值
/var/lib/nfs/xtab 记录曾经登录过的客户端信息
Ⅲ.NFS实践
①创建一个共享目录
②编写NFS服务的主配置文件
③挂载共享目录
⑤用客户端centos 8检查,使用showmount -e 服务器IP地址 命令连接服务器的nfs服务
⑤:在客户端挂载共享目录
⑥NFS的共享权限和访问控制
⑦卸载已挂载的共享目录
五:Autofs自动挂载服务
Ⅰ.Autofs和mount的区别
Ⅱ.Autofs挂载的优点
Ⅲ.Autofs挂载的使用
1.安装服务:
2.修改配置文件(主配置+子配置文件)
3.配置完毕:
一:什么是NFS服务?
NFS就是Network File System的缩写,它最大的功能就是可以通过网络,让不同的机器、不同的操作系统可以共享彼此的文件。
NFS服务器可以让PC将网络中的NFS服务器共享的目录挂载到本地端的文件系统中,而在本地端的系统中来看,那个远程主机的目录就好像是自己的一个磁盘分区一样,在使用上相当便利
NFS一般用来存储共享视频,图片等静态数据
二:NFS的挂载原理
当我们在NFS服务器设置好一个共享目录/home/public后,其他的有权访问NFS服务器的NFS客户端就可以将这个目录挂载到自己文件系统的某个挂载点,这个挂载点可以自己定义,如上图客户端A与客户端B挂载的目录就不相同。并且挂载好后我们在本地能够看到服务端/home/public的所有数据。如果服务器端配置的客户端只读,那么客户端就只能够只读。如果配置读写,客户端就能够进行读写。
挂载后,NFS客户端查看磁盘信息命令:#df –h。
三.NFS工作原理
1.首先服务器端启动RPC服务,并开启111端口
2.服务器端启动NFS服务,并向RPC注册端口信息
3.客户端启动RPC(portmap服务),向服务端的RPC(portmap)服务请求服务端的NFS端口
4.服务端的RPC(portmap)服务反馈NFS端口信息给客户端。
5.客户端通过获取的NFS端口来建立和服务端的NFS连接并进行数据的传输。
四.NFS服务的配置
Ⅰ.安装NFS服务
①服务器安装nfs-utils软件:
②关闭防火墙或者放行nfs服务
③关闭Selinux
④客户端centos8 安装nfs-utils软件:
⑤客户端centos8放行nfs服务
⑥客户端centos8关闭selinux
Ⅱ.相关配置文件
/etc/exports NFS服务的主要配置文件
默认是一个空文件,需要自己编写内容
格式是:
<输出目录> [客户端1 选项(访问权限,用户映射,其他)] [客户端2 选项(访问权限,用户映射,其他)]
A:输出目录
输出目录是指NFS系统中需要共享给客户机使用的目录;
B:客户端
客户端是指网络中可以访问这个NFS输出目录的计算机;
客户端常用的指定方法:
- 指定IP地址的主机;例192.168.1.1
- 指定子网里的主机;例192.168.0.0/24 192.168.0.0/255.255.255.0
- 指定域名内的主机;例david.bsmart.cn
- 指定域中所有的主机;例*.bsmart.cn
- 指定所有主机:*
C:NFS选项
a:访问权限选项:
- ro :只读
- rw:读写
b.用户映射选项
- all_squash:将远程访问的所有普通用户及所属组都映射为匿名用户或用户组(nfsnobody);
- no_all_squash:与all_squash取反(默认设置);
- root_squash:将root用户及所属组都映射为匿名用户或用户组(默认设置);
- no_root_squash:与rootsquash取反;
- anonuid=xxx:将远程访问的所有用户都映射为匿名用户,并指定该用户为本地用户(UID=xxx);
- anongid=xxx:将远程访问的所有用户组都映射为匿名用户组账户,并指定该匿名用户组账户为本地用户组账户(GID=xxx);
c.其它选项
- secure:限制客户端只能从小于1024的tcp/ip端口连接nfs服务器(默认设置);
- insecure:允许客户端从大于1024的tcp/ip端口连接服务器;
- sync:将数据同步写入内存缓冲区与磁盘中,效率低,但可以保证数据的一致性;
- async:将数据先保存在内存缓冲区中,必要时才写入磁盘;
- wdelay:检查是否有相关的写操作,如果有则将这些写操作一起执行,这样可以提高效率(默认设置);
- no_wdelay:若有写操作则立即执行,应与sync配合使用;
- subtree:若输出目录是一个子目录,则nfs服务器将检查其父目录的权限(默认设置);
- no_subtree:即使输出目录是一个子目录,nfs服务器也不检查其父目录的权限,这样可以提高效率;
/usr/sbin/exportfs NFS服务的管理命令
默认是乱码文
/usr/sbin/showmount 客户端的查看命令
/var/lib/nfs/etab 记录NFS分享出来的目录的完整权限设定值
开始是一个空文件
/var/lib/nfs/xtab 记录曾经登录过的客户端信息
刚开始都是空文件,后面再看
Ⅲ.NFS实践
①创建一个共享目录
②编写NFS服务的主配置文件
这个意思就是:对所有用户共享/home/public目录,具有读写权限
③挂载共享目录
扩展:
exportfs命令需要参考配置文件“/etc/exportfs”。也可以直接在命令行中指定要共享的NFS文件系统。
语法格式: export [参数] [目录]
常用参数:
-a全部挂载或者全部卸载-r重新挂载-u卸载某一个目录-v显示共享目录
exports:配置nfs的文件
exportfs:linux命令
当修改了/etc/exports后,并不需要重启nfs服务,只要用exportfs重新扫描一次NFS主配置文件,并且重新加载即可
exportfs [-aruv]
参数 含义
a 全部挂载(或卸载) /etc/exports 档案内的设定
r 重新挂载 /etc/exports 里面的设定,也同步的更新/etc/exports和/var/lib/nfs/xtab里面的内容
u 卸载某一目录
v 在export的时候,将分享的目录显示到荧屏上
#exportfs -rv//重新export一次
#exportfs -au//全部卸载#:exportfs -r //重新挂载一次 /etc/exports 这里里面的内容;
⑤用客户端centos 8检查,使用showmount -e 服务器IP地址 命令连接服务器的nfs服务
在客户端showmount -e 192.168.122.10遇到以下错误提示,“clnt_create: RPC: Unable to receive
解决办法:在服务器redhat8上
这时,在客户端centos8上再次尝试
扩展:
如果在客户端showmount -e 服务器IP地址 遇到以下错误提示:clnt_create: RPC: Port mapper failure - Unable to receive: errno 113 (No route to host)
问题原因:服务端的防火墙上默认没有开启nfs服务相应的端口
解决办法:
1.简单粗暴的关闭防火墙
[root@localhost~]#systemctl stop firewalld.service
2. 在设置了防火墙的环境中使用NFS,需要在防火墙上打开如下端口:
a. portmap 端口 111 udp/tcp;
b. nfsd 端口 2049 udp/tcp;
c. mountd 端口 "xxx" udp/tcp[root@localhost~]# vim /etc/services < /etc/services文件是记录网络服务名和它们对应使用的端口号及协议 >
系统 RPC服务在 nfs服务启动时默认会为 mountd动态选取一个随机端口(32768--65535)来进行通讯,我们可以通过编辑/etc/services 文件为 mountd指定一个固定端口:
# vim /etc/services
在末尾添加<按住shirt+g跳到最后一行>
mountd 1011/udp
mountd 1011/tcp
[root@localhost~]# exportfs -a
现在我们会发现 mountd已经和端口 1011绑定了。
另外,nfs中需要通讯的服务还有 rpc.lockd和 rpc.statd,其中对lockd我们可以用类似的方法来指定固定端口,
# vim /etc/services
添加
lockd 35000/ucp
lockd 35000/tdp
# exportfs -a
⑤:在客户端挂载共享目录
命令格式:[root@localhost~]#mount NFS服务器IP:共享目录 本地挂载目录
常见错误1:
报错:mount.nfs: mount point /mnt/nfs does not exist
原因:挂载点不存在
解决办法:创建挂载点后重新挂载
常见错误2:
报错:mount.nfs: Connection refused
原因1:连接失败,查看是不是nfs服务或者rpcbind服务没开
解决办法:先开启rpcbind服务在开启nfs服务
原因2:rpc没有注册成功
解决办法:
[root@localhost~]#rpcinfo -p //查看服务的rpc注册结果
[root@localhost~]#systemctl status nfs-server //查看nfs服务的启动状况
[root@localhost~]#systemctl start nfs-server //启动nfs服务
[root@localhost~]#rpcinfo -p //再次查看服务的rpc注册结果
这样基本就解决了,再次挂载就不会出现毛病了。
常见错误2:
报错:mount.nfs: Connection timed out
原因:连接超时,查看是不是权限问题,或者是防火墙机制问题
解决办法:关闭防火墙,把共享权限改为775,在共享文件里面添加一个选项insecure
⑥NFS的共享权限和访问控制
现在我们在/mnt 里面建立一个文件,看看权限是什么
我用root 用户建立的文件,变成了nobody 用户。
原因就是我在配置文件默认root_squash:将root用户及所属组都映射为匿名用户或用户组(默认设置);
常见问题:创建文件出现permission deny 权限不足
原因:/home/public共享目录你没有给其他用户写的权限
解决办法:[root@localhost~]#chmod -R 777 /home/public
关于权限的分析
1. 客户端连接时候,对普通用户的检查
a. 如果明确设定了普通用户被压缩的身份,那么此时客户端用户的身份转换为指定用户;
b. 如果NFS server上面有同名用户,那么此时客户端登录账户的身份转换为NFS server上面的同名用户;
c. 如果没有明确指定,也没有同名用户,那么此时 用户身份被压缩成nfsnobody;
2. 客户端连接的时候,对root的检查
a. 如果设置no_root_squash,那么此时root用户的身份被压缩为NFS server上面的root;
b. 如果设置了all_squash、anonuid、anongid,此时root 身份被压缩为指定用户;
c. 如果没有明确指定,此时root用户被压缩为nfsnobody;
d. 如果同时指定no_root_squash与all_squash 用户将被压缩为 nfsnobody,如果设置了anonuid、anongid将被压缩到所指定的用户与组;
⑦卸载已挂载的共享目录
格式:umount 挂载点
五:Autofs自动挂载服务
Ⅰ.Autofs和mount的区别
Autofs服务程序与mount命令不同之处在于它是一种守护进程。只有检测到用户试图访问一个尚未挂载的文件系统时,才会自动检测并挂载该文件系统。
Ⅱ.Autofs挂载的优点
- 设置开机不一定要挂载目录,当用的时候才会挂载
- 用户不适用自动挂载的目录,过一段时间,会自动卸载
Ⅲ.Autofs挂载的使用
1.安装服务:
2.修改配置文件(主配置+子配置文件)
autofs服务程序的主配置文件需要按照"挂载目录 子配置文件"的格式写入配置。
挂载目录是设备要挂载位置的上一级目录。
例如:挂盘挂载在/mnt/cdrom目录中,所以挂载目录就是/mnt
[root@localhost ~]# vim /etc/auto.master
在/misc /etc/auto.misc 下面添加一行
/挂载的目录 子配置文件
子配置文件是对这个目录内的挂载信息的进一步说明,子配置文件需要用户自定义。
子配置文件中需要按照"挂载目录 挂载文件类型及权限 设备名称"的格式写入配置
例如:[root@localhost~]#vim /etc/cdrom.misc <自定义的名称>
cdrom -fstype=iso9660,ro,nosuid,nodev :/dev/cdrom
//cdrom 挂载目录
// -fstype=iso9660:文件系统格式参数
//ro,nosuid,nodev :权限
// :/dev/cdrom 设备名称<被挂载的目录>
3.配置完毕:
[root@localhost ~]# systemctl restart autofs.service
[root@localhost ~]# systemctl enable autofs.service //重启autofs服务并设置为自启动