天天看點

在CentOS7上實作NFS共享

一.介紹

NFS 是Network File System的縮寫,即網絡檔案系統。一種使用于分散式檔案系統的協定,功能是讓用戶端通過網絡通路不同主機上磁盤裡的資料,主要用在類Unix系統上實作檔案共享的一種方法。
    NFS在檔案傳送或資訊傳送過程中依賴于RPC協定。RPC,遠端過程調用 (Remote Procedure Call) 是能使用戶端執行其他系統中程式的一種機制。NFS本身是沒有提供資訊傳輸的協定和功能的,但NFS卻能讓我們通過網絡進行資料的分享,這是因為NFS使用了一些其它的傳輸協定。而這些傳輸協定用到這個RPC功能的。可以說NFS本身就是使用RPC的一個程式。或者說NFS也是一個RPC SERVER。是以隻要用到NFS的地方都要啟動RPC服務,不論是NFS SERVER或者NFS CLIENT。這樣SERVER和CLIENT才能通過RPC來實作PROGRAM PORT的對應。可以這麼了解RPC和NFS的關系:NFS是一個檔案系統,而RPC是負責負責資訊的傳輸。           

二.服務端配置

1.關閉系統防火牆和selinux

#檢視系統防火牆的狀态,可以看到防火牆是開着的
[root@bogon ~]#systemctl status firewalld
● firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
   Active: active (running) since Sat 2017-06-03 09:38:00 CST; 8s ago
     Docs: man:firewalld(1)
 Main PID: 24067 (firewalld)
   CGroup: /system.slice/firewalld.service
           └─24067 /usr/bin/python -Es /usr/sbin/firewalld --nofork --nopid

Jun 03 09:37:58 bogon systemd[1]: Starting firewalld - dynamic firewall daemon...
Jun 03 09:38:00 bogon systemd[1]: Started firewalld - dynamic firewall daemon.
#關閉防火牆
[root@bogon ~]#systemctl stop firewalld
#再次檢視防火牆,可以看到已經關閉了
[root@bogon ~]#systemctl status firewalld
● firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
   Active: inactive (dead)
     Docs: man:firewalld(1)

Jun 01 11:33:35 localhost systemd[1]: Starting firewalld - dynamic firewall daemon...
Jun 01 11:33:44 localhost systemd[1]: Started firewalld - dynamic firewall daemon.
Jun 03 09:11:32 bogon systemd[1]: Stopping firewalld - dynamic firewall daemon...
Jun 03 09:11:34 bogon systemd[1]: Stopped firewalld - dynamic firewall daemon.
Jun 03 09:37:58 bogon systemd[1]: Starting firewalld - dynamic firewall daemon...
Jun 03 09:38:00 bogon systemd[1]: Started firewalld - dynamic firewall daemon.
Jun 03 09:38:34 bogon systemd[1]: Stopping firewalld - dynamic firewall daemon...
Jun 03 09:38:36 bogon systemd[1]: Stopped firewalld - dynamic firewall daemon.
#檢視selinux的運作模式,現在為強制模式
[root@bogon share]#getenforce
Enforcing
#把selinux設為許可模式
[root@bogon share]#setenforce 0
#再次檢視selinux的運作模式,已經變為許可模式
[root@bogon share]#getenforce
Permissive
#要想禁用selinux,則需要編輯selinux的配置檔案,把SELINUX設定成disabled,然後重新開機生效
[root@bogon share]#vi /etc/sysconfig/selinux
[root@bogon share]#cat /etc/sysconfig/selinux

# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#     enforcing - SELinux security policy is enforced.
#     permissive - SELinux prints warnings instead of enforcing.
#     disabled - No SELinux policy is loaded.
SELINUX=disabled
# SELINUXTYPE= can take one of three two values:
#     targeted - Targeted processes are protected,
#     minimum - Modification of targeted policy. Only selected processes are protected. 
#     mls - Multi Level Security protection.
SELINUXTYPE=targeted            

2.安裝所需的軟體包

[root@bogon ~]#yum install -y rpc-bind nfs-utils           

3.服務端配置

