RHEL6基础四十二之RHEL文件共享①NFS
NFS(Network File System的縮寫,即網(wǎng)絡(luò)文件系統(tǒng)),依賴于RPC協(xié)議 (Remote Procedure Cal的縮寫,即遠(yuǎn)程過程調(diào)用) 實(shí)現(xiàn)文件或信息傳送,只要用到NFS的地方都要啟動RPC服務(wù),不論是NFS SERVER或者NFS CLIENT。這樣SERVER和CLIENT才能通過RPC來實(shí)現(xiàn)PROGRAM PORT的對應(yīng)。簡單說:NFS是一個(gè)文件系統(tǒng),而RPC是負(fù)責(zé)信息的傳輸。
注:NFS使用TCP/IP提供的協(xié)議和服務(wù),并且位于OSI模型中的應(yīng)用層,具體如下:
| 1 | 應(yīng)用層 | NFS |
| 2 | 表示層 | XDR |
| 3 | 會話層 | RPC |
| 4 | 傳輸層 | UDP,TCP |
| 5 | 網(wǎng)絡(luò)層 | IP |
| 6 | 數(shù)據(jù)鏈路層 | |
| 7 | 物理層 Ethernet |
server:10.15.72.38
client:10.15.72.83
一、啟動NFS服務(wù)
[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?服務(wù):????????????????????????????????????????????[確定] 關(guān)掉?NFS?配額:????????????????????????????????????????????[確定] 啟動?NFS?mountd:??????????????????????????????????????????[確定] 正在啟動?RPC?idmapd:??????????????????????????????????????[確定] 正在啟動?RPC?idmapd:??????????????????????????????????????[確定] 啟動?NFS?守護(hù)進(jìn)程:????????????????????????????????????????[確定] [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啟動時(shí)會隨機(jī)啟動多個(gè)端口并向RPC注冊,這樣如果使用iptables對NFS端口進(jìn)行限制就會有點(diǎn)麻煩,可以更改配置文件固定NFS服務(wù)相關(guān)端口。
分配端口,編輯配置文件,文末添加以下,然后在iptables中設(shè)置對應(yīng)端口
[root@rhel5server?~]#?vim?/etc/sysconfig/nfs RQUOTAD_PORT=875 LOCKD_TCPPORT=32803 LOCKD_UDPPORT=32769 MOUNTD_PORT=892 #STATD_PORT=662是默認(rèn)參數(shù),但是在/etc/services中有定義了,所以換了個(gè)10005 STATD_PORT=10005 #STATD_OUTGOING_PORT=2020是默認(rèn)參數(shù),在/etc/services中也定義了,所以換了個(gè)10006 STATD_OUTGOING_PORT=10006上面的端口不能與跟/etc/services文件中定義的重復(fù):
[root@localhost?~]#?egrep?'875|32803|32796|892|10005|10006'?/etc/services二、NFS日志
NFS服務(wù)的日志記錄在/var/log/messages文件中
三、配置NFS
NFS的常用目錄
/etc/exports ? ? ? ? ? ? ? ? ? ? ? ? ? NFS服務(wù)的主要配置文件
/usr/sbin/exportfs ? ? ? ? ? ? ? ? ? NFS服務(wù)的管理命令
/usr/sbin/showmount ? ? ? ? ? ? ?客戶端的查看命令
/var/lib/nfs/etab ? ? ? ? ? ? ? ? ? ? ?記錄NFS分享出來的目錄的完整權(quán)限設(shè)定值
/var/lib/nfs/xtab ? ? ? ? ? ? ? ? ? ? ?記錄曾經(jīng)登錄過的客戶端信息
配置文件/etc/exports,可以設(shè)置NFS的共享目錄、訪問權(quán)限和允許訪問的主機(jī)等參數(shù),在默認(rèn)情況下,這個(gè)文件是個(gè)空文件,沒有配置任何共享目錄,這是基于安全性的考慮,即使系統(tǒng)啟動NFS服務(wù)也不會共享任何資源。
/etc/exports文件內(nèi)容格式:
<輸出目錄>?[客戶端1?選項(xiàng)(訪問權(quán)限,用戶映射,其他)]?[客戶端2?選項(xiàng)(訪問權(quán)限,用戶映射,其他)]server:
允許某一網(wǎng)段訪問:/home/nfs 10.15.72.0/24 (ro,sync.no_subtree_check,anouid=0,anogid=0)
也可以是具體IP、或者所有主機(jī)(*),還可以是域名,域名支持通配符 如: *.51cto.com
[root@SAMBA1?~]#?service?portmap?status portmap?(pid?7745)?is?running... [root@SAMBA1?~]#服務(wù)啟動時(shí)我們一定首先啟動portmap進(jìn)程,之后再啟動nfs主進(jìn)程。由于在6系列里面,portmap已經(jīng)改名了 ,6系列需要使用 service rpcbind start啟動啟動的時(shí)候最好先啟動rpcbind,再啟動nfs,停止則反過來
守護(hù)進(jìn)程啟動順序: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已經(jīng)順利啟動,這個(gè)服務(wù)管理nfs掛載
daemon也已經(jīng)順利啟動,這個(gè)服務(wù)管理客戶端機(jī)能否順利登入主機(jī)
/home/nfs 共享的目錄
10.15.72.83允許訪問的IP,也可設(shè)置允許訪問共享的網(wǎng)段如10.15.72.0/24,如果允許所有客戶端訪問,可以用通配符“*”
ro ? ? 客戶端訪問共享目錄時(shí)的權(quán)限,ro表示只讀,rw表示可讀可寫
sync ? ?文件同時(shí)寫入硬盤和內(nèi)存,這樣不會輕易丟失數(shù)據(jù),建議所有的NFS共享目錄都使用該選項(xiàng)
secure:限制客戶端只能從小于1024的tcp/ip端口連接nfs服務(wù)器(默認(rèn)設(shè)置);
insecure:允許客戶端從大于1024的tcp/ip端口連接服務(wù)器;
async:將數(shù)據(jù)先保存在內(nèi)存緩沖區(qū)中,必要時(shí)才寫入磁盤;
wdelay:檢查是否有相關(guān)的寫操作,如果有則將這些寫操作一起執(zhí)行,這樣可以提高效率(默認(rèn)設(shè)置);
no_wdelay:若有寫操作則立即執(zhí)行,應(yīng)與sync配合使用;
subtree:若輸出目錄是一個(gè)子目錄,則nfs服務(wù)器將檢查其父目錄的權(quán)限(默認(rèn)設(shè)置);
fsid=0 ? 表示將共享目錄包裝成根目錄
?????/data 192.168.0.100(rw,sync,fsid=0) 192.168.0.101(rw,sync,fsid=0)
?????fsid=0表示將/data找個(gè)目錄包裝成根目錄
no_subtree:即使輸出目錄是一個(gè)子目錄,nfs服務(wù)器也不檢查其父目錄的權(quán)限,這樣可以提高效率;
no_subtree_check 不檢查目錄權(quán)限,提高目錄讀取速率
all_squash:將遠(yuǎn)程訪問的所有普通用戶及所屬組都映射為匿名用戶或用戶組(nfsnobody);
no_all_squash:與all_squash取反(默認(rèn)設(shè)置);
root_squash:登入NFS主機(jī),使用該共享目錄時(shí)相當(dāng)于該目錄的擁有者。但是如果是以root身份使用這個(gè)共享目錄的時(shí)候,那么這個(gè)使用者(root)的權(quán)限將被壓縮成為匿名使用者,即通常他的UID與GID都會變成nobody或nfsnobody身份
no_root_squash:NFS客戶端連接服務(wù)端時(shí)如果使用的是root的話,那么對服務(wù)端分享的目錄來說,也擁有root權(quán)限。顯然開啟這項(xiàng)是不安全的。
anonuid=xxx:將遠(yuǎn)程訪問的所有用戶都映射為匿名用戶,并指定該用戶為本地用戶(UID=xxx);這個(gè)UID必需要存在于你的/etc/passwd當(dāng)中
anongid=xxx:將遠(yuǎn)程訪問的所有用戶組都映射為匿名用戶組賬戶,并指定該匿名用戶組賬戶為本地用戶組賬戶(GID=xxx);
可以設(shè)置同一目錄不同IP端的權(quán)限比如再設(shè)置/home/nfs 72.73只讀不可寫,在上面72.83行后面添加一行/home/nfs 10.15.72.73 (ro)即可
修改了/etc/exports后,并不需要重啟nfs服務(wù),只要用exportfs重新掃描一次/etc/exports,并且重新加載即可
exportfs[-aruv]?
參數(shù) 含義?
a 全部掛載(或卸載)/etc/exports檔案內(nèi)的設(shè)定?
r 重新掛載/etc/exports 里面的設(shè)定,也同步的更新/etc/exports和/var/lib/nfs/xtab里面的內(nèi)容?
u 卸載某一目錄?
v 在export的時(shí)候,將分享的目錄顯示到熒屏上?
三、使用showmount命令查詢NFS的共享狀態(tài)
[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????顯示已經(jīng)于客戶端連接上的目錄信息
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
如果一個(gè)NFS服務(wù)器上有許多的客戶端一直連接的話,NFS服務(wù)器會承受很大的帶寬壓力,這對NFS服務(wù)器的正常使用會造成很大的影響,而且,永久掛載后每次系統(tǒng)啟動都會自動掛載服務(wù)器端NFS,當(dāng)服務(wù)端NFS沒有開啟時(shí),本地客戶端啟動時(shí)會執(zhí)行掛載任務(wù),導(dǎo)致系統(tǒng)啟動速度變慢,因此,為了解決這一弊端,我可以這樣做:讓NFS客戶端在獲取數(shù)據(jù)時(shí)與NFS服務(wù)器進(jìn)行連接,而在沒有獲取數(shù)據(jù)的時(shí)間內(nèi),自動的斷開與NFS服務(wù)器之間的連接,這就是NFS的自動掛載技術(shù)。需要注意的是,配置方法是在NFS客戶端方面進(jìn)行配置的。
自動掛載用到的軟件包automount,一般系統(tǒng)都默認(rèn)安裝了的。如果沒有安裝再安裝下: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服務(wù)器發(fā)送請求信號時(shí),一定要在這個(gè)目錄下面進(jìn)行操作,否則是無效的,實(shí)驗(yàn)的時(shí)候我事先創(chuàng)建了nfs文件夾,當(dāng)達(dá)到超市時(shí)候后nfs文件夾用ls也是看不到,但是可以在根目錄下可以查看掛載后的文件
/etc/auto.nfs: 是一個(gè)配置 NFS服務(wù)器共享文件的路徑,及本地在/app目錄中要與遠(yuǎn)程共享文件掛載的目錄及權(quán)限,在auto.nfs文件中還要詳細(xì)說明。
--timeout=60:指NFS客戶端在多久沒有向NFS服務(wù)器請求數(shù)據(jù)時(shí)斷開掛載連接。
nfs是一個(gè)本地目錄,我們不需要創(chuàng)建它,用于掛載遠(yuǎn)程共享文件10.15.43.238:/app/redis/logs,在我們想要使用遠(yuǎn)程共享文件時(shí),只要在本地目/app下鍵入:cd server 系統(tǒng)就會自動掛載到遠(yuǎn)程共享目錄:10.15.43.238:/app/redis/logs,我們就可以正常使用里面的共享文件了 ,在到達(dá)超時(shí)時(shí)間時(shí)就會自動卸載。
Windows 7訪問NFS:
(1)打開Windows7系統(tǒng)程序--->控制面板--->程序和功能--->打開或關(guān)閉windows功能--->選中nfs安裝
Tips:
在服務(wù)端執(zhí)行以下:
1.關(guān)閉服務(wù)端的SELINUX
2.服務(wù)端防火墻中開啟相應(yīng)端口,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:將防火墻規(guī)則保存到?/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?~]#
同時(shí)開啟多個(gè)端口
[root@justin?~]#?iptables?-I?INPUT?-p?tcp?-m?multiport?--ports?111,875,892,2049,32769??-j?ACCEPTNFS服務(wù)端端口管理文件:
[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?~]#
查看客戶端查看的目錄:
?###########################################################
? ? ? ? ? ? ? ? ? ? ? ? ?關(guān)注微信平臺,了解更多分享 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
2014,我們沒有時(shí)間再去揮霍;
2014,我們需要學(xué)習(xí)以及堅(jiān)持;
我們需要把等公交、乘地鐵的時(shí)間一點(diǎn)點(diǎn)利用;
關(guān)注微信平臺,隨時(shí)都可以查看分享;
我們更需要大家一起來分享。
Linux交流QQ群:333212786
################################################################################
總結(jié)
以上是生活随笔為你收集整理的RHEL6基础四十二之RHEL文件共享①NFS的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 华庭-Oceanbase分布式索引
- 下一篇: hibernate 初学 第一个例