MENU

NFS 文件系统

2016 年 06 月 02 日 • 应用服务器

其实这个文档好久之前就写过了,但是发现问题真的好多,但是像之前那样做也能用,哈哈哈哈,看来有必要重新写一下了。先介绍一下什么是nfs?网络文件系统,一种使用于分散式文件系统的协议,由升阳公司开发,于1984年向外公布。功能是通过网络让不同的机器、不同的操作系统能够彼此分享个别的数据,让应用程序在客户端通过网络访问位于服务器磁盘中的数据,是在Unix系统间实现磁盘文件共享的一种方法。具体搭建方法如下。

服务端部署过程

1,安装nfs&bind软件包
[root@nfs ~]# yum -y install nfs-utils rpcbind
2.设置共享目录
[root@nfs ~]# mkdir /data          ##创建共享文件夹
[root@nfs ~]# chown nfsnobody.nfsnobody -R /data/

nfs默认运行用户是nfsnobody,要对共享目录进行授权,否则会出现各种权限错误。

3. 修改 NFS 配置文件,网段按事情情况配置
[root@nfs ~]# vim /etc/exports
/data 10.10.79.0/24(rw,all_squash,sync)

字段说明:/data 表示本地NFS服务需要共享的目录;10.10.79.0/24表示可以远程访问客户机IP的地址或网段/子网掩码;rw代表有读写权限,sync表示同步数据到磁盘中,async写入缓存,异步方式;all_squash表示对所有用户压缩为nfsnobody,也就是说所有用户传的文件属主属组都会变成nfsnobody,如果想改,一会再说。先把一些常用的参数写一下,按需修改配置文件吧。

rwRead-write 表示可读可写权限
ro Read-only 表示只读权限
sync 请求或写入数据时,数据同步写到NFS server的硬盘后才返回
async 写入数据时先写到内存缓冲区,直到硬盘有空档才会写入硬盘,如果服务器断电数据丢失,不安全
all_squash不管是谁访问nfs,都会被压缩成匿名用户
anonuid 修改匿名用户参数,默认为nfsnobody
anongid 修改匿名组的参数,默认为nfsnobody

4.启动服务,尝试挂载到本机

先要启动rpcbind服务,再启动nfs服务,顺序不要错了,nfs需要在rpcbind服务上注册自己,这个就不细说了

[root@nfs ~]# /etc/init.d/rpcbind start
[root@nfs ~]# /etc/init.d/nfs start

20170821114839.png

挂载到本机,先看一下,共享目录信息是否存在,如果不存在配置就出问题了,自己排错吧,看到了后开始挂载

[root@nfs ~]# showmount -e localhost
Export list for localhost:
/data 10.10.79.0/24
[root@nfs ~]# mount -t nfs 10.10.79.136:/data /mnt/
[root@nfs ~]# df -TH

20170821115252.png

进行写入测试,生成的文件都为nfsnobody,无论你是谁

[root@nfs ~]# cd /mnt/
[root@nfs mnt]# touch rj-bai{1..5}
[root@nfs mnt]# ll
total 0
-rw-r--r-- 1 nfsnobody nfsnobody 0 Aug 21 11:54 rj-bai1
-rw-r--r-- 1 nfsnobody nfsnobody 0 Aug 21 11:54 rj-bai2
-rw-r--r-- 1 nfsnobody nfsnobody 0 Aug 21 11:54 rj-bai3
-rw-r--r-- 1 nfsnobody nfsnobody 0 Aug 21 11:54 rj-bai4
-rw-r--r-- 1 nfsnobody nfsnobody 0 Aug 21 11:54 rj-bai5

客户端配置

1,安装nfs&bind软件包,但是不需要启动
[root@nginx ~]# yum -y install rpcbind nfs-utils

2.查看挂载信息,开始挂载
[root@nginx ~]# showmount -e 10.10.79.136
Export list for 10.10.79.136:
/data 10.10.79.0/24
[root@nginx ~]# mount -t nfs 10.10.79.136:/data /media/
[root@nginx ~]# df -TH

20170821115923.png