NFS服務的主要配置檔案為 /etc/exports.
/etc/exports檔案内容格式:
    <輸出目錄> 用戶端(選項:通路權限,使用者映射,其他]
        輸出目錄是指NFS系統中所定義的共享給用戶端使用的檔案系統
        用戶端是定義網絡中可以通路這個NFS共享目錄的IP位址或網段或域名等
            用戶端常用的指定方式
                指定ip位址的主機:192.168.100.1
                指定一個子網:192.168.100.0/24 也可以寫成:192.168.100.0/255.255.255.0
                指定域名的主機:david.bsmart.cn
                指定域中的所有主機:*.bsmart.cn
                所有主機:*
        選項用來設定輸出目錄的通路權限、使用者映射等。
            NFS主要有3類選項:
                設定輸出目錄隻讀:ro
                設定輸出目錄讀寫:rw
            使用者映射選項
                all_squash:将遠端通路的所有普通使用者及所屬組都映射為匿名使用者或使用者組(nfsnobody);
                no_all_squash:與all_squash取反(預設設定);
                root_squash:将root使用者及所屬組都映射為匿名使用者或使用者組(預設設定);
                no_root_squash:與rootsquash取反;
                anonuid=xxx:将遠端通路的所有使用者都映射為匿名使用者,并指定該使用者為本地使用者(UID=xxx);
                anongid=xxx:将遠端通路的所有使用者組都映射為匿名使用者組賬戶,并指定該匿名使用者組賬戶為本地使用者組賬戶(GID=xxx);
            其它選項
                secure:限制用戶端隻能從小于1024的tcp/ip端口連接配接nfs伺服器(預設設定);
                insecure:允許用戶端從大于1024的tcp/ip端口連接配接伺服器;
                sync:将資料同步寫入記憶體緩沖區與磁盤中,效率低,但可以保證資料的一緻性;
                async:将資料先儲存在記憶體緩沖區中,必要時才寫入磁盤;
                wdelay:檢查是否有相關的寫操作,如果有則将這些寫操作一起執行,這樣可以提高效率(預設設定);
                no_wdelay:若有寫操作則立即執行,應與sync配合使用;
                subtree:若輸出目錄是一個子目錄,則nfs伺服器将檢查其父目錄的權限(預設設定);
                no_subtree:即使輸出目錄是一個子目錄,nfs伺服器也不檢查其父目錄的權限,這樣可以提高效率;           

修改/etc/exports檔案,定義NFS共享

#修改NFS配置檔案,定義共享
[root@bogon ~]#vi /etc/exports
#定義向所有用戶端共享/share目錄,共享方式為可讀可寫
[root@bogon ~]#cat /etc/exports
/share *(rw,sync)
#建立/share這個共享目錄
[root@bogon ~]#mkdir /share
#把共享目錄的權限設定為所有使用者都可讀可寫權限
[root@bogon ~]#chmod 766 /share
#把NFS加入到開機自啟動選項中
[root@bogon ~]#systemctl enable nfs
Created symlink from /etc/systemd/system/multi-user.target.wants/nfs-server.service to /usr/lib/systemd/system/nfs-server.service.
#開啟NFS服務
[root@bogon ~]#systemctl start nfs
#把RPCbind加入開機處啟動選項中
[root@bogon ~]#systemctl enable rpcbind 
#啟動RPCbind
[root@bogon ~]#systemctl start rpcbind
#檢視NFS服務的狀态 ,可以看到NFS服務已經在運作中
[root@bogon ~]#systemctl status nfs
● nfs-server.service - NFS server and services
   Loaded: loaded (/usr/lib/systemd/system/nfs-server.service; enabled; vendor preset: disabled)
   Active: active (exited) since Sat 2017-06-03 09:22:02 CST; 37min ago
 Main PID: 23967 (code=exited, status=0/SUCCESS)
   CGroup: /system.slice/nfs-server.service

Jun 03 09:22:02 bogon systemd[1]: Starting NFS server and services...
Jun 03 09:22:02 bogon systemd[1]: Started NFS server and services.
#檢視本機共享的檔案系統
[root@bogon ~]#exportfs
/share          <world>           

三.用戶端配置:

1.用戶端關閉防火牆和selinux,方法同上.

2.用戶端安裝NFS軟體包,并把NFS服務設為開機自啟動,方法同上.

3.挂載共享的NFS檔案系統

#把192.168.16.29這個主機上的共享目錄挂載到本機的/media上
[root@bogon ~]#mount 192.168.16.29:/share /media
#檢視是否已經挂載成功
[root@bogon ~]#mount | grep media
192.168.16.29:/share on /media type nfs4 (rw,relatime,vers=4.0,rsize=131072,wsize=131072,namlen=255,hard,proto=tcp,port=0,timeo=600,retrans=2,sec=sys,clientaddr=192.168.16.177,local_lock=none,addr=192.168.16.29)
#把共享目錄寫入系統挂載檔案系統
[root@bogon ~]#vi /etc/fstab
[root@bogon ~]#cat /etc/fstab | grep media
192.168.16.29:/share        /media      nfs4    defaults    0 0           

四.測試:

1.在服務端共享目錄中建立一個10M大小的檔案

[root@bogon media]#cd /share
[root@bogon share]#ls
#在NFS共享目錄上建立一個10M大小的檔案,提示成功
[root@bogon share]#dd if=/dev/zero of=/share/f1 bs=1M count=10
10+0 records in
10+0 records out
10485760 bytes (10 MB) copied, 0.0351504 s, 298 MB/s
[root@bogon share]#ll -h
total 10M
-rw-r--r--. 1 root root 10M Jun  3 10:14 f1           

2.在用戶端建立另一個檔案f2,同時嘗試删除另一個檔案f1

[root@bogon ~]#cd /media
[root@bogon media]#ls
f1
#在共享目錄上建立一個檔案f2,未報錯
[root@bogon media]#touch f2
#删除存在的檔案f1,未報錯
[root@bogon media]#rm -f f1           

3.在服務端檢視共享目錄中的檔案

[root@bogon share]#ls
f2