Linux NFS介绍

NFS(Network File System)即网络文件系统,是FreeBSD支持的文件系统中的一种,它允许网络中的计算机之间通过TCP/IP网络共享资源。在NFS的应用中,本地NFS的客户端应用可以透明地读写位于远端NFS服务器上的文件,就像访问本地文件一样。

使用场景:个人建议nfs文件系统最好用搭建在内网,适合中小型网络服务文件共享

1、安装

[root@localhost ~]# yum -y install nfs-utils rpcbind

[root@localhost ~]# rpm -ql nfs-utils
/usr/lib/systemd/system/nfs.service
/usr/lib/systemd/system/nfs-lock.service
/usr/lib/systemd/system/nfs-mountd.service
/usr/lib/systemd/system/rpc-statd.service
....

2、创建需要导出的目录

[root@localhost /]# mkdir /nfsshared/node1 -pv

3、导出配置文件说明

/etc/exports或/etc/exports.d/*
    /PATH/TO/SOME_DIR   clients1(export_options, ...)  clients2(export_options, ...)
        clients:
            single host:ipv4, ipv6, FQDN;
            network:address/netmask, 支持长短格式的掩码;
            wildcards:主机名通配,例如:*.zander.com; 
            netgroups:NIS域内的主机组;@group_name;
            anonymous:使用*通配所有主机;

        General Options:
            ro:只读
            rw:读写;
            sync:同步;
            async:异步;
            secure:客户端端口小于1024,否则就要使用insecure选项;
        User ID Mapping:
             root_squash:压缩root用户,一般指将其映射为nfsnobody;
             no_root_squash:不压缩root用户;
             all_squash:压缩所有用户;
             anonuid and anongid:将压缩的用户映射为此处指定的用户;

3.1、配置文件

[root@localhost /]# vim /etc/exports
/nfsshared/node1 172.16.86.210/24(rw)

#mount端口应该固定防止占用其他端口
[root@sherry node1]# vim /etc/sysconfig/nfs 
MOUNTD_PORT=892

4、启动

[root@localhost /]# systemctl start nfs

#nfs内部实现机制太复杂了
nfs-idmapd.service                 loaded active running NFSv4 ID-name mapping service   id名字映射
nfs-mountd.service                 loaded active running NFS Mount Daemon       认证挂载
nfs-server.service                 loaded active exited  NFS server and services  主服务
rpc-statd.service                  loaded active running NFS status monitor for NFSv2/3 locking. 状态监控
rpcbind.service                    loaded active running RPC bind service         nfs注册到rpc服务

5、客户端

[root@ns1 test]# yum install nfs-utils
[root@ns1 test]# showmount -e 172.16.86.210
Export list for 172.16.86.210:
/nfsshared/node1 172.16.86.210/24

#挂载
[root@ns1 test]# mount.nfs 172.16.86.210:/nfsshared/node1 /mnt/t4
[root@ns1 test]# mount|grep nfs
172.16.86.210:/nfsshared/node1 on /mnt/t4 type nfs4 (rw,relatime,vers=4.1,rsize=262144,wsize=262144,namlen=255,hard,proto=tcp,port=0,timeo=600,retrans=2,sec=sys,clientaddr=172.16.86.209,local_lock=none,addr=172.16.86.210)
客户端挂载优化参数timeo增加,rsize wsize增大

6、写入

 #写入时候文件都是看当前用户的id,id解析成用户名

压缩理解
客户端如果是root  ID=0
服务器如果不压缩,文件写入id=0   服务器解释id=0 为root,客户端也是root
服务器如果压缩,文件写入id是服务器nfsnobody对应id  假如是100   客户端反接100得到用户名

普通用户,
客户端写入时候是zander id=10000  ,显示zander,服务器端显示id=10000的用户

#服务器
[root@localhost node1]# chmod o+w f1/
[root@localhost node1]# ls
f1

#客户端在f1下面写入
[root@ns1 f1]# touch a.txt
[root@ns1 f1]# ll
total 0
-rw-r--r-- 1 nfsnobody nfsnobody 0 May 20 22:09 a.txt

6.1 最佳写入方式

 指定用户
客户端无论什么身份运行,服务器都是按照指定的用户存储,客户端反解服务器指定用id来显示,前提是服务器指定的用户要有对目录操作权限
服务器
[root@localhost f1]# useradd marvin
[root@localhost f1]# id marvin
uid=1003(marvin) gid=1003(marvin) 组=1003(marvin)
[root@localhost f1]# vim  /etc/exports
/nfsshared/node1 172.16.86.210/24(rw,anonuid=1003,anongid=1003)

#reload
[root@localhost f1]# exportfs -rav
exporting 172.16.86.210/24:/nfsshared/node1

#客户端
[root@ns1 f1]# touch c.txt
[root@ns1 f1]# ls
c.txt
[root@ns1 f1]# ll
total 0
-rw-r--r-- 1      1003      1003 0 May 20 22:27 c.txt

猜你喜欢

转载自blog.51cto.com/marvin89/2118644