1. 程式人生 > >Linux NFS介紹

Linux NFS介紹

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

Linux NFS介紹