CentOS7安裝配置NFS存儲服務器詳解


1. 安裝軟件包

yum -y install nfs-utils rpcbind

2. 安裝文件說明

/etc/exports :這個檔案就是 NFS 的主要設定檔了!不過,系統並沒有預設值,所以這個檔案‘不一定會存在’,您可能必須要使用 vi 主動的建立起這個檔案!我們等一下要談的設定也僅只是這個檔案而已!
/usr/sbin/exportfs :這個是維護 NFS 分享資源的指令,我們可以利用這個指令重新分享 /etc/exports 變更的目錄資源、將 NFS Server 分享的目錄卸載或重新分享等等,這是 NFS 系統里面相當重要的一個指令!至於指令的用法我們在底下會再介紹。
/usr/sbin/showmount :這是另一個重要的 NFS 指令。exportfs 是用在 NFS Server 端,而 showmount 則主要用在 Client 端。這個 showmount 可以用來察看 NFS 分享出來的目錄資源!
/var/lib/nfs/*tab :在 NFS 伺服器的登錄檔都放置到 /var/lib/nfs/ 目錄里面,在該目錄下有兩個比較重要的登錄檔, 一個是 etab ,主要記錄了 NFS 所分享出來的目錄的完整權限設定值;另一個 xtab 則記錄曾經連結到此 NFS 主機的相關用戶端資料。

nfs 的主配置文件 /etc/exports,默認為空。

3. 使配置更改生效

exportfs -r

4. 例子

示例:同一目錄針對不同范圍開放不同權限

[root@linux ~]# vi /etc/exports

/opt/test         192.168.1.0/24(rw,no_root_squash,no_all_squash,sync,anonuid=501,anongid=501)  localhost(rw)  *.ev.ncku.edu.tw(ro,sync)
/home/public      192.168.0.0/24(rw)  *(ro)  # 繼續累加在后面,注意,我有將主機與網域分為兩段 (用空白隔開) !

上面的例子說的是:當我的 IP 是在 192.168.0.0/24 這個網段的時候,那么當我在 Client 端掛載了 Server 端的 /home/public 后,針對這個被我掛載的目錄我就具有可以讀寫的權限~,至於如果我不是在這個網段之內,那么這個目錄的資料我就僅能讀取而已,亦即為只讀的屬性。

5. 權限說明

注:至於權限方面 (就是小括號內的參數) 常見的參數則有:

/opt/test 為共享目錄;

192.168.1.0/24  可以為一個網段,一個IP,也可以是域名,域名支持通配符 如: *.qq.com;

rw:read-write,可讀寫;

ro:read-only,只讀;

sync:文件同時寫入硬盤和內存;

async:文件暫存於內存,而不是直接寫入內存;

no_root_squash:NFS客戶端連接服務端時如果使用的是root的話,那么對服務端分享的目錄來說,也擁有root權限。顯然開啟這項是不安全的;

root_squash:NFS客戶端連接服務端時如果使用的是root的話,那么對服務端分享的目錄來說,擁有匿名用戶權限,通常他將使用nobody或nfsnobody身份;

all_squash:不論NFS客戶端連接服務端時使用什么用戶,對服務端分享的目錄來說都是擁有匿名用戶權限;

anonuid:匿名用戶的UID值,可以在此處自行設定;

anongid:匿名用戶的GID值。

6. 啟動 nfs

NFS 的啟動還需要 portmap 的協助才行! 所以趕緊啟動!

[root@linux ~]# /etc/init.d/portmap start
# 如果 portmap 本來就已經在執行了,那就不需要啟動!

[root@linux ~]# /etc/init.d/nfs start
# 有時候可能會出現如下的警告訊息:
exportfs: /etc/exports [3]: No 'sync' or 'async' option specified 
for export "192.168.0.100:/home/test".
  Assuming default behaviour ('sync').
# 上面的警告訊息僅是在告知因為我們沒有指定 sync 或 async 的參數,
# 則 NFS 將預設會使用 sync 的資訊而已。你可以不理他,也可以加入 /etc/exports。
[root@linux ~]# vi /etc/exports
/tmp          *(rw,no_root_squash,sync)
/home/public  192.168.0.0/24(rw,sync)    *(ro,sync)
/home/test    192.168.0.100(rw,sync)
/home/linux   *.linux.org(rw,all_squash,anonuid=40,anongid=40,sync)
[root@linux ~]# /etc/init.d/nfs restart
service rpcbind start
service nfs start
chkconfig rpcbind on
chkconfig nfs on

啟動之后,請趕快到 /var/log/messages 里面看看有沒有被正確的啟動?

[root@linux ~]# vi /var/log/messages
...
Sep 22 00:01:37 linux nfs: Starting NFS services:  succeeded
Sep 22 00:01:37 linux nfs: rpc.rquotad startup succeeded
Sep 22 00:01:37 linux nfsd[1050]: nfssvc_versbits: +2 +3 +4
Sep 22 00:01:37 linux nfs: rpc.nfsd startup succeeded
Sep 22 00:01:37 linux nfs: rpc.mountd startup succeeded
Sep 22 00:01:37 linux rpcidmapd: rpc.idmapd -SIGHUP succeeded
...

在確認沒有問題之后,接下來我們來瞧一瞧那么 NFS 到底開了哪些端口?

[root@linux ~]# netstat -ultn
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address  Foreign Address State   PID/Program name
tcp        0      0 0.0.0.0:2049   0.0.0.0:*       LISTEN  -
tcp        0      0 0.0.0.0:803    0.0.0.0:*       LISTEN  1047/rpc.rquotad
tcp        0      0 0.0.0.0:111    0.0.0.0:*       LISTEN  32503/portmap
tcp        0      0 0.0.0.0:819    0.0.0.0:*       LISTEN  1064/rpc.mountd
udp        0      0 0.0.0.0:2049   0.0.0.0:*               -
udp        0      0 0.0.0.0:800    0.0.0.0:*               1047/rpc.rquotad
udp        0      0 0.0.0.0:816    0.0.0.0:*               1064/rpc.mountd
udp        0      0 0.0.0.0:111    0.0.0.0:*               32503/portmap

portmap 啟動的 port 在 111;
NFS 啟動的 port 在 2049;
其他 rpc.daemons 啟動的 port 則是隨機產生的,因此需向 port 111 注冊。

那我怎么知道每個 RPC 服務的注冊狀況?沒關系,你可以使用 rpcinfo 來處理的。

[root@linux ~]# rpcinfo [-p] [IP|hostname]

參數:
-p :顯示出所有的 port 與 porgram 的資訊;

范例一:顯示出目前這部主機的 RPC 狀態

[root@linux ~]# rpcinfo -p localhost
   program vers proto   port
    100000    2   tcp    111  portmapper
    100000    2   udp    111  portmapper
    100011    1   udp    800  rquotad
    100011    2   udp    800  rquotad
    100011    1   tcp    803  rquotad
    100011    2   tcp    803  rquotad
    100003    2   udp   2049  nfs
    100003    3   udp   2049  nfs
    100003    2   tcp   2049  nfs
    100003    3   tcp   2049  nfs
    100005    1   udp    816  mountd
    100005    1   tcp    819  mountd
    100005    2   udp    816  mountd
    100005    2   tcp    819  mountd
    100005    3   udp    816  mountd
    100005    3   tcp    819  mountd
#         NFS版本       端口  服務名稱

如果你的 rpcinfo 無法輸出,那就表示注冊的資料有問題!可能需要重新啟動 portmap 與 nfs!

NFS 的連線觀察

在你的 NFS 伺服器設定妥當之后,我們可以先自我測試一下是否可以連線! 就是利用 showmount 這個指令來查閱!

[root@linux ~]# showmount [-ae] [hostname|IP]
參數:
-a :顯示目前主機與用戶端的 NFS 連線分享的狀態;
-e :顯示某部主機的 /etc/exports 所分享的目錄資料。

范例一:請顯示出剛剛我們所設定好的相關 exports 資訊

[root@linux ~]# showmount -e localhost
Export list for localhost:
/tmp         *
/home/linux  *.linux.org
/home/public (everyone)
/home/test   192.168.0.100

很簡單!所以,當您要掃瞄某一部主機提供的 NFS 分享的目錄時,就使用 showmount -e IP (或hostname) 即可!非常的方便!這也是 NFS client 端最常用的指令!

如果有其他用戶端掛載了你的 NFS 檔案系統時, 那么該用戶端與檔案系統資訊就會被記錄到 /var/lib/nfs/xtab 里頭去的!

[root@linux ~]# tail /var/lib/nfs/etab
/home/public    *(ro,sync,wdelay,hide,nocrossmnt,secure,root_squash,no_all_squash,
subtree_check,secure_locks,mapping=identity,anonuid=-2,anongid=-2)
# 上面是同一行,可以看出除了 ro, sync, root_squash 等等,
# 其實還有 anonuid 及 anongid 等等的設定!

/tmp    *(rw,sync,wdelay,hide,nocrossmnt,secure,no_root_squash,no_all_squash,subtr
ee_check,secure_locks,mapping=identity,anonuid=-2,anongid=-2)
# 同樣的,在 /tmp 也有很多的權限相關的參數!

如果你想要重新處理 /etc/exports 檔案,當重新設定完 /etc/exports 后需不需要重新啟動 nfs ? 不需要!如果重新啟動 nfs 的話,還得要向 RPC 注冊!很麻煩~ 這個時候我們可以透過 exportfs 這個指令來幫忙!

[root@linux ~]# exportfs [-aruv]

參數:
-a :全部掛載(或卸載) /etc/exports 檔案內的設定
-r :重新掛載 /etc/exports 里面的設定,此外,亦同步更新 /etc/exports 及 /var/lib/nfs/xtab 的內容!
-u :卸載某一目錄
-v :在 export 的時候,將分享的目錄顯示到熒幕上!

范例一:重新掛載一次 /etc/exports 的設定

[root@linux ~]# exportfs -arv
exporting 192.168.0.100:/home/test
exporting 192.168.0.0/24:/home/public
exporting *.linux.org:/home/linux
exporting *:/home/public
exporting *:/tmp

范例二:全部都卸載

[root@linux ~]# exportfs -auv

要熟悉一下這個指令的用法!這樣一來,就可以直接重新 exportfs 我們記錄在 /etc/exports 的目錄資料!

7. 客戶端掛載

mount -t nfs 192.168.1.97:/opt/test /mnt

#查看可掛載
showmount -e 192.168.1.97
Export list for 192.168.1.97:
/opt/test          192.168.1.0/24

無提示即為成功。

客戶端在掛載的時候可能遇到網絡不太穩定的問題,原因可能是NFS默認是用UDP協議,換成TCP協議即可:

mount -t nfs 192.168.1.97:/opt/test /mnt -o proto=tcp -o nolock


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM