NFS文件系统使用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了NFS文件系统使用相关的知识,希望对你有一定的参考价值。

NFS文件系统

NFS:Network File System网络文件系统,基于内核的文件系统,Sun公司开发,通过使用NFS,用户和程序可以像访问本地文件一样访问远端系统上的文件,基于RPC(远程过程调用)实现
RPC:采用C/S模式,客户机请求程序调用进程发送一个有进程参数的调用信息到服务进程,然后等待响应信息。在服务器端,进程保持睡眠状态直到调用信息到达位置。当一个调用信息到达,服务器获得进程参数,计算结果,发送答复信息,然后等待下一个调用信息,最后客户端调用进程收答复信息,获得进程结果,然后调用执行继续进行
NFS优势:节省本地存储空间,将常用的数据如home目录存放在NFS服务器上且可以通过网络访问,本地终端将可减少自身空间的使用

NFS安装

yum install nfs-utils -y

NFS启动时需要启动两个服务nfs和rpcbind。
在centos7上只需要启动nfs服务,systemd会自动将所依赖的rpcbind启动起来

systemctl start nfs

在centos6上需要分别启动nfs和rpcbind服务

qservice rpcbind start
service nfs start

NFS基本用法

共享目录

NFS服务器端

建立共享文件目录

[[email protected] ~]# mkdir /data/nfs1
[[email protected] ~]# mkdir /data/nfs2
[[email protected] ~]# touch /data/nfs2/nfs1.txt
[[email protected] ~]# touch /data/nfs2/nfs2.txt

修改nfs配置文件

[[email protected] ~]# vim /etc/exports
/data/nfs1 *    #格式:需要共享的目录        共享的规则   

重启服务

[[email protected] ~]# systemctl restart nfs

客户端

查看NFS服务器共享出的目录有哪些

[[email protected] ~]# showmount -e 192.168.73.110
Export list for 192.168.73.110:
/data/nfs1 *

挂载后测试读写

[[email protected] ~]# mount 192.168.73.110:/data/nfs1 /data/nfs1/
[[email protected] ~]# ls /data/nfs1/
nfs1.txt                    # 可以读取
[[email protected] ~]# touch /data/nfs1/123
touch: cannot touch ‘/data/nfs1/123’: Read-only file system
                            #不可以写入

共享目录的读写权限

服务器端配置

1.修改配置文件

[[email protected] ~]# vim /etc/exports
/data/nfs1 *(rw)
2.重启服务
```bash
[[email protected] ~]# systemctl restart nfs

客户端操作

1.对目录下的nfs1.txt写入内容

[[email protected] ~]# echo ‘1234‘ > /data/nfs1/nfs1.txt 
-bash: /data/nfs1/nfs1.txt: Permission denied

无法写入,对文件写入需要对文件有写权限

匿名用户所映射的用户

服务器端配置

1.给与目录读写执行权限

[[email protected] data]# chmod 777 nfs1

客户端操作

创建一个文件

[[email protected] ~]# touch /data/nfs1/122

服务器端查看文件属性

[[email protected] data]# ll nfs1/
total 0
-rw-r--r-- 1 nfsnobody nfsnobody 0 May 19 04:04 122
-rw-r--r-- 1 root      root      0 May 19 03:37 nfs1.txt

nfs将匿名用户映射成nfsnobody用户,所以只需要给予nfsnobody读写执行就可以了,无需给予目录最大权限

root压榨(root_squire)

远程用户为root时,映射为服务器上的nfsnobody,此是应为用到了root_squire选项,可以使用no_root_squire取消压榨

[[email protected] nfs1]# exportfs -v
/data/nfs1      <world>(sync,wdelay,hide,no_subtree_check,sec=sys,rw,secure,root_squash,no_all_squash)

服务器操作

修改配置文件,重启服务

[[email protected] data]# vim /etc/exports
/data/nfs1 *(rw,no_root_squash)
[[email protected] data]# systemctl restart nfs

客户端操作

创建一个文件

[[email protected] nfs1]# touch 123

服务器端查看文件权限

[[email protected] nfs1]# ll
total 0
-rw-r--r-- 1 nfsnobody nfsnobody 0 May 19 04:04 122
-rw-r--r-- 1 root      root      0 May 19 04:16 123     
-rw-r--r-- 1 root      root      0 May 19 03:37 nfs1.txt

此时所创建出的文件属主数组均为root

针对不同的地址给予不同的权限

服务器配置

修改配置文件重启服务,让73网段内111主机可读写其余不可写

[[email protected] nfs1]# vim /etc/exports
/data/nfs1 192.168.73.0/24(ro) 192.168.73.111(rw)
[[email protected] nfs1]# systemctl restart nfs

给予nfsnobody用户acl权限

[[email protected] nfs1]# setfacl -m u:nfsnobody:rwx /data/nfs1

客户端操作

73.111主机可读可写

[[email protected] nfs1]# touch 111
[[email protected] nfs1]# ls
111  122  123  nfs1.txt

73.132主机可读不可写

[[email protected] nfs1]# touch 132
touch: cannot touch `132‘: Read-only file system

