RHEL6基础四十二之RHEL文件共享①NFS
NFS(Network File System的縮寫,即網絡文件系統),依賴于RPC協議 (Remote Procedure Cal的縮寫,即遠程過程調用) 實現文件或信息傳送,只要用到NFS的地方都要啟動RPC服務,不論是NFS SERVER或者NFS CLIENT。這樣SERVER和CLIENT才能通過RPC來實現PROGRAM PORT的對應。簡單說:NFS是一個文件系統,而RPC是負責信息的傳輸。
注:NFS使用TCP/IP提供的協議和服務,并且位于OSI模型中的應用層,具體如下:
| 1 | 應用層 | NFS |
| 2 | 表示層 | XDR |
| 3 | 會話層 | RPC |
| 4 | 傳輸層 | UDP,TCP |
| 5 | 網絡層 | IP |
| 6 | 數據鏈路層 | |
| 7 | 物理層 Ethernet |
server:10.15.72.38
client:10.15.72.83
一、啟動NFS服務
[root@justin?~]#?rpm?-qa|grep?nfs???#yum?-y?install?nfs-utils?nfs-utils-lib?rpcbind nfs-utils-lib-1.1.5-4.el6.i686 nfs4-acl-tools-0.3.3-6.el6.i686 nfs-utils-1.2.3-26.el6.i686 [root@justin?~]#?/etc/rc.d/init.d/rpcbind?start [root@justin?~]#?/etc/rc.d/init.d/nfs?start 啟動?NFS?服務:????????????????????????????????????????????[確定] 關掉?NFS?配額:????????????????????????????????????????????[確定] 啟動?NFS?mountd:??????????????????????????????????????????[確定] 正在啟動?RPC?idmapd:??????????????????????????????????????[確定] 正在啟動?RPC?idmapd:??????????????????????????????????????[確定] 啟動?NFS?守護進程:????????????????????????????????????????[確定] [root@justin?~]#?chkconfig?--level?35?nfs?on [root@justin?~]#?chkconfig?--level?35?rpcbind?on [root@justin?~]#?/etc/rc.d/init.d/nfs?stop [root@justin?~]#?/etc/rc.d/init.d/rpcbind?stop
centos7?systemctl enable rpcbind.service systemctl enable nfs-server.service
? ? ?systemctl start rpcbind.service systemctl start nfs-server.service
NFS啟動后的端口:
[root@localhost?~]#?rpcinfo?-p?localhostprogram?vers?proto???port??service100000????4???tcp????111??portmapper100000????3???tcp????111??portmapper100000????2???tcp????111??portmapper100000????4???udp????111??portmapper100000????3???udp????111??portmapper100000????2???udp????111??portmapper100024????1???udp??34270??status100024????1???tcp??41020??status100005????1???udp??20048??mountd100005????1???tcp??20048??mountd100005????2???udp??20048??mountd100005????2???tcp??20048??mountd100005????3???udp??20048??mountd100005????3???tcp??20048??mountd100003????3???tcp???2049??nfs100003????4???tcp???2049??nfs100227????3???tcp???2049??nfs_acl100003????3???udp???2049??nfs100003????4???udp???2049??nfs100227????3???udp???2049??nfs_acl100021????1???udp??45042??nlockmgr100021????3???udp??45042??nlockmgr100021????4???udp??45042??nlockmgr100021????1???tcp??35301??nlockmgr100021????3???tcp??35301??nlockmgr100021????4???tcp??35301??nlockmgr [root@localhost?~]#nfs開啟的是2049,portmap/rpcbind開啟的是111,其余則是rpc開啟的
NFS啟動時會隨機啟動多個端口并向RPC注冊,這樣如果使用iptables對NFS端口進行限制就會有點麻煩,可以更改配置文件固定NFS服務相關端口。
分配端口,編輯配置文件,文末添加以下,然后在iptables中設置對應端口
[root@rhel5server?~]#?vim?/etc/sysconfig/nfs RQUOTAD_PORT=875 LOCKD_TCPPORT=32803 LOCKD_UDPPORT=32769 MOUNTD_PORT=892 #STATD_PORT=662是默認參數,但是在/etc/services中有定義了,所以換了個10005 STATD_PORT=10005 #STATD_OUTGOING_PORT=2020是默認參數,在/etc/services中也定義了,所以換了個10006 STATD_OUTGOING_PORT=10006上面的端口不能與跟/etc/services文件中定義的重復:
[root@localhost?~]#?egrep?'875|32803|32796|892|10005|10006'?/etc/services二、NFS日志
NFS服務的日志記錄在/var/log/messages文件中
三、配置NFS
NFS的常用目錄
/etc/exports ? ? ? ? ? ? ? ? ? ? ? ? ? NFS服務的主要配置文件
/usr/sbin/exportfs ? ? ? ? ? ? ? ? ? NFS服務的管理命令
/usr/sbin/showmount ? ? ? ? ? ? ?客戶端的查看命令
/var/lib/nfs/etab ? ? ? ? ? ? ? ? ? ? ?記錄NFS分享出來的目錄的完整權限設定值
/var/lib/nfs/xtab ? ? ? ? ? ? ? ? ? ? ?記錄曾經登錄過的客戶端信息
配置文件/etc/exports,可以設置NFS的共享目錄、訪問權限和允許訪問的主機等參數,在默認情況下,這個文件是個空文件,沒有配置任何共享目錄,這是基于安全性的考慮,即使系統啟動NFS服務也不會共享任何資源。
/etc/exports文件內容格式:
<輸出目錄>?[客戶端1?選項(訪問權限,用戶映射,其他)]?[客戶端2?選項(訪問權限,用戶映射,其他)]server:
允許某一網段訪問:/home/nfs 10.15.72.0/24 (ro,sync.no_subtree_check,anouid=0,anogid=0)
也可以是具體IP、或者所有主機(*),還可以是域名,域名支持通配符 如: *.51cto.com
[root@SAMBA1?~]#?service?portmap?status portmap?(pid?7745)?is?running... [root@SAMBA1?~]#服務啟動時我們一定首先啟動portmap進程,之后再啟動nfs主進程。由于在6系列里面,portmap已經改名了 ,6系列需要使用 service rpcbind start啟動啟動的時候最好先啟動rpcbind,再啟動nfs,停止則反過來
守護進程啟動順序:rpc.portmap, rpc.mountd, rpc.nfsd, rpc.statd, rpc.lockd (新版本會自動跟著nfsd啟動起來), rpc.rquotad
[root@localhost?~]#?service?rpcbind?restart Stopping?rpcbind:??????????????????????????????????????????[??OK??] Starting?rpcbind:??????????????????????????????????????????[??OK??] [root@localhost?~]#?service?nfs?restart Shutting?down?NFS?daemon:??????????????????????????????????[??OK??] Shutting?down?NFS?mountd:??????????????????????????????????[??OK??] Shutting?down?NFS?quotas:??????????????????????????????????[??OK??] Shutting?down?RPC?idmapd:??????????????????????????????????[??OK??] Starting?NFS?services:?????????????????????????????????????[??OK??] Starting?NFS?quotas:???????????????????????????????????????[??OK??] Starting?NFS?mountd:???????????????????????????????????????[??OK??] Starting?NFS?daemon:???????????????????????????????????????[??OK??] Starting?RPC?idmapd:???????????????????????????????????????[??OK??] [root@localhost?~]#mounted已經順利啟動,這個服務管理nfs掛載
daemon也已經順利啟動,這個服務管理客戶端機能否順利登入主機
/home/nfs 共享的目錄
10.15.72.83允許訪問的IP,也可設置允許訪問共享的網段如10.15.72.0/24,如果允許所有客戶端訪問,可以用通配符“*”
ro ? ? 客戶端訪問共享目錄時的權限,ro表示只讀,rw表示可讀可寫
sync ? ?文件同時寫入硬盤和內存,這樣不會輕易丟失數據,建議所有的NFS共享目錄都使用該選項
secure:限制客戶端只能從小于1024的tcp/ip端口連接nfs服務器(默認設置);
insecure:允許客戶端從大于1024的tcp/ip端口連接服務器;
async:將數據先保存在內存緩沖區中,必要時才寫入磁盤;
wdelay:檢查是否有相關的寫操作,如果有則將這些寫操作一起執行,這樣可以提高效率(默認設置);
no_wdelay:若有寫操作則立即執行,應與sync配合使用;
subtree:若輸出目錄是一個子目錄,則nfs服務器將檢查其父目錄的權限(默認設置);
fsid=0 ? 表示將共享目錄包裝成根目錄
?????/data 192.168.0.100(rw,sync,fsid=0) 192.168.0.101(rw,sync,fsid=0)
?????fsid=0表示將/data找個目錄包裝成根目錄
no_subtree:即使輸出目錄是一個子目錄,nfs服務器也不檢查其父目錄的權限,這樣可以提高效率;
no_subtree_check 不檢查目錄權限,提高目錄讀取速率
all_squash:將遠程訪問的所有普通用戶及所屬組都映射為匿名用戶或用戶組(nfsnobody);
no_all_squash:與all_squash取反(默認設置);
root_squash:登入NFS主機,使用該共享目錄時相當于該目錄的擁有者。但是如果是以root身份使用這個共享目錄的時候,那么這個使用者(root)的權限將被壓縮成為匿名使用者,即通常他的UID與GID都會變成nobody或nfsnobody身份
no_root_squash:NFS客戶端連接服務端時如果使用的是root的話,那么對服務端分享的目錄來說,也擁有root權限。顯然開啟這項是不安全的。
anonuid=xxx:將遠程訪問的所有用戶都映射為匿名用戶,并指定該用戶為本地用戶(UID=xxx);這個UID必需要存在于你的/etc/passwd當中
anongid=xxx:將遠程訪問的所有用戶組都映射為匿名用戶組賬戶,并指定該匿名用戶組賬戶為本地用戶組賬戶(GID=xxx);
可以設置同一目錄不同IP端的權限比如再設置/home/nfs 72.73只讀不可寫,在上面72.83行后面添加一行/home/nfs 10.15.72.73 (ro)即可
修改了/etc/exports后,并不需要重啟nfs服務,只要用exportfs重新掃描一次/etc/exports,并且重新加載即可
exportfs[-aruv]?
參數 含義?
a 全部掛載(或卸載)/etc/exports檔案內的設定?
r 重新掛載/etc/exports 里面的設定,也同步的更新/etc/exports和/var/lib/nfs/xtab里面的內容?
u 卸載某一目錄?
v 在export的時候,將分享的目錄顯示到熒屏上?
三、使用showmount命令查詢NFS的共享狀態
[root@justin?~]#?showmount?-e?10.15.72.38??顯示此IP地址分享出來的目錄 Export?list?for?10.15.72.38: /home/nfs?10.15.72.83 [root@justin?~]#showmount?-a????顯示已經于客戶端連接上的目錄信息
client:
客戶端也需要安裝rpcbind, 建議nfs一起安裝,便于使用showmount命令
[root@justin?nfs]#?mount?10.15.72.38:/home/nfs?/mnt/nfs mount:?wrong?fs?type,?bad?option,?bad?superblock?on?10.15.72.38:/home/nfs,missing?codepage?or?helper?program,?or?other?error(for?several?filesystems?(e.g.?nfs,?cifs)?you?mightneed?a?/sbin/mount.<type>?helper?program)In?some?cases?useful?info?is?found?in?syslog?-?trydmesg?|?tail??or?so [root@justin?~]#?showmount?-e?10.15.72.38 -bash:?showmount:?command?not?found [root@justin?nfs]#?yum?install?nfs*?-y ...... [root@justin?nfs]#?/etc/init.d/rpcbind?restart Stopping?rpcbind:??????????????????????????????????????????[??OK??] Starting?rpcbind:??????????????????????????????????????????[??OK??] [root@justin?nfs]#?mount?-t?nfs?10.15.72.38:/home/nfs?/mnt/nfs/ [root@justin?nfs]#?vim?/etc/fstab 10.15.72.38:/home/nfs?/mnt/nfs?defaults,soft,intr?0?0 [root@justin?nfs]# [root@justin?nfs]#?cd?/mnt/nfs/ [root@justin?nfs]#?ls nfs.txt [root@justin?nfs]#?ls nfs.txt [root@justin?~]#?showmount?-e?10.15.72.38 Export?list?for?10.15.72.38: /home/nfs?10.15.72.83 [root@justin?~]#?cat?/mnt/nfs/nfs.txt Hello [root@justin?~]#?touch?/mnt/nfs/client touch:?cannot?touch?/mnt/nfs/client':?Read-only?file?system [root@justin?~]#
10.15.43.238:/app/redis/logs /app/nfs nfs4 defaults,soft,intr 0 0
如果一個NFS服務器上有許多的客戶端一直連接的話,NFS服務器會承受很大的帶寬壓力,這對NFS服務器的正常使用會造成很大的影響,而且,永久掛載后每次系統啟動都會自動掛載服務器端NFS,當服務端NFS沒有開啟時,本地客戶端啟動時會執行掛載任務,導致系統啟動速度變慢,因此,為了解決這一弊端,我可以這樣做:讓NFS客戶端在獲取數據時與NFS服務器進行連接,而在沒有獲取數據的時間內,自動的斷開與NFS服務器之間的連接,這就是NFS的自動掛載技術。需要注意的是,配置方法是在NFS客戶端方面進行配置的。
自動掛載用到的軟件包automount,一般系統都默認安裝了的。如果沒有安裝再安裝下:yum install autofs
[root@localhost?~]#?yum?-y?install?autofs [root@localhost?~]#?vim?/etc/auto.master /app?/etc/auto.nfs?--timeout=60???#文末添加此行 [root@localhost?~]#?cp?-p?/etc/auto.misc?/etc/auto.nfs [root@localhost?~]#?vim?/etc/auto.nfs nfs??????????-rw,soft,intr????????????10.15.43.238:/app/redis/logs [root@localhost?~]#?systemctl?start?autofs.service/app是客戶端掛載的本地路徑,我們在向NFS服務器發送請求信號時,一定要在這個目錄下面進行操作,否則是無效的,實驗的時候我事先創建了nfs文件夾,當達到超市時候后nfs文件夾用ls也是看不到,但是可以在根目錄下可以查看掛載后的文件
/etc/auto.nfs: 是一個配置 NFS服務器共享文件的路徑,及本地在/app目錄中要與遠程共享文件掛載的目錄及權限,在auto.nfs文件中還要詳細說明。
--timeout=60:指NFS客戶端在多久沒有向NFS服務器請求數據時斷開掛載連接。
nfs是一個本地目錄,我們不需要創建它,用于掛載遠程共享文件10.15.43.238:/app/redis/logs,在我們想要使用遠程共享文件時,只要在本地目/app下鍵入:cd server 系統就會自動掛載到遠程共享目錄:10.15.43.238:/app/redis/logs,我們就可以正常使用里面的共享文件了 ,在到達超時時間時就會自動卸載。
Windows 7訪問NFS:
(1)打開Windows7系統程序--->控制面板--->程序和功能--->打開或關閉windows功能--->選中nfs安裝
Tips:
在服務端執行以下:
1.關閉服務端的SELINUX
2.服務端防火墻中開啟相應端口,nfs使用:tcp/udp 2049
[root@justin?~]#?iptables?-I?INPUT?-p?tcp?--dport?2049?-j?ACCEPT [root@justin?~]#?iptables?-I?INPUT?-p?udp?--dport?2049?-j?ACCEPT [root@justin?~]#?service?iptables?save iptables:將防火墻規則保存到?/etc/sysconfig/iptables:?????[確定] [root@justin?~]#?iptables?-L?-n Chain?INPUT?(policy?ACCEPT) target?????prot?opt?source???????????????destination??? ACCEPT?????udp??--??0.0.0.0/0????????????0.0.0.0/0???????????udp?dpt:2049 ACCEPT?????tcp??--??0.0.0.0/0????????????0.0.0.0/0???????????tcp?dpt:2049 ACCEPT?????tcp??--??0.0.0.0/0????????????0.0.0.0/0???????????tcp?dpt:5801 ACCEPT?????tcp??--??0.0.0.0/0????????????0.0.0.0/0???????????tcp?dpt:5901 Chain?FORWARD?(policy?ACCEPT) target?????prot?opt?source???????????????destination??? Chain?OUTPUT?(policy?ACCEPT) target?????prot?opt?source???????????????destination??? [root@justin?~]#
同時開啟多個端口
[root@justin?~]#?iptables?-I?INPUT?-p?tcp?-m?multiport?--ports?111,875,892,2049,32769??-j?ACCEPTNFS服務端端口管理文件:
[root@justin?~]#?egrep?"875|32803|32769|892"?/etc/sysconfig/nfs #RQUOTAD_PORT=875 #LOCKD_TCPPORT=32803 #LOCKD_UDPPORT=32769 #MOUNTD_PORT=892 [root@justin?~]#[root@justin?~]#?showmount?-a?10.15.72.38 All?mount?points?on?10.15.72.38: 10.15.72.73:/home/nfs [root@justin?~]#
查看鏈接的客戶端:
[root@justin?~]#?showmount?-a?10.15.72.38 All?mount?points?on?10.15.72.38: 10.15.72.73:/home/nfs [root@justin?~]#
查看客戶端查看的目錄:
?###########################################################
? ? ? ? ? ? ? ? ? ? ? ? ?關注微信平臺,了解更多分享 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
2014,我們沒有時間再去揮霍;
2014,我們需要學習以及堅持;
我們需要把等公交、乘地鐵的時間一點點利用;
關注微信平臺,隨時都可以查看分享;
我們更需要大家一起來分享。
Linux交流QQ群:333212786
################################################################################
總結
以上是生活随笔為你收集整理的RHEL6基础四十二之RHEL文件共享①NFS的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 华庭-Oceanbase分布式索引
- 下一篇: hibernate 初学 第一个例