您的位置:首页 > 运维架构 > Linux

Linux中NFS(Network File System网络文件系统)的使用

2020-01-13 14:00 501 查看

Linux中NFS(Network File System网络文件系统)的使用

1. 什么是NFS
NFS(Network File System)即网络文件系统,是FreeBSD(一种类UNIX操作系统)支持的文件系统中的一种
它允许网络中的计算机之间通过TCP/IP网络共享资源
在NFS的应用中,本地NFS的客户端应用可以透明地读写位于远端NFS服务器上的文件,就像访问本地文件一样
NFS体系至少有两个主要部分:一台NFS服务器和若干台客户机
客户机通过TCP/IP网络远程访问存放在NFS服务器上的数据。
在NFS服务器正式启用前,需要根据实际环境和需求,配置一些NFS参数。
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
[/code]
nfs的优点:
1.节省本地存储空间,将常用的数据存放在一台NFS服务器上且可以通过网络访问,那么本地终端将可以减少自身存储空间的使用
2. 用户不需要在网络中的每个机器上都建有Home目录,Home目录可以放在NFS服务器上且可以在网络上被访问使用
3. 一些存储设备如软驱、CDROM和Zip(一种高储存密度的磁盘驱动器与磁盘)等都可以在网络上被别的机器使用。这可以减少整个网络上可移动介质设备的数量
2. 搭建一个基本的nfs服务器,实现在本地可以挂载
实验准备:本次实验使用desktop虚拟机作为服务器端,server作为测试客户端
配置desktop虚拟机的静态ip为172.25.254.114,配置server虚拟机的静态ip为172.25.254.214
配置好desktop虚拟机和server虚拟机的yum源
修改主机名称:服务器端修改名称为nfs_server.westos.com
测试端修改名称为nfs_client.westos.com
  • 1
  • 2
  • 3
  • 4
  • 5
[/code]


实验目的:在desktop虚拟机搭建一个nfs服务器,使nfs服务器的目录可以挂载在客户端本地,并且可以在本地进行修改
实验步骤:
在desktop主机上面搭建NFS服务器
由于上一个实验做的是smb, 所以要先关掉smb服务,以免影响nfs的实验

systemctl stop smb.service
#关掉smb服务

systemctl disable smb.service
#设置smb服务不要开机启动
mkdir /westos_nfs
#创建一个共享目录

yum install nfs-utils -y
#安装nfs服务

systemctl status nfs_server
#查看nfs服务的状态,应该是开启的
systemctl start nfs_server
#设置nfs服务开启
systemctl enable nfs_server
#设置nfs服务开机自启动

man 5 exports  #查看这个文件里面的书写格式
vim /etc/exports #编辑nfs共享目录的配置文件
exportfs -rv  #刷新查看远程共享的目录
  • 1
  • 2
  • 3
[/code]

systemctl stop firewalld
#关掉防火墙
vim /etc/exports
#编辑nfs共享目录的配置文件
写入:
/westos_nfs *(sync)
#将这台nfs服务器的/westos_nfs这个目录共享给在本地这个网段的任何一个主机,而且同步

sync与async的区别:
*(syns):内存中的数据和硬盘中的数据全部更改完毕才同步给客户端,效率高 共享给所有人
async:数据实时同步,数据稳定性高
*(rw,syns):以读写的方式共享给所有人

exportfs -rv
#刷新

在server虚拟机进行测试:

yum install nfs-utils -y
#安装nfs服务

showmount -e 172.25.254.114
#快速查看desktop远程服务器共享出来的目录,可以看到错误编号为113
在desktop服务器端:
打开防火墙,添加nfs服务, 这里一共需要安装三个软件包,nfs, rpc-bind, mountd
rpc-bind 说有共享(共享指引)并且分配一个端口,拿着端口去mountd询问共享文件的目录,mountd查询目录后告诉命令/mnt里有共享,showmount去nfs问我能不能访问这个文件,有权限就能访问,没权限就不能访问
systemctl start firewalld
#打开防火墙
firewall-cmd --permanent --add-service=nfs
#永久添加nfs服务
firewall-cmd --reload
#重新加载火墙配置

firewall-cmd --permanent --add-service=rpc-bind
#永久添加rpc-bind服务

firewall-cmd --reload
#重新加载火墙配置

firewall-cmd --permanent --add-service=mountd
#永久添加mountd服务
firewall-cmd --reload
#重新加载火墙配置

在server虚拟机进行测试:
showmount -e 172.25.254.114
#查看desktop远程服务器共享出来的目录

mount 172.25.254.114:/westos_nfs /mnt
#将设备挂载在/mnt目录下
df #查看挂载是否成功

3. 搭建一个基本的nfs服务器,实现自动挂载(autofs+nfs)

当设备挂载后,无论是否使用共享的目录,如果不解挂设备,那么/mnt目录则一直被占用,这样会浪费系统资源,如果能够实现共享目录的动态挂载,即当使用共享目录时,自动挂载,不使用共享目录时,等待一小段时间,系统自动解挂,会带来很大的方便,并且节约了系统资源。
实验步骤:在desktop服务器端建立文件,可以使实验现象更加明显

touch /westos_nfs/fie{1..10}


ls 查看
在server虚拟机进行测试:

showmount -e 172.25.254.114

mount 172.25.254.114:/westos_nfs /mnt
#将设备挂载在/mnt目录下
df #查看挂载是否成功

