NFS 文件系统
其实这个文档好久之前就写过了,但是发现问题真的好多,但是像之前那样做也能用,哈哈哈哈,看来有必要重新写一下了。先介绍一下什么是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,如果想改,一会再说。先把一些常用的参数写一下,按需修改配置文件吧。
rw | Read-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
挂载到本机,先看一下,共享目录信息是否存在,如果不存在配置就出问题了,自己排错吧,看到了后开始挂载
[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
进行写入测试,生成的文件都为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
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
由于现在匿名用户为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
现在生成的文件已经是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
本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。