NFS文件服务器
简介
什么是nfs服务器?
百度百科:NFS(Network File System)即网络文件系统,是FreeBSD支持的文件系统中的一种,它允许网络中的计算机之间通过TCP/IP网络共享资源。在NFS的应用中,本地NFS的客户端应用可以透明地读写位于远端NFS服务器上的文件,就像访问本地文件一样。
nfs优点
- 节省本地存储空间,将常用的数据存放在一台NFS服务器上且可以通过网络访问,那么本地终端将可以减少自身存储空间的使用。
- 用户不需要在网络中的每个机器上都建有Home目录,Home目录可以放在NFS服务器上且可以在网络上被访问使用。
- 一些存储设备如软驱、CDROM和Zip(一种高储存密度的磁盘驱动器与磁盘)等都可以在网络上被别的机器使用。这可以减少整个网络上可移动介质设备的数量。
如何配置nfs服务器
服务端
在配置服务端环境之前,我们首先对服务端虚拟机进行网络、主机名、yum源的基本配置,这里不再赘述。
- 第一步:.在服务端安装nfs服务,并开启服务
yum install nfs-utils.x86_64 -y
- 第二步:修改nfs配置文件
vim /etc/exports
写入:
/mnt 172.25.254.0/24(ro,async)
共享的目录 将共享的目录/westos共享给172.25.254.0网段的主机 ( 只读挂载,不实时更新)
不实时更新,速度快
sync 内存中的数据和硬盘中的数据是同步的,比较可靠
aysnc 不实时同步 ,相应速率高,但危险
注意:man 5 exports
查看这个文件里面的书写格式
- 第三步:刷新,使文件生效(注意:不能重启服务)
exportfs -rv
- 第四步:查看服务是否开启:若没开启则开启,并刷新服务。
systemctl status nfs-server
systemctl start nfs-server
exportfs -rv
- 第五步:关闭火墙,否则客户端访问不到IP。
- 第六步:在服务端/mnt目录下创建文件file(测试用)
客户端
我们在服务端进行测试:
- 第一步: yum install nfs-utils
- 第二步:用
showmount -e 172.25.254.102
查看是否开启
- 第三步: 挂载到本机目录
mount 172.25.254.125:/mnt/ /mnt/
- 第四步: df查看并进入对应目录进行测试:可以查看但是创建文件(写操作)被拒。
测试
我们回到服务端:修改配置文件为可写
vim /etc/exports
写入:
/mnt 172.25.254.0/24(rw,async)
刷新:
exportfs -rv
再次回到客户端,测试:
[root@client mnt]# rm -fr file
rm: cannot remove ‘file’: Permission denied
发现被拒,说明是权限不够,那回到服务端就修改权限。
[root@server mnt]# chmod 777 /mnt/
客户端删除成功!同时注意建立文件的所属:
[root@client mnt]# touch file
[root@client mnt]# ll
total 0
-rw-r--r--. 1 nfsnobody nfsnobody 0 5月 26 09:28 file
可以发现属于nfsnobody
nsf服务器用户身份设置
指定身份
指定客户端的用户身份为服务端已经存在的用户身份。
- 第一步:在服务端创建一个用户,并将此id写入nfs配置文件中
[root@server mnt]# useradd westos
[root@server mnt]# id westos
uid=1001(westos) gid=1001(westos) groups=1001(westos)
[root@server mnt]# vim /etc/exports
[root@server mnt]# exportfs -rv
exporting 172.25.254.0/24:/mnt
- 第二步:在客户端,先卸载掉之前的挂载,重新挂载,然后进入挂载目录创建文件,发现其文件的用户和用户组为指定的westos的id,如果id重复则会以客户端用户表现出来。
[root@client mnt]# touch file1
[root@client mnt]# ll
total 0
-rw-r--r--. 1 nfsnobody nfsnobody 0 5月 26 09:28 file
-rw-r--r--. 1 1001 1001 0 5月 26 09:38 file1
沿用客户端用户身份
客户端以哪个身份建立文件,创建的文件就属于客户端那个用户。
- 第一步:在服务端修改配置文件,并刷新
[root@server mnt]# vim /etc/exports
写入:
/mnt 172.25.254.0/24(rw,async,anonuid=1001,anongid=1001,no_root_squash)
[root@server mnt]# exportfs -rv
exporting 172.25.254.0/24:/mnt
- 第二步:在客户端,为了效果更明显,可以切换到客户端student用户,进入/mnt,创建文件,发现属于student用户。说明成功沿用客户端用户身份去创建nfs共享目录文件。
[student@client mnt]$ touch file3
[student@client mnt]$ ll
total 0
-rw-r--r--. 1 nfsnobody nfsnobody 0 May 26 09:28 file
-rw-r--r--. 1 1001 1001 0 May 26 09:38 file1
-rw-r--r--. 1 root root 0 May 26 09:47 file2
-rw-rw-r--. 1 student student 0 May 26 09:48 file3
使用服务端的用户身份
不管客户端以哪个身份建立文件,所有的用户身份都要做转换,所有客户端的用户都会映射到服务器的用户——即指定的anonuid用户。
注意:参数没有顺序,all优先级更高。也就是说,参数中all_squash和no_root_squash同时出现,只有all_squash生效。
- 第一步:在服务端修改配置文件,并刷新。
[root@server mnt]# vim /etc/exports
写入:
/mnt 172.25.254.0/24(rw,async,anonuid=1001,anongid=1001,all_squash)
[root@server mnt]# exportfs -rv
exporting 172.25.254.0/24:/mnt
- 第二步:在客户端,创建文件file4,进行查看,发现为1001的id的用户所有,而此时服务端指定了是1001即以westos这个用户身份创建,所以成功使用了服务的配置文件中指定的身份。
[root@client mnt]# touch file4
[root@client mnt]# ll
total 0
-rw-r--r--. 1 nfsnobody nfsnobody 0 5月 26 09:28 file
-rw-r--r--. 1 1001 1001 0 5月 26 09:38 file1
-rw-r--r--. 1 root root 0 5月 26 09:47 file2
-rw-rw-r--. 1 student student 0 5月 26 09:48 file3
-rw-r--r--. 1 1001 1001 0 5月 26 10:01 file4
nfs服务器自动挂载与卸载
实际在企业当中,主机和存储是分离的,客户通过主机登录系统,然后将数据放到存储当中,但是当主机没有存储需求的时候,没有必要和存储系统连接,浪费系统资源,所以我们希望:实现客户端用的时候自动挂载,不用的时候自动卸载。
- 在客户端:
- 第一步:卸载刚刚挂载的nfs共享目录
- 第二步:安装可以实现自动挂载文件系统的服务
yum install autofs -y
- 第三步:开启服务:
在服务开启前:
ls -l /net ###没有这个目录
systemctl start autofs.setvice ##开启这个服务
ls -l /net ##有这个目录
cd /net ##进入
ls ##查看什么都没有
cd 172.25.254.125 ##但是进入服务器
cd /mnt ##进入共享目录
df ##此时查看有没有自动挂载
但是退出此目录后:
df 依然挂载,没有自动卸载,因为默认停留时间是300s
- 第四步:修改配置文件
vim /etc/sysconfig/autofs
,修改自动挂载时间。
注意:7.3版本以上的是/etc/autofs.conf,7.0版本的是/etc/sysconfig/autofs
rpm -qc autofs ##查看autofs的所有配置文件,版本不一样,配置文件不一样
rpm -qa | grep autofs ##查看rpm版本
autofs-5.0.7-56.el7.x86_64
vim /etc/sysconfig/autofs
改等待时间为3s,为了实验效果更明显,当不用时直接卸载
- 重启服务,重复第三步步骤进行测试!
ls -l /net ##有这个目录
cd /net ##进入
ls ##查看什么都没有
cd 172.25.254.125 ##但是可以进入服务器
cd /mnt ##进入共享目录
df ##此时查看发现自动挂载
但是退出此目录后:等待3s,不要直接查看,否则会以为使用
df 自动卸载,因为默认停留时间是3s
自动挂载到指定目录
目的:我们的目的是将nfs共享目录挂载到我们客户端指定的目录上,例如,我们想在/mnt/westos的目录下(不用创建,自动创建,隐藏目录),将nfs共享目录自动挂载到这里。
在客户端:
- 第一步:在主策略文件
/etc/auto.master
, 写入最终挂载点的上层目录/mnt
- 第二步:在子策略文件
/etc/auto.nfs
(名字任意,最好规范写,易读) 写入最终de挂载点,并指定参数。
vim /etc/auto.nfs
写入:
westos -ro,vers=3 172.25.254.125:/mnt
精确挂载点 参数:只读,版本3 挂载的源设备
- 第三步:重启服务后测试
使用mount查看挂载详情,法系挂载参数与设定一致:
客户端挂载到与服务器匹配目录
这样方便服务端管理,比如,当客户端登录到对应服务器的子目录中就实现了自动挂载。
在服务端:
- 创建对应的目录
mkdir westos{1..3}
在客户端:
-
第一步:修改主配置文件/etc/auto.master,写入最终挂载点的上层目录/mnt
-
第二步:修改子配置文件
vim /etc/auto.nfs
写入:
* -ro,vers=3 172.25.254.125:/mnt/&
*代表你输入任意的目录名(如果存在) &代表当与*一一对应
-
第三步:重启服务
-
第四步:测试:
[root@client ~]# cd /mnt/
[root@client mnt]# ls ##查看没有目录
[root@client mnt]# cd westos1
[root@client westos1]# df ##进入到westos1就自动挂载nfs的westos1目录
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/vda1 10473900 3163804 7310096 31% /
devtmpfs 927060 0 927060 0% /dev
tmpfs 942648 84 942564 1% /dev/shm
tmpfs 942648 17036 925612 2% /run
tmpfs 942648 0 942648 0% /sys/fs/cgroup
/dev/sr0 3704296 3704296 0 100% /run/media/root/RHEL-7.3 Server.x86_64
172.25.254.125:/mnt/westos1 10473984 3148288 7325696 31% /mnt/westos1
[root@client westos1]# cd
[root@client ~]# df ##退出后自动卸载
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/vda1 10473900 3163804 7310096 31% /
devtmpfs 927060 0 927060 0% /dev
tmpfs 942648 84 942564 1% /dev/shm
tmpfs 942648 17036 925612 2% /run
tmpfs 942648 0 942648 0% /sys/fs/cgroup
/dev/sr0 3704296 3704296 0 100% /run/media/root/RHEL-7.3 Server.x86_64
[root@client ~]# cd /mnt/westos2
[root@client westos2]# df ##进入westos2就实现自动挂载westos2
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/vda1 10473900 3163784 7310116 31% /
devtmpfs 927060 0 927060 0% /dev
tmpfs 942648 84 942564 1% /dev/shm
tmpfs 942648 17036 925612 2% /run
tmpfs 942648 0 942648 0% /sys/fs/cgroup
/dev/sr0 3704296 3704296 0 100% /run/media/root/RHEL-7.3 Server.x86_64
172.25.254.125:/mnt/westos2 10473984 3148288 7325696 31% /mnt/westos2