cd /mnt/ #切换到/mnt/目录下
ls #查看/mnt/目录下的文件

rm -fr * 发现建立的10个文件是只读的,无法删除

umount /mnt/
#解挂

yum install -autofs -y
#安装自动挂载的工具


systemctl start autofs.service
#开启这个服务

cd 172.25.254.114
#切换到这个目录下(pwd可以看到实际是在/net/172.25.254.114的目录中)

系统版本是7.0时,编辑/etc/sysconfig/autofs自动挂载配置文件
系统版本是7.3时,编辑/etc/autofs.conf自动挂载配置文件
  • 1
  • 2
[/code]

我使用的是7.0版本

vim /etc/sysconfig/autofs
#编辑自动挂载的配置文件

将timeout=300修改为timeout=3 #退出共享目录三秒后自动解挂

systemctl restart autofs.service
#重启服务

cd 172.25.254.114
#切换到这个目录下
ls #查看文件,有westos_nfs
cd westos_nfs/
#切换到共享目录下
ls #可以看到新建的10个文件

df #查看是否挂载成功

cd #切换到跟目录,退出共享目录

等待超过三秒钟,df查看挂载已经不存在,说明自动挂载已经生效

4. 搭建一个基本的nfs服务器,实现指定目录自动挂载

在测试端:

vim /etc/auto.master
# 编辑主策略文件

写入内容:/mnt /etc/auto.nfs #共享目录的上级目录 子策略文件

编辑子策略文件

写入内容:最终挂载目录 挂载源地址

重启服务

cd /mnt #切换到/mnt 目录
ls 查看

cd westos/ #切换到/mnt/westos/ 目录
df 查看是否成功挂载在/mnt/westos/ 目录

cd #退出共享目录,等待三秒
df #查看是否已经解挂

再次进入共享目录

输入mount

在最后一段可以看到挂载方式为rw 读写挂载,版本为4.0


进入子策略文件

修改挂载方式为ro,版本为3.0

重启服务

进入共享目录

再次查看挂载信息,在最后一段可以看到版本和挂载方式都变成了子策略文件中设置的参数

在desktop服务器端:
查看nfs服务的状态为开启

再做一个指定目录的自动挂载(方法同上)
建立这个共享目录

编辑配置文件

在配置文件中写入第二个共享目录,并且以读写的方式同步

刷新

在server测试端:
进入最终挂载目录,df查看挂载是否成功,此时并未挂载

showmount -e 172.25.254.114
#快速查看desktop远程服务器共享出来的目录

编辑主策略文件

写入:上级挂载目录 子策略文件

编辑子策略文件


重启服务

cd /mnt/lee #进入共享目录的上级目录
ls #查看
cd nfs #进入最终挂载目录
df #查看挂载是否成功

退出共享目录,等待三秒,再次df 查看是否解挂

5. 在本地对nfs服务器进行修改,文件的所有人所有组的设置

5.1 文件的所有人的修改

编辑主配置文件并刷新

在文件中写入:

第一行内容的意思是指定ip为172.25.254.214这台主机以读写的权限访问共享目录
在server测试端:
进入共享目录,df查看挂载成功
建立文件时,可以看到虽然给了server主机读写的权限,但是在建立这个文件时,显示这个共享文件系统为只读,无法建立文件
ls #查看文件

在desktop服务器端
编辑文件,刷新

修改为所有主机都对这个共享目录有读写权限

在server测试端:
进入共享目录,发现仍然可以查看已经存在的文件,但是没有权限去建立新的文件

在desktop服务器端:
查看共享目录的权限

可以看到,不能建立文件的原因是因为只有root用户可以对文件具有读写权限
现在我们给这个目录满权限

在server测试端:
进入共享目录,可以看到此时已经可以建立文件

查看在共享目录下建立的文件属性

可以看到,刚刚建立的file文件是以nfsnobody的用户和nfsnobody组的身份建立的,意思是匿名用户身份

在desktop服务器端:

anonuid=1001(指定客户端的用户身份为服务端已经存在的用户身份)
就是客户端建立文件的身份是服务端指定的服务端自己存在的用户,客户端不存在这个用户

编辑文件


刷新

查看服务器端westos用户的id信息


在server测试端:
由于server测试端没有id为1001的用户,添加westos用户,可以看到westos用户的id为1001

进入共享目录,ll查看,可以看到建立file文件的用户身份变成了westos

5.2 文件的所属组的修改

在desktop服务器端:
编辑文件,加入组id,刷新


在server测试端:
进入共享目录,新建文件file1,可以看到,file1的所属组也变成了westos

5.3 将文件的所有人和所属组修改为登陆客户端的用户身份(这个参数只针对root)

no_root_squash (指定沿用客户端挂载的用户身份)
客户端以哪个身份建立文件,文件就属于客户端哪个用户的

在desktop服务器端:
编辑文件,加入no_root_squash,刷新

在server测试端:
以root用户身份登陆,进入共享目录,新建file2文件,ll可以看到文件的所有人和所属组均为root

补充:all_squash(转变所有的客户端的用户身份为服务端的用户身份)
不管客户端以哪个身份建立文件,文件的所有人所有组均为服务器指定转换为服务器自己存在的用户身份
都会被映射成服务端匿名用户,如果指定了,就是指定的1001的用户

  • 点赞
  • 收藏
  • 分享
  • 文章举报
站内首发文章 阿然A 发布了56 篇原创文章 · 获赞 0 · 访问量 474 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: