站長資訊網
        最全最豐富的資訊網站

        Linux下NFS服務器的搭建與配置

        一、NFS服務簡介

        NFS 就是NetworkFileSystem 的縮寫,最早之前是由sun這家公司所發展出來的。 它最大的功能就是可以透過網絡,讓不同的機器、不同的操作系統、可以彼此分享個別的檔案 (share files)。所以,你也可以簡單的將他看做是一個文件服務器 (file server) 呢!這個 NFS 服務器可以讓你的 PC 來將網絡遠程的 NFS 服務器分享的目錄,掛載到本地端的機器當中, 在本地端的機器看起來,那個遠程主機的目錄就好像是自己的一個磁盤分區槽一樣 (partition)!使用上面相當的便利!

        因為 NFS 支持的功能相當的多,而不同的功能都會使用不同的程序來啟動, 每啟動一個功能就會啟用一些端口來傳輸數據,因此, NFS 的功能所對應的端口才沒有固定住, 而是隨機取用一些未被使用的小于 1024 的埠口來作為傳輸之用。但如此一來又造成客戶端想要連上服務器時的困擾, 因為客戶端得要知道服務器端的相關埠口才能夠聯機吧!

        此時我們就得需要遠程過程調用 (RPC) 的服務啦!RPC 最主要的功能就是在指定每個 NFS 功能所對應的 port number ,并且回報給客戶端,讓客戶端可以連結到正確的埠口上去。 那 RPC 又是如何知道每個 NFS 的埠口呢?這是因為當服務器在啟動 NFS 時會隨機取用數個埠口,并主動的向 RPC 注冊,因此 RPC 可以知道每個埠口對應的 NFS 功能,然后 RPC 又是固定使用 port 111 來監聽客戶端的需求并回報客戶端正確的埠口, 所以當然可以讓 NFS 的啟動更為輕松愉快了!

        所以你要注意,要啟動 NFS 之前,RPC 就要先啟動了,否則 NFS 會無法向 RPC 注冊。 另外,RPC 若重新啟動時,原本注冊的數據會不見,因此 RPC 重新啟動后,它管理的所有服務都需要重新啟動來重新向 RPC 注冊。

        當客戶端有 NFS 檔案存取需求時,他會如何向服務器端要求數據呢?

        客戶端會向服務器端的 RPC (port 111) 發出 NFS 檔案存取功能的詢問要求; 服務器端找到對應的已注冊的 NFS daemon 埠口后,會回報給客戶端; 客戶端了解正確的埠口后,就可以直接與 NFS daemon 來聯機。

        由于 NFS 的各項功能都必須要向 RPC 來注冊,如此一來 RPC 才能了解 NFS 這個服務的各項功能之 port number, PID, NFS 在服務器所監聽的 IP 等等,而客戶端才能夠透過 RPC 的詢問找到正確對應的埠口。 也就是說,NFS 必須要有 RPC 存在時才能成功的提供服務,因此我們稱 NFS 為 RPC server 的一種。事實上,有很多這樣的服務器都是向 RPC 注冊的,舉例來說,NIS (Network Information Service) 也是 RPC server 的一種呢

        二、所需要的軟件及軟件結構

        要設定好 NFS 服務器我們必須要有兩個軟件才行,分別是:

        RPC 主程序:rpcbind

        就如同剛剛提的到,我們的 NFS 其實可以被視為一個 RPC 服務,而要啟動任何一個 RPC 服務之前,我們都需要做好 port 的對應 (mapping) 的工作才行,這個工作其實就是『 rpcbind 』這個服務所負責的!也就是說,在啟動任何一個 RPC 服務之前,我們都需要啟動 rpcbind 才行! (在 CentOS 5.x 以前這個軟件稱為 portmap,在 CentOS 6.x 之后才稱為 rpcbind 的!)

        NFS 主程序:nfs-utils

        就是提供 rpc.nfsd 及 rpc.mountd 這兩個 NFS daemons 與其他相關 documents 與說明文件、執行文件等的軟件!這個就是 NFS 服務所需要的主要軟件啦!一定要有喔! 主要配置文件:/etc/exports

        這個檔案就是 NFS 的主要配置文件了!不過,系統并沒有默認值,所以這個檔案『不一定會存在』,你可能必須要使用 vim 主動的建立起這個檔案喔!我們等一下要談的設定也僅只是這個檔案而已!

        NFS 文件系統維護指令:/usr/sbin/exportfs

        這個是維護 NFS 分享資源的指令,我們可以利用這個指令重新分享 /etc/exports 變更的目錄資源、將 NFS Server 分享的目錄卸除或重新分享等等,這個指令是 NFS 系統里面相當重要的一個喔!至于指令的用法我們在底下會介紹。

        分享資源的登錄檔:/var/lib/nfs/*tab

        在 NFS 服務器的登錄文件都放置到 /var/lib/nfs/ 目錄里面,在該目錄下有兩個比較重要的登錄檔, 一個是 etab ,主要記錄了 NFS 所分享出來的目錄的完整權限設定值;另一個 xtab 則記錄曾經鏈接到此 NFS 服務器的相關客戶端數據。

        客戶端查詢服務器分享資源的指令:/usr/sbin/showmount

        這是另一個重要的 NFS 指令。exportfs 是用在 NFS Server 端,而 showmount 則主要用在 Client 端。這個 showmount 可以用來察看 NFS 分享出來的目錄資源喔!

        就說不難吧!主要就是這幾個!

        三、系統環境

        系統CentOS6.8

        IP 192.168.2.203

        四、安裝NFS服務

        1、查看系統是否已安裝NFS

        [root@bogon ~]# rpm -qa | grep nfs

        [root@bogon ~]# rpm -qa | grep rpcbind

        [root@bogon ~]#

        2、安裝NFS

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

        已加載插件:fastestmirror

        設置安裝進程

        Loading mirror speeds from cached hostfile

        … …

        已安裝:

        nfs-utils.x86_64 1:1.2.3-70.el6_8.2 rpcbind.x86_64 0:0.2.0-12.el6

        作為依賴被安裝:

        keyutils.x86_64 0:1.4-5.el6 libevent.x86_64 0:1.4.13-4.el6 libgssglue.x86_64 0:0.1-11.el6

        libtirpc.x86_64 0:0.2.1-11.el6_8 nfs-utils-lib.x86_64 0:1.1.5-11.el6 python-argparse.noarch 0:1.2.1-2.1.el6

        五、服務端配置

        在NFS服務端上創建共享目錄/data/lys并設置權限

        [root@bogon ~]# mkdir -p /data/lys

        [root@bogon ~]# ll /data/

        總用量 4

        drwxr-xr-x. 2 root root 4096 10月 21 18:10 lys

        [root@bogon ~]# chmod 666 /data/lys/

        編輯export文件

        [root@bogon ~]# vim /etc/exports

        /data/lys 192.168.2.0/24(rw,no_root_squash,no_all_squash,sync)

        常見的參數則有:

        參數值 內容說明

        rw  ro 該目錄分享的權限是可擦寫 (read-write) 或只讀 (read-only),但最終能不能讀寫,還是與文件系統的 rwx 及身份有關。

        sync  async sync 代表數據會同步寫入到內存與硬盤中,async 則代表數據會先暫存于內存當中,而非直接寫入硬盤!

        no_root_squash  root_squash 客戶端使用 NFS 文件系統的賬號若為 root 時,系統該如何判斷這個賬號的身份?預設的情況下,客戶端 root 的身份會由 root_squash 的設定壓縮成 nfsnobody, 如此對服務器的系統會較有保障。但如果你想要開放客戶端使用 root 身份來操作服務器的文件系統,那么這里就得要開 no_root_squash 才行!

        all_squash 不論登入 NFS 的使用者身份為何, 他的身份都會被壓縮成為匿名用戶,通常也就是 nobody(nfsnobody) 啦!

        anonuid  anongid anon 意指 anonymous (匿名者) 前面關于 *_squash 提到的匿名用戶的 UID 設定值,通常為 nobody(nfsnobody),但是你可以自行設定這個 UID 的值!當然,這個 UID 必需要存在于你的 /etc/passwd 當中! anonuid 指的是 UID 而 anongid 則是群組的 GID 。

        配置生效

        [root@bogon lys]# exportfs -r

        啟動rpcbind、nfs服務

        [root@bogon lys]# service rpcbind start

        正在啟動 rpcbind: [確定]

        [root@bogon lys]# service nfs start

        啟動 NFS 服務: [確定]

        啟動 NFS mountd: [確定]

        啟動 NFS 守護進程: [確定]

        正在啟動 RPC idmapd: [確定]

        [root@bogon lys]#

        查看RPC 服務的注冊狀況

        [root@bogon lys]# rpcinfo -p localhost

        program vers proto port service

        100000 4 tcp 111 portmapper

        100000 3 tcp 111 portmapper

        100000 2 tcp 111 portmapper

        100000 4 udp 111 portmapper

        100000 3 udp 111 portmapper

        100000 2 udp 111 portmapper

        100005 1 udp 49979 mountd

        100005 1 tcp 58393 mountd

        100005 2 udp 45516 mountd

        100005 2 tcp 37792 mountd

        100005 3 udp 32997 mountd

        100005 3 tcp 39937 mountd

        100003 2 tcp 2049 nfs

        100003 3 tcp 2049 nfs

        100003 4 tcp 2049 nfs

        100227 2 tcp 2049 nfs_acl

        100227 3 tcp 2049 nfs_acl

        100003 2 udp 2049 nfs

        100003 3 udp 2049 nfs

        100003 4 udp 2049 nfs

        100227 2 udp 2049 nfs_acl

        100227 3 udp 2049 nfs_acl

        100021 1 udp 51112 nlockmgr

        100021 3 udp 51112 nlockmgr

        100021 4 udp 51112 nlockmgr

        100021 1 tcp 43271 nlockmgr

        100021 3 tcp 43271 nlockmgr

        100021 4 tcp 43271 nlockmgr

        選項與參數:

        -p :針對某 IP (未寫則預設為本機) 顯示出所有的 port 與 porgram 的信息;

        -t :針對某主機的某支程序檢查其 TCP 封包所在的軟件版本;

        -u :針對某主機的某支程序檢查其 UDP 封包所在的軟件版本;

        NFS 服務器設定妥當之后,可以在 server 端先自我測試一下是否可以聯機!就是利用 showmount 這個指令來查閱!

        [root@bogon lys]# showmount -e localhost

        Export list for localhost:

        /data/lys 192.168.2.0/24

        選項與參數:

        -a :顯示目前主機與客戶端的 NFS 聯機分享的狀態;

        -e :顯示某部主機的 /etc/exports 所分享的目錄數據。

        六、客戶端配置

        安裝nfs-utils客戶端

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

        已安裝:

        nfs-utils.x86_64 1:1.2.3-70.el6_8.2

        作為依賴被安裝:

        keyutils.x86_64 0:1.4-5.el6 libevent.x86_64 0:1.4.13-4.el6 libgssglue.x86_64 0:0.1-11.el6

        libtirpc.x86_64 0:0.2.1-11.el6_8 nfs-utils-lib.x86_64 0:1.1.5-11.el6 python-argparse.noarch 0:1.2.1-2.1.el6

        rpcbind.x86_64 0:0.2.0-12.el6

        創建掛載目錄

        [root@bogon ~]# mkdir /lys

        查看服務器拋出的共享目錄信息

        [root@bogon ~]# showmount -e 192.168.2.203

        Export list for 192.168.2.203:

        /data/lys 192.168.2.0/24

        為了提高NFS的穩定性,使用TCP協議掛載,NFS默認用UDP協議

        [root@bogon ~]# mount -t nfs 192.168.2.203:/data/lys /lys -o proto=tcp -o nolock

        七、測試結果

        查看掛載結果

        [root@bogon ~]# df -h

        Filesystem Size Used Avail Use% Mounted on

        /dev/mapper/VolGroup-lv_root

        18G 1.1G 16G 7% /

        tmpfs 112M 0 112M 0% /dev/shm

        /dev/sda1 477M 54M 398M 12% /boot

        192.168.2.203:/data/lys

        18G 1.1G 16G 7% /lys

        服務端

        [root@bogon lys]# echo "test" > test.txt

        客戶端

        [root@bogon ~]# cat /lys/test.txt

        test

        [root@bogon ~]# echo "204" >> /lys/test.txt

        服務端

        [root@bogon lys]# cat /data/lys/test.txt

        test

        204

        卸載已掛在的NFS

        [root@bogon ~]# umount /lys/

        [root@bogon ~]# df -h

        Filesystem Size Used Avail Use% Mounted on

        /dev/mapper/VolGroup-lv_root

        18G 1.1G 16G 7% /

        tmpfs 112M 0 112M 0% /dev/shm

        /dev/sda1 477M 54M 398M 12% /boot

        結束.

        補充部分:

        為了方便配置防火墻,需要固定nfs服務端口

        NFS啟動時會隨機啟動多個端口并向RPC注冊,這樣如果使用iptables對NFS端口進行限制就會有點麻煩,可以更改配置文件固定NFS服務相關端口。

        [root@bogon lys]# rpcinfo -p localhost

        program vers proto port service

        100000 4 tcp 111 portmapper

        100000 3 tcp 111 portmapper

        100000 2 tcp 111 portmapper

        100000 4 udp 111 portmapper

        100000 3 udp 111 portmapper

        100000 2 udp 111 portmapper

        100005 1 udp 49979 mountd

        100005 1 tcp 58393 mountd

        100005 2 udp 45516 mountd

        100005 2 tcp 37792 mountd

        100005 3 udp 32997 mountd

        100005 3 tcp 39937 mountd

        100003 2 tcp 2049 nfs

        100003 3 tcp 2049 nfs

        100003 4 tcp 2049 nfs

        100227 2 tcp 2049 nfs_acl

        100227 3 tcp 2049 nfs_acl

        100003 2 udp 2049 nfs

        100003 3 udp 2049 nfs

        100003 4 udp 2049 nfs

        100227 2 udp 2049 nfs_acl

        100227 3 udp 2049 nfs_acl

        100021 1 udp 51112 nlockmgr

        100021 3 udp 51112 nlockmgr

        100021 4 udp 51112 nlockmgr

        100021 1 tcp 43271 nlockmgr

        100021 3 tcp 43271 nlockmgr

        100021 4 tcp 43271 nlockmgr

        分配端口,編輯配置文件:

        [root@bogon lys]# vim /etc/sysconfig/nfs

        添加:

        RQUOTAD_PORT=30001

        LOCKD_TCPPORT=30002

        LOCKD_UDPPORT=30002

        MOUNTD_PORT=30003

        STATD_PORT=30004

        重啟

        [root@bogon lys]# service nfs restart

        關閉 NFS 守護進程: [確定]

        關閉 NFS mountd: [確定]

        關閉 NFS 服務: [確定]

        Shutting down RPC idmapd: [確定]

        啟動 NFS 服務: [確定]

        啟動 NFS mountd: [確定]

        啟動 NFS 守護進程: [確定]

        正在啟動 RPC idmapd: [確定]

        查看結果

        [root@bogon lys]# rpcinfo -p localhost

        program vers proto port service

        100000 4 tcp 111 portmapper

        100000 3 tcp 111 portmapper

        100000 2 tcp 111 portmapper

        100000 4 udp 111 portmapper

        100000 3 udp 111 portmapper

        100000 2 udp 111 portmapper

        100005 1 udp 30003 mountd

        100005 1 tcp 30003 mountd

        100005 2 udp 30003 mountd

        100005 2 tcp 30003 mountd

        100005 3 udp 30003 mountd

        100005 3 tcp 30003 mountd

        100003 2 tcp 2049 nfs

        100003 3 tcp 2049 nfs

        100003 4 tcp 2049 nfs

        100227 2 tcp 2049 nfs_acl

        100227 3 tcp 2049 nfs_acl

        100003 2 udp 2049 nfs

        100003 3 udp 2049 nfs

        100003 4 udp 2049 nfs

        100227 2 udp 2049 nfs_acl

        100227 3 udp 2049 nfs_acl

        100021 1 udp 30002 nlockmgr

        100021 3 udp 30002 nlockmgr

        100021 4 udp 30002 nlockmgr

        100021 1 tcp 30002 nlockmgr

        100021 3 tcp 30002 nlockmgr

        100021 4 tcp 30002 nlockmgr

        可以看到,隨機端口以固定

        iptables策略問題完美解決!

        centos 7 設置靜態的nlockmgr 略坑,無論是修改LOCKD_TCPPORT,還是修改/etc/modprobe.d/nfs 的option lockd都無效,最后看了這篇文章http://rlworkman.net/howtos/NFS_Firewall_HOWTO

        在sysctl中新增

        fs.nfs.nlm_udpport=32768

        fs.nfs.nlm_tcpport=32768

        fs.nfs.nfs_callback_tcpport=32764

        重啟nfs服務即可

        贊(0)
        分享到: 更多 (0)
        網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
        主站蜘蛛池模板: 日韩精品视频在线观看免费| 亚洲综合av永久无码精品一区二区| 久久精品国产亚洲7777| 久久精品国产亚洲av影院 | 日本加勒比久久精品| 欧美日韩在线亚洲国产精品| 国语自产少妇精品视频| 亚洲精品国产va在线观看蜜芽| 国产精品99爱免费视频| 国产精品视频免费| 国产精品特级毛片一区二区三区 | 亚洲日韩欧美制服精品二区 | 一区二区国产精品| 久久精品国产欧美日韩| 国产成人精品怡红院在线观看| 国产精品2019| 国产精品99久久免费观看| 亚洲国产一二三精品无码| 欧美亚洲另类精品第一页| 国产精品无码v在线观看| 2021国产精品视频网站| 精品一区二区久久| 国产精品视频免费观看| 国产精品青草久久久久婷婷 | 亚洲AV永久青草无码精品| 午夜三级国产精品理论三级 | 亚洲精品国产精品乱码不卡√ | 老年人精品视频在线| 国产精品一香蕉国产线看观看| 办公室久久精品| 国产成人精品在线观看| 国产精品亚洲欧美大片在线观看| 97精品国产高清自在线看超 | 久久精品国产亚洲5555| 欧美成人精品欧美一级乱黄一区二区精品在线 | 十八18禁国产精品www| 色欲国产麻豆一精品一AV一免费| 亚洲国产精品无码久久一区二区| 在线观看国产精品日韩av| 日本aⅴ精品中文字幕| 国产精品免费AV片在线观看|