NFS
为什么要用NFS
NFS(Network File System)即网络文件系统,是FreeBSD支持的文件系统中的一种,它允许网络中的计算机之间通过TCP/IP网络共享资源。在NFS的应用中,本地NFS的客户端应用可以透明地读写位于远端NFS服务器上的文件,就像访问本地文件一样。
FNS的好处
- 节省本地存储空间,将常用的数据存放在一台NFS服务器上且可以通过网络访问,那么本地终端将可以减少自身存储空间的使用。
- 用户不需要在网络中的每个机器上都建有Home目录,Home目录可以放在NFS服务器上且可以在网络上被访问使用。
- 一些存储设备CDROM和Zip(一种高储存密度的磁盘驱动器与磁盘)等都可以在网络上被别的机器使用。这可以减少整个网络上可移动介质设备的数量。
NFS 的基本原则是“容许不同的客户端及服务端通过一组RPC分享相同的文件系统”,它是独立于操作系统,容许不同硬件及操作系统的系统共同进行文件的分享。
NFS在文件传送或信息传送过程中依赖于RPC协议。RPC,远程过程调用 (Remote Procedure Call) 是能使客户端执行其他系统中程序的一种机制。NFS本身是没有提供信息传输的协议和功能的,但NFS却能让我们通过网络进行资料的分享,这是因为NFS使用了一些其它的传输协议。而这些传输协议用到这个RPC功能的。可以说NFS本身就是使用RPC的一个程序。或者说NFS也是一个RPC SERVER。所以只要用到NFS的地方都要启动RPC服务,不论是NFS SERVER或者NFS CLIENT。这样SERVER和CLIENT才能通过RPC来实现PROGRAM PORT的对应。可以这么理解RPC和NFS的关系:NFS是一个文件系统,而RPC是负责负责信息的传输。
一、准备阶段(客户端、服务端)
- 下载nfs server服务
服务端
[root@server ~]# yum install nfs-utils -y ##下载安装nfs服务
[root@server ~]# systemctl start nfs ##开启nfs服务
客户端
[root@client ~]# yum install nfs-utils -y ##下载安装nfs服务
[root@client ~]# showmount -e 172.25.254.227
Export list for 172.25.254.227:
[root@client ~]#
二、相关命令介绍
showmount 参数 nfs_server(IP)
-e nfs_server(IP) 查看nfs提供共享的文件系统
-a nfs_server 查看nfs服务器所有被挂载的文件系统及其挂载的客户端对应关系列表
-d nfs_server 显示nfs服务器所有导出的文件系统
exportfs 参数:
-a:跟-r或-u同时使用,表示重新挂载所有文件系统或取消导出所有文件系统
-r:重新导出
-u:取消导出
-v:显示详细信息
三、实验
ehco “/mnt 172.25.254.0/24(ro,sync)” > /etc/exports
/mnt 172.25.254.0/24(ro,sync)
共享/mnt目录,允许172.25.254.0网段地址使用挂载
模式可以为(ro只读),(rw读写),(sync异步),(async同步)
ehco “/mnt *(ro,sync)” > /etc/exports
共享/mnt目录,允许所有网段地址使用挂载
实验一
[root@server ~]# vim /etc/exports
[root@server ~]# cat /etc/exports
/mnt *(sync,ro) ##同步、只读模式
[root@server ~]# exportfs -rv
exporting *:/mnt
[root@server ~]#
测试
实验二
[root@server ~]# vim /etc/exports
[root@server ~]# cat /etc/exports
/mnt *(sync,rw) ##同步、读写模式
[root@server ~]# exportfs -rv
exporting *:/mnt
[root@server ~]#
测试
因为服务端的 /mnt 目录权限不够
[root@server ~]# ls -ld /mnt/
drwxr-xr-x. 2 root root 18 Jun 4 07:03 /mnt/
[root@server ~]# chmod 777 /mnt/
[root@server ~]# ls -ld /mnt/
drwxrwxrwx. 2 root root 18 Jun 4 07:03 /mnt/
[root@server ~]#
测试
实验三
no_root_squash:登入 NFS 主机使用分享目录的使用者,如果是 root 的话,那么对于这个分享的目录来说,他就具有 root 的权限!这个项目『极不安全』,不建议使用!
root_squash:在登入 NFS 主机使用分享之目录的使用者如果是 root 时,那么这个使用者的权限将被压缩成为匿名使用者,通常他的 UID 与 GID 都会变成 nobody 那个系统账号的身份。
[root@server ~]# vim /etc/exports
[root@server ~]# cat /etc/exports
/mnt *(sync,rw,no_root_squash)
[root@server ~]# exportfs -rv
exporting *:/mnt
[root@server ~]#
测试
[root@server ~]# vim /etc/exports
[root@server ~]# cat /etc/exports
/mnt *(sync,rw,root_squash)
[root@server ~]# exportfs -rv
exporting *:/mnt
[root@server ~]#
测试
实验四
[root@server ~]# vim /etc/exports
[root@server ~]# cat /etc/exports
/mnt *(sync,rw,anonuid=1000,anongid=1000)
##同步、读写、建立的文件属性是uid=1000、gid=1000的用户
[root@server ~]# exportfs -rv
exporting *:/mnt
[root@server ~]#
测试
实验后,进行下面的操作,以便 autofs 实验
[root@server ~]# vim /etc/exports
[root@server ~]# cat /etc/exports
/westos 172.25.254.0/24(sync,rw,no_root_squash)
[root@server ~]# exportfs -rv
exporting 172.25.254.0/24:/westos
[root@server ~]#
四、Autofs
autofs —— 自动挂载工具
特点:它与mount的不同,autofs是一个守护进程,如果它检测到用户正在访问一个尚未挂载的文件系统,如果存在,autofs会自动将其挂载;如果它检测到某个已经挂载的文件系统在一段时间内没有被使用,那么autofs会自动将其卸载。
安装autofs(客户端)
[root@client ~]# yum install autofs -y
测试
[root@client ~]# cd /net
-bash: cd: /net: No such file or directory
##没有开启 autofs 服务之前,目录/net是不存在的
[root@client ~]# vim /etc/sysconfig/autofs
##修改第13行
##设定空闲卸载时间,空闲5秒后自动卸载
[root@client ~]# cat /etc/sysconfig/autofs | head -n 13 | tail -n 1
TIMEOUT=5
[root@client ~]# systemctl start autofs
[root@client ~]# cd /net/
[root@client net]# pwd
/net
[root@client net]# ls
[root@client net]# cd 172.25.254.227
[root@client 172.25.254.227]# pwd
/net/172.25.254.227
[root@client 172.25.254.227]# ls
westos
[root@client 172.25.254.227]# cd westos/
[root@client westos]# ls
[root@client westos]# df ##挂载点默认在/net/172.25.254.227/westos
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/vda1 10473900 3155092 7318808 31% /
devtmpfs 469344 0 469344 0% /dev
tmpfs 484932 84 484848 1% /dev/shm
tmpfs 484932 12784 472148 3% /run
tmpfs 484932 0 484932 0% /sys/fs/cgroup
/dev/mapper/vg0-vo 483670 2355 451824 1% /home
172.25.254.227:/westos 10473984 3168256 7305728 31% /net/172.25.254.227/westos
[root@client westos]# cd
[root@client ~]# pwd
/root
##过大概 5 秒后
[root@client ~]# df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/vda1 10473900 3154928 7318972 31% /
devtmpfs 469344 0 469344 0% /dev
tmpfs 484932 84 484848 1% /dev/shm
tmpfs 484932 12784 472148 3% /run
tmpfs 484932 0 484932 0% /sys/fs/cgroup
/dev/mapper/vg0-vo 483670 2355 451824 1% /home
[root@client ~]#
指定挂载点为/nfs/westos
[root@client ~]# vim /etc/auto.master
[root@client ~]# cat /etc/auto.master | head -n 8 | tail -n 1
/nfs /etc/auto.westos
##/nfs ——挂载目录的上层全部路径,若是挂载在/nfs/tutu/westos,那么此处应是/nfs/tutu
##/etc/auto.westos 自动挂载的配置文件
[root@client ~]# ll /etc/auto.westos
ls: cannot access /etc/auto.westos: No such file or directory
[root@client ~]# vim /etc/auto.westos
[root@client ~]# cat /etc/auto.westos
westos -ro 172.25.254.227:/westos
##westos ——挂载点,文件名可以不存在,若是挂载在/nfs/tutu/westos,那么此处应是westos
##-ro ——挂载模式(ro:只读)
##172.25.254.227:/westos ——需要挂载的设备,本地的——“: 设备“,网络的——“IP : 目录“
[root@client ~]# systemctl restart autofs.service
测试
[root@client westos]# vim /etc/auto.westos
[root@client westos]# cat /etc/auto.westos
westos -rw,vers=3 172.25.254.227:/westos
[root@client westos]# cd
[root@client ~]# systemctl restart autofs.service