3.写入测试
[root@nginx media]# touch blog.rj-bai.com{1..10}
[root@nginx media]# ll
total 0
-rw-r--r-- 1 nfsnobody nfsnobody 0 Aug 21 12:00 blog.rj-bai.com1
-rw-r--r-- 1 nfsnobody nfsnobody 0 Aug 21 12:00 blog.rj-bai.com10
-rw-r--r-- 1 nfsnobody nfsnobody 0 Aug 21 12:00 blog.rj-bai.com2
-rw-r--r-- 1 nfsnobody nfsnobody 0 Aug 21 12:00 blog.rj-bai.com3
-rw-r--r-- 1 nfsnobody nfsnobody 0 Aug 21 12:00 blog.rj-bai.com4
-rw-r--r-- 1 nfsnobody nfsnobody 0 Aug 21 12:00 blog.rj-bai.com5
-rw-r--r-- 1 nfsnobody nfsnobody 0 Aug 21 12:00 blog.rj-bai.com6
-rw-r--r-- 1 nfsnobody nfsnobody 0 Aug 21 12:00 blog.rj-bai.com7
-rw-r--r-- 1 nfsnobody nfsnobody 0 Aug 21 12:00 blog.rj-bai.com8
-rw-r--r-- 1 nfsnobody nfsnobody 0 Aug 21 12:00 blog.rj-bai.com9

20170821120129.png

由于现在匿名用户为nfsnobody,并且设置了全部压缩,这事会有问题了,我nginx的运行虚拟用户为www,对这个目录根本木有权限进行写,然后现在吧匿名用户改为www,具体操作如下。

修改匿名用户

1.添加www用户

服务端与客户端都需要存在www用户及组,并且两个服务器www用户组的UID及GID必须是一样的,先要添加用户。

[root@nfs ~]# useradd -u 666 -s /sbin/nologin -M www
[root@nfs ~]# grep "www" /etc/passwd
www:x:666:666::/home/www:/sbin/nologin

添加www用户,UID为666,不允许登陆系统,不创建家目录,服务端也要创建,组就不用了,新版本再添加用户的时候会自动添加组

2.修改配置文件,修改目录权限
[root@nfs ~]# vim /etc/exports
/data 10.10.79.0/24(rw,sync,all_squash,anonuid=666,anongid=666)
[root@nfs ~]# chown www.www -R /data/
3.重新载入配置
[root@nfs ~]# exportfs -rv
exporting 10.10.79.0/24:/data
4.客户端重新挂载,新建文件试试
[root@nginx ~]# umount /media/
[root@nginx ~]# mount -t nfs 10.10.79.136:/data /media/
[root@nginx ~]# cd /media/
[root@nginx media]# rm -f *
[root@nginx media]# touch rj-bai{1..5}
[root@nginx media]# ll
total 0
-rw-r--r-- 1 www www 0 Aug 21 13:49 rj-bai1
-rw-r--r-- 1 www www 0 Aug 21 13:49 rj-bai2
-rw-r--r-- 1 www www 0 Aug 21 13:49 rj-bai3
-rw-r--r-- 1 www www 0 Aug 21 13:49 rj-bai4
-rw-r--r-- 1 www www 0 Aug 21 13:49 rj-bai5

20170821134955.png

现在生成的文件已经是www了,如果重新挂在后文件的属主组没有变为www,请启动客户端的rpcidmapd服务。

还可能会有一个问题,nfs重启之后,立即挂载会出现此问题,创建文件会直接卡死不动,因为nfs自身重启的时候拥有无敌时间,默认是90s,无敌时间内,不能对共享目录进行更改的操作。如需求改请编辑以下参数,到此结束,卸载用umout,我就不写栗子了,卸不掉强制卸载加lf参数。

[root@nginx media]# grep "90" /etc/sysconfig/nfs 
#NFSD_V4_GRACE=90
#NFSD_V4_LEASE=90
#NLM_GRACE_PERIOD=90
最后编辑于: 2018 年 12 月 10 日
返回文章列表 文章二维码 打赏
本页链接的二维码
打赏二维码