普通用户创建的文件属性

客户端操作

使用wang用户创建文件

[[email protected] nfs1]# su wang
[[email protected] nfs1]$ touch wang
[[email protected] nfs1]$ ll
-rw-rw-r-- 1 wang wang 0 May 19 05:29 wang

服务器操作

查看wang用户所创建的文件

[[email protected] nfs1]# ll
total 0
-rw-rw-r-- 1 1001 1001 0 May 19 05:29 wang

显示的为uid,远程用户如果为普通用户,则不会和root一样压榨成nfsnobody,会保留id号,客户端的UID会映射成服务器端的UID的用户

NFS的永久挂载

客户端操作

将挂载写入/etc/fstab文件

[[email protected] nfs1]# vim /etc/fstab 
192.168.73.110:/data/nfs1       /data/nfs1      nfs     defaults        0 0
[[email protected] nfs1]# mount -a

异步读写

数据变化后不立即写入磁盘,性能高,添加async选项

服务器操作

[[email protected] nfs1]# vim /etc/exports
/data/nfs1 192.168.73.0/24(ro) 192.168.73.111(rw,async)
[[email protected] nfs1]# exportfs -r      #让配置生效
[[email protected] nfs1]# exportfs -v      #查看配置
/data/nfs1      192.168.73.111(async,wdelay,hide,no_subtree_check,sec=sys,rw,secure,root_squash,no_all_squash)
/data/nfs1      192.168.73.0/24(sync,wdelay,hide,no_subtree_check,sec=sys,ro,secure,root_squash,no_all_squash)

全部压榨

all_squash可以将所有用户都压榨成nfsnobody,当存在no_root_squash时哪个生效

服务器操作

修改配置文件

[[email protected] nfs1]# vim /etc/exports
/data/nfs1 192.168.73.0/24(ro) 192.168.73.111(rw,async,no_root_squash,all_squash)
[[email protected] nfs1]# exportfs -r      #生效
[[email protected] nfs1]# exportfs -v
/data/nfs1      192.168.73.111(async,wdelay,hide,no_subtree_check,sec=sys,rw,secure,no_root_squash,all_squash)

客户端测试

在客户端创建文件

[[email protected] nfs1]# touch aaa
[[email protected] nfs1]# ll
total 0
-rw-r--r-- 1 nfsnobody nfsnobody 0 May 19 05:59 aaa

依旧被压榨为nfsnobody用户

被压榨时映射为其他用户

压榨时不映射为nfsnobody用户,而更换为其他用户,可以将其映射成某服务的用户比如(apahce),使用anonuid,anongid分别指定所要压榨为用户的id

服务器操作

1.新建一个用户

[[email protected] nfs1]# useradd -r -s /sbin/nologin nfs
[[email protected] nfs1]# id nfs
uid=998(nfs) gid=996(nfs) groups=996(nfs)

