NFS為 Network FileSystem 的簡稱,最早之前是由 Sun 這家公司所發(fā)展出來的,他的目的就是想讓不同的機(jī)器、 不同的作業(yè)系統(tǒng)可以彼此分享個別的檔案啦!目前在 Unix Like 當(dāng)中用來做為 file server 是相當(dāng)不錯的一個方案喔!基本上, Unix Like 主機(jī)連接到另一部 Unix Like 主機(jī)來分享彼此的檔案時,使用 NFS 要比 SAMBA 這個伺服器快速且方便的多了!此外, NFS 的設(shè)定真的很簡單,幾乎只要記得啟動 Remote Procedure Call 這個咚咚 (RPC, 就是 portmap 這個套件啦!) 就一定可以架設(shè)的起來!真是不錯??!不過,如果要達(dá)成 Windows 與 Linux 之間的溝通,那麼還是以 SAMBA 比較容易啊!無論如何, NFS 還是可以做為小公司或?qū)W校單位內(nèi)部 Unix Like 機(jī)器共享 file 的一個 Server 喔! |
Tips: 所以你要注意,要啟動 NFS 之前,RPC 就要先啟動了,否則 NFS 會無法向 RPC 註冊。 另外,RPC 若重新啟動時,原本註冊的資料會不見,因此 RPC 重新啟動後,他管理的所有程式都需要重新啟動以重新向 RPC 註冊。 | ![]() |
例題: 請問我的主機(jī)是以 RPM 為套件管理的 Linux distribution ,例如 Red Hat, CentOS 與 SuSE 等版本,那麼我要如何知道我的主機(jī)裡面是否已經(jīng)安裝了 portmap 與 nfs 相關(guān)的套件呢? 答:
|
[root@linux ~]# vi /etc/exports /tmp 192.168.1.0/24(ro) localhost(rw) *.ev.ncku.edu.tw(ro,sync) # [分享目錄] [第一部主機(jī)(權(quán)限)] [可用主機(jī)名] [可用萬用字元] |
[root@linux ~]# vi /etc/exports # 任何人都可以用我的 /tmp ,用萬用字元來處理主機(jī)名稱,重點在 no_root_squash /tmp *(rw,no_root_squash) |
[root@linux ~]# vi /etc/exports /tmp *(rw,no_root_squash) /home/public 192.168.0.0/24(rw) *(ro) # 繼續(xù)累加在後面,注意,我有將主機(jī)與網(wǎng)域分為兩段 (用空白隔開) 喔! |
[root@linux ~]# vi /etc/exports /tmp *(rw,no_root_squash) /home/public 192.168.0.0/24(rw) *(ro) /home/test 192.168.0.100(rw) # 只要設(shè)定 IP 正確即可! |
[root@linux ~]# vi /etc/exports /tmp *(rw,no_root_squash) /home/public 192.168.0.0/24(rw) *(ro) /home/test 192.168.0.100(rw) /home/linux *.linux.org(rw,all_squash,anonuid=40,anongid=40) # 如果要開放匿名,那麼重點是 all_squash,並且要配合 anonuid 喔! |
[root@linux ~]# /etc/init.d/portmap start # 如果 portmap 本來就已經(jīng)在執(zhí)行了,那就不需要啟動??! [root@linux ~]# /etc/init.d/nfs start # 有時候可能會出現(xiàn)如下的警告訊息: exportfs: /etc/exports [3]: No 'sync' or 'async' option specified for export "192.168.0.100:/home/test". Assuming default behaviour ('sync'). # 上面的警告訊息僅是在告知因為我們沒有指定 sync 或 async 的參數(shù), # 則 NFS 將預(yù)設(shè)會使用 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 |
[root@linux ~]# /etc/init.d/nfslock start |
[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 |
[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 |
[root@linux ~]# rpcinfo [-p] [IP|hostname] 參數(shù): -p :顯示出所有的 port 與 porgram 的資訊; 範(fàn)例一:顯示出目前這部主機(jī)的 RPC 狀態(tài) [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版本 埠口 服務(wù)名稱 |
[root@linux ~]# showmount [-ae] [hostname|IP] 參數(shù): -a :顯示目前主機(jī)與用戶端的 NFS 連線分享的狀態(tài); -e :顯示某部主機(jī)的 /etc/exports 所分享的目錄資料。 範(fàn)例一:請顯示出剛剛我們所設(shè)定好的相關(guān) exports 資訊 [root@linux ~]# showmount -e localhost Export list for localhost: /tmp * /home/linux *.linux.org /home/public (everyone) /home/test 192.168.0.100 |
[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 等等的設(shè)定! /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 也有很多的權(quán)限相關(guān)的參數(shù)喔! |
[root@linux ~]# exportfs [-aruv] 參數(shù): -a :全部掛載(或卸載) /etc/exports 檔案內(nèi)的設(shè)定 -r :重新掛載 /etc/exports 裡面的設(shè)定,此外,亦同步更新 /etc/exports 及 /var/lib/nfs/xtab 的內(nèi)容! -u :卸載某一目錄 -v :在 export 的時候,將分享的目錄顯示到螢?zāi)簧希?/span> 範(fàn)例一:重新掛載一次 /etc/exports 的設(shè)定 [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 範(fàn)例二:全部都卸載 [root@linux ~]# exportfs -auv |
[root@linux ~]# vi /usr/local/virus/iptables/iptables.allow iptables -A INPUT -i $EXTIF -p TCP -s 192.168.0.0/24 --dport 111 -j ACCEPT iptables -A INPUT -i $EXTIF -p UDP -s 192.168.0.0/24 --dport 111 -j ACCEPT iptables -A INPUT -i $EXTIF -p TCP -s 140.116.0.0/16 --dport 111 -j ACCEPT iptables -A INPUT -i $EXTIF -p UDP -s 140.116.0.0/16 --dport 111 -j ACCEPT |
[root@linux ~]# vi /etc/hosts.allow # 讓來自 140.116.44.0/255.255.255.0 的主機(jī)可以使用 mountd mountd: 140.116.44.0/255.255.255.0 [root@linux ~]# vi /etc/hosts.deny # 讓所有人都不能使用 mountd mountd: ALL |
[root@linux ~]# /etc/init.d/portmap start [root@linux ~]# /etc/init.d/nfslock start # 一般來說,系統(tǒng)預(yù)設(shè)會啟動 portmap ,不過鳥哥之前關(guān)閉過,所以要啟動。 # 另外,如果伺服器端有啟動 nfslock 的話,用戶端也要啟動才能生效! [root@linux ~]# showmount -e 192.168.0.2 Export list for 192.168.0.2: /tmp * /home/linux *.linux.org /home/public (everyone) <==這是等一下我們要掛載的目錄 /home/test 192.168.0.100 |
[root@linux ~]# mkdir -p /home/nfs/public [root@linux ~]# mount -t nfs 192.168.0.2:/home/public /home/nfs/public # 注意一下掛載的語法!『 -t nfs 』指定檔案系統(tǒng)類型, # IP:/dir 則是指定某一部主機(jī)的某個提供的目錄! [root@linux ~]# df Filesystem 1K-blocks Used Available Use% Mounted on ....中間省略.... 192.168.0.2:/home/public 10080512 2135072 7433344 23% /home/nfs/public |
[root@linux ~]# umount /home/nfs/public |
參數(shù) | 參數(shù)代表意義 | 系統(tǒng)預(yù)設(shè)值 |
suid nosuid | 曉得啥是 SUID 吧?如果掛載的 partition 上面有任何 SUID 的 binary 程式時, 你只要使用 nosuid 就能夠取消 SUID 的功能了!嗄?不知道什麼是 SUID ?那就不要學(xué)人家架站嘛!@_@! 趕緊回去基礎(chǔ)學(xué)習(xí)篇複習(xí)一下程序與資源管理啦! | suid |
rw ro | 你可以指定該 partition 是唯讀 (ro) 或可讀寫喔! | rw |
dev nodev | 是否可以保留裝置檔案的特殊功能?一般來說只有 /dev 才會有特殊的裝置,因此你可以選擇 nodev 喔! | dev |
exec noexec | 是否具有執(zhí)行 binary file 的權(quán)限? 如果你想要掛載的僅是資料區(qū) (例如 /home),那麼可以選擇 noexec ?。?/td> | exec |
user nouser | 是否允許使用者進(jìn)行檔案的掛載與卸載功能? 如果要保護(hù)檔案系統(tǒng),最好不要提供使用者進(jìn)行掛載與卸載吧! | nouser |
auto noauto | 這個 auto 指的是『mount -a』時,會不會被掛載的項目。 如果你不需要這個 partition 隨時被掛載,可以設(shè)定為 noauto。 | auto |
[root@linux ~]# mount -t nfs -o nosuid,noexec,nodev,rw \ > 192.168.0.2:/home/public /home/nfs/public [root@linux ~]# mount 192.168.0.2:/home/public on /home/nfs/public type nfs (rw,noexec,nosuid,nodev,addr=192.168.0.2) |
參數(shù) | 參數(shù)功能 | 預(yù)設(shè)參數(shù) |
fg bg | 當(dāng)執(zhí)行掛載時,該掛載的行為會在前景 (fg) 還是在背景 (bg) 執(zhí)行? 若在前景執(zhí)行時,則 mount 會持續(xù)嘗試掛載,直到成功或 time out 為止,若為背景執(zhí)行, 則 mount 會在背景持續(xù)多次進(jìn)行 mount ,而不會影響到前景的程序操作。 如果你的網(wǎng)路連線有點不穩(wěn)定,或是伺服器常常需要開關(guān)機(jī),那建議使用 bg 比較妥當(dāng)。 | fg |
soft hard | 上頭不是談到掛載時會使用 RPC 呼叫嗎? 如果是 hard 的情況,則當(dāng)兩者之間有任何一部主機(jī)離線,則 RPC 會持續(xù)的呼叫,直到對方恢復(fù)連線為止。 如果是 soft 的話,那 RPC 會在 time out 後『重複』呼叫,而非『持續(xù)』呼叫, 因此系統(tǒng)的延遲會比較不這麼明顯。同上,如果你的伺服器可能開開關(guān)關(guān),建議用 soft 喔! | hard |
intr | 當(dāng)你使用上頭提到的 hard 方式掛載時,若加上 intr 這個參數(shù), 則當(dāng) RPC 持續(xù)呼叫中,該次的呼叫是可以被中斷的 (interrupted)。 | 沒有 |
rsize wsize | 讀出(rsize)與寫入(wsize)的區(qū)塊大小 (block size)。 這個設(shè)定值可以影響用戶端與伺服器端傳輸資料的緩衝記憶容量。一般來說, 如果在區(qū)域網(wǎng)路內(nèi) (LAN) ,並且用戶端與伺服器端都具有足夠的記憶體,那這個值可以設(shè)定大一點, 比如說 32768 (bytes) 等,提升緩衝記憶區(qū)塊將可提升 NFS 檔案系統(tǒng)的傳輸能力! 但要注意設(shè)定的值也不要太大,最好是達(dá)到網(wǎng)路能夠傳輸?shù)淖畲笾禐橄蕖?/td> | rsize=1024 wsize=1024 |
[root@linux ~]# mount -t nfs -o nosuid,noexec,nodev,rw \ > bg,soft,rsize=32768,wsize=32768 \ > 192.168.0.2:/home/public /home/nfs/public |
[root@linux ~]# vi /etc/fstab 192.168.0.2:/home/public /home/nfs/public nfs nosuid,noexec,nodev,rw, bg,soft,rsize=32768,wsize=32768 0 0 # 注意!上面的設(shè)定是同一行喔!不要搞錯囉! ^_^ |
[root@linux ~]# mount -t nfs localhost:/home/test /home/nfs mount: localhost:/home/test failed, reason given by server: Permission denied |
[root@linux ~]# mount -t nfs localhost:/home/test /home/nfs mount: RPC: Port mapper failure - RPC: Unable to receive [root@linux ~]# mount -t nfs localhost:/home/test /home/nfs mount: RPC: Program not registered |
[root@linux ~]# vi /etc/auto.master /home/nfs /etc/auto.nfs [root@linux ~]# mkdir /home/nfs # 注意!此時 /home/nfs 內(nèi)並沒有其他的目錄存在喔! |
[本地端目錄] [-掛載參數(shù)] [伺服器所提供的目錄] 參數(shù): [本地端目錄] :指的就是在 /etc/auto.master 內(nèi)指定的目錄之次目錄 [-掛載參數(shù)] :就是前一小節(jié)提到的 rw,bg,soft 等等的參數(shù)啦!可有可無; [伺服器所提供的目錄] :例如 192.168.0.2:/home/public 等 [root@linux ~]# vi /etc/auto.nfs public -rw,bg,soft,rsize=32768,wsize=32768 192.168.0.2:/home/public testing -rw,bg,soft,rsize=32768,wsize=32768 192.168.0.2:/home/test temp -rw,bg,soft,rsize=32768,wsize=32768 192.168.0.2:/tmp # 參數(shù)部分,只要最前面加個 - 符號即可! |
[root@linux ~]# /etc/init.d/autofs start |
[root@linux ~]# mount; df # 妳不會看到任何跟 192.168.0.2 這部主機(jī)有關(guān)的 NFS 掛載資訊喔! [root@linux ~]# cd /home/nfs/public [root@linux public]# mount; df 192.168.0.2:/home/public on /home/nfs/public type nfs (rw,bg,soft, rsize=32768,wsize=32768,addr=140.116.44.179) # 上面的輸出是同一行!瞧!突然出現(xiàn)這個玩意兒! Filesystem 1K-blocks Used Available Use% Mounted on 192.168.0.2:/home/public 10080488 2144288 7424136 23% /home/nfs/public # 檔案的掛載也出現(xiàn)沒錯! [root@linux public]# pwd /home/nfs/public # 這個目錄突然被生出來了! ^_^ |
[root@linux ~]# vi /etc/exports /tmp 192.168.0.0/24(rw,no_root_squash) /home/nfs 192.168.0.0/24(ro) *(ro,all_squash) /home/upload 192.168.0.0/24(rw,all_squash,anonuid=210,anongid=210) /home/andy 192.168.0.50(rw) |
1. /tmp [root@linux ~]# ll -d /tmp drwxrwxrwt 5 root root 20480 Sep 22 22:52 /tmp 2. /home/nfs [root@linux ~]# mkdir -p /home/nfs [root@linux ~]# chmod 755 -R /home/nfs # 修改較為嚴(yán)格的檔案權(quán)限將目錄與檔案設(shè)定成唯讀!不能寫入的狀態(tài),會更保險一點! 3. /home/upload [root@linux ~]# groupadd -g 210 nfs-upload [root@linux ~]# useradd -g 210 -u 210 -M nfs-upload # 先建立對應(yīng)的帳號與群組名稱及 UID 喔! [root@linux ~]# mkdir -p /home/upload [root@linux ~]# chown -R nfs-upload:nfs-upload /home/upload # 修改擁有者!如此,則使用者與目錄的權(quán)限都設(shè)定妥當(dāng)囉! 4. /home/andy [root@linux ~]# ll -d /home/andy drwx------ 3 andy andy 4096 Oct 28 13:37 andy |
[root@linux ~]# /etc/init.d/portmap start [root@linux ~]# /etc/init.d/nfs start [root@linux ~]# /etc/init.d/nfslock start |
1. 確認(rèn)遠(yuǎn)端伺服器的可用目錄: [root@linux ~]# /etc/init.d/portmap start [root@linux ~]# /etc/init.d/nfslock start [root@linux ~]# showmount -e 192.168.0.100 Export list for 192.168.0.100: /tmp 192.168.0.* /home/nfs (everyone) /home/upload 192.168.0.* /home/andy 192.168.0.50 2. 建立掛載點: [root@linux ~]# mkdir -p /home/zzz/tmp [root@linux ~]# mkdir -p /home/zzz/nfs [root@linux ~]# mkdir -p /home/zzz/upload [root@linux ~]# mkdir -p /home/zzz/andy 3. 實際掛載: [root@linux ~]# mount -t nfs 192.168.0.100:/tmp /home/zzz/tmp [root@linux ~]# mount -t nfs 192.168.0.100:/home/nfs /home/zzz/nfs [root@linux ~]# mount -t nfs 192.168.0.100:/home/upload /home/zzz/upload [root@linux ~]# mount -t nfs 192.168.0.100:/home/andy /home/zzz/andy |