2.修改配置文件

[[email protected] nfs1]# vim /etc/exports
/data/nfs1 192.168.73.111(rw,async,no_root_squash,all_squash,anonuid=998,anongid=996)
[[email protected] nfs1]# exportfs -r
[[email protected] nfs1]# exportfs -v
/data/nfs1      192.168.73.111(async,wdelay,hide,no_subtree_check,anonuid=998,anongid=996,sec=sys,rw,secure,no_root_squash,all_squash)

客户端操作

创建文件

[[email protected] nfs1]# ll
-rw-r--r-- 1 nfs       nfs       0 May 19 06:08 123

压榨root为nfs用户

nfs挂载共享家目录

每台主机上都有一个/home/wang,要求每台主机上的所有wang家目录内的东西都相同,可以考虑将wang的家目录共享出去来实现,方便集中数据的管理,节约磁盘的空间

服务器操作

1.创建配置文件并生效

[[email protected] nfs1]# mkdir /data/wanghome
[[email protected] nfs1]# vim /etc/exports.d/wang.exports
/data/wanghome *(rw)
[[email protected] nfs1]# exportfs -r
[[email protected] nfs1]# exportfs -v
/data/nfs1      192.168.73.111(async,wdelay,hide,no_subtree_check,anonuid=998,anongid=996,sec=sys,rw,secure,no_root_squash,all_squash)
/data/wanghome  <world>(sync,wdelay,hide,no_subtree_check,sec=sys,rw,secure,root_squash,no_all_squash)

2.复制模板文件至家目录

[[email protected] ~]# cp -r /etc/skel/. /data/wanghome/
[[email protected] ~]# chown -R wang.wang /data/wanghome/

客户端操作

查看服务器端的共享目录

[[email protected] ~]# showmount -e 192.168.73.110
Export list for 192.168.73.110:
/data/wanghome *
/data/nfs1     192.168.73.111
挂载wanghome目录至/home/wang,切换用户查看

[[email protected] ~]# mount 192.168.73.110:/data/wanghome /home/wang/
[[email protected] ~]# su - wang             #
Last login: Sun May 19 06:26:12 CST 2019 on pts/0
[[email protected] ~]$ ls

NFS工具

1.停止本机所有挂载

[[email protected] nfs1]# exportfs -au
[[email protected] nfs1]# exportfs -v
[[email protected] nfs1]# 

2.恢复本机所有挂载

[[email protected] nfs1]# exportfs -v
/data/nfs1      192.168.73.111(async,wdelay,hide,no_subtree_check,anonuid=998,anongid=996,sec=sys,rw,secure,no_root_squash,all_squash)

3.查看远程主机注册的rpc端口号

[[email protected] nfs1]# rpcinfo -s 192.168.73.110
   program version(s) netid(s)                         service     owner
    100000  2,3,4     local,udp,tcp,udp6,tcp6          portmapper  superuser
    100024  1         tcp6,udp6,tcp,udp                status      29
    100005  3,2,1     tcp6,udp6,tcp,udp                mountd      superuser
    100003  4,3       udp6,tcp6,udp,tcp                nfs         superuser
    100227  3         udp6,tcp6,udp,tcp                nfs_acl     superuser
    100021  4,3,1     tcp6,udp6,tcp,udp                nlockmgr    superuser

4.查看本机注册的rpc端口号

[[email protected] nfs1]# rpcinfo -s
   program version(s) netid(s)                         service     owner
    100000  2,3,4     local,udp,tcp,udp6,tcp6          portmapper  superuser
    100024  1         tcp6,udp6,tcp,udp                status      29

以上是关于NFS文件系统使用的主要内容,如果未能解决你的问题,请参考以下文章

网络文件系统(NFS)的使用

NFS文件系统使用

网络文件系统NFS的作用?

NFS文件系统了解与使用

NFS网络文件系统

Centos搭建NFS服务器