NFS 是Network File System的縮寫,即網絡檔案系統。一種使用于分散式檔案系統的協定,由Sun公司開發,于1984年向外公布。功能是通過網絡讓不同的機器、不同的作業系統能夠彼此分享個别的資料,讓應用程式在用戶端通過網絡通路位于伺服器磁盤中的資料,是在類Unix系統間實作磁盤檔案共享的一種方法。
NFS在檔案傳送或資訊傳送過程中依賴于RPC協定。RPC,遠端過程調用 (Remote Procedure Call) 是能使用戶端執行其他系統中程式的一種機制。NFS本身是沒有提供資訊傳輸的協定和功能的,但NFS卻能讓我們通過網絡進行資料的分享,這是因為NFS使用了一些其它的傳輸協定。而這些傳輸協定用到這個RPC功能的。可以說NFS本身就是使用RPC的一個程式。或者說NFS也是一個RPC SERVER。是以隻要用到NFS的地方都要啟動RPC服務,不論是NFS SERVER或者NFS CLIENT。這樣SERVER和CLIENT才能通過RPC來實作PROGRAM PORT的對應。可以這麼了解RPC和NFS的關系:NFS是一個檔案系統,而RPC是負責負責資訊的傳輸。
<a href="http://wiki.jikexueyuan.com/project/linux/nfs.html" target="_blank">http://wiki.jikexueyuan.com/project/linux/nfs.html</a>
<a href="https://www.freebsd.org/doc/zh_CN.UTF-8/books/handbook/network-nfs.html" target="_blank">https://www.freebsd.org/doc/zh_CN.UTF-8/books/handbook/network-nfs.html</a>
<a href="http://www.zhukun.net/archives/7096" target="_blank">http://www.zhukun.net/archives/7096</a>
伺服器端和用戶端:
<code>$ yum install nfs-utils portmap (适用centos 5)</code>
<code>$ yum install nfs-utils rpcbind (适用centos 6)</code>
線上上機器隻需要執行$ yum install nfs-utils,rpcbind會自動安裝
如果用戶端不安裝,會報錯如下
用戶端nfs-utils,執行yum install nfs-utils -y
如果不安裝,會報錯如下
mount: wrong fs type, bad option, bad superblock on 10.76.174.182:/opt/meituan/nfsattachment,
missing codepage or helper program, or other error
(for several filesystems (e.g. nfs, cifs) you might
need a /sbin/mount.<type> helper program)
In some cases useful info is found in syslog - try
dmesg | tail or so
伺服器端:
主配置檔案/etc/exports
$ su - sankuai
$ vi /etc/exports //在此檔案中輸入一下内容
/opt/meituan/poslog cq-icb-h-posmonitor-staging01(rw,sync,fsid=0,anonuid=500,anongid=500)
/opt/meituan/poslog cq-icb-h-posmonitormanage-staging01(rw,sync,fsid=0,anonuid=500,anongid=500)
這個配置檔案就這樣簡單一行。共分為三部分,第一部分就是本地要共享出去的目錄,第二部分為允許通路的主機(可以是一個IP也可以是一個IP段)第三部分就是小括号裡面的,為一些權限選項。
rw:read-write,可讀寫;
ro:read-only,隻讀;
sync:同步寫入(檔案同時寫入硬碟和記憶體),适用在通信比較頻繁且實時性比較高的場合
async:異步寫入(檔案先寫入記憶體,稍候再寫入硬碟),性能較好(速度快),适合超大或者超多檔案的寫入,但有資料丢失的風險,比如突然斷電等情況;
root_squash(預設):将來訪的root使用者映射為匿名使用者或使用者組;
no_root_squash:來訪的root使用者保持root帳号權限(可能會不安全);
no_all_squash(預設):通路使用者先與本機使用者比對,比對失敗後再映射為匿名使用者或使用者組;
all_squash:将來訪的所有使用者映射為匿名使用者或使用者組;
secure(預設):限制用戶端隻能從小于1024的tcp/ip端口連接配接伺服器;
insecure:允許用戶端從大于1024的tcp/ip端口連接配接伺服器;
anonuid:匿名使用者的UID值,通常是nobody或nfsnobody,可以在此處自行設定;
anongid:匿名使用者的GID值;
no_subtree_check:如果NFS輸出的是一個子目錄,則無需檢查其父目錄的權限(可以提高效率)
$ chkconfig rpcbind on //設定開機自啟動
$ chkconfig nfs on //設定開機自啟動
$ service rpcbind start //啟動rpcbind服務,NFS是依托rpcbind的,是以首先要啟動rpcbind,然後啟動NFS才能使剛才的配置生效。啟動完NFS後,就該使用NFS服務了。
$ service nfs start //啟動nfs服務
$ showmount -e localhost //用shoumount -e 加伺服器IP就可以檢視NFS的共享情況
$ showmount -a //把連接配接本機的NFS的client全部列出。
格式:mount [- t nfs] [-o 選項] 伺服器IP:共享的目錄 本地目錄
NFS預設是用UDP協定,也可以加上-o proto=tcp換成TCP協定。
<a href="http://www.jianshu.com/p/cfa02764d19e" target="_blank">http://www.jianshu.com/p/cfa02764d19e</a>
解決因服務端移除目錄再恢複時,用戶端報錯,此類問題的正常思路是:
1.解除安裝目錄 <code>umount -f /home/log/dir</code>
然而通常情況下,因為用戶端挂載的目錄會被其他程序打開,導緻我們在解除安裝目錄的時候通常不能成功,那麼成功解除安裝目錄也有以下步驟:
1.檢視哪些程序占用檔案目錄: <code>fuser -mu /mnt</code>
2.kill掉這些占用檔案目錄的程序:<code>kill -9 xxxx</code>
3.解除安裝目錄:<code>umount -f /home/log/dir</code>
運氣不太好的時候,當還有未知應用程序在操作檔案目錄,上述步驟也是不成功的,這個時候就要使用炒雞解除安裝方式<code>umount -l</code>
1.使用lazy解除安裝:<code>umount -l /home/log/dir</code>
解釋下umount lazy:
umount -l #umount lazy
當不知道是什麼應用操作了檔案目錄,使用umount -f也無法成功的時候,使用umount -l ,umount會等待應用操作檔案系統,直到檔案系統可以被解除安裝為止,即umount -l并不是立刻清除所有挂載操作,它的特點是一直等待;
修改配置檔案/etc/exports 如何生效
exportfs -rv 等價于 /etc/init.d/nfs reload 加載配置生效(當修改了/etc/exports時執行)
-a 打開或取消所有目錄共享。
-o options,...指定一列共享選項,與 exports(5) 中講到的類似。
-i 忽略 /etc/exports 檔案,進而隻使用預設的和指令行指定的選項。
-r 重新共享所有目錄。它使 /var/lib/nfs/xtab 和 /etc/exports 同步。 它将 /etc/exports 中已删除的條目從 /var/lib/nfs/xtab 中删除,将核心共享表中任何不再有效的條目移除。
-u 取消一個或多個目錄的共享。
-f 在“新”模式下,重新整理核心共享表之外的任何東西。 任何活動的客戶程式将在它們的下次請求中得到 mountd添加的新的共享條目。
-v 輸出詳細資訊。當共享或者取消共享時,顯示在做什麼。 顯示目前共享清單的時候,同時顯示共享的選項。
本文轉自Tenderrain 51CTO部落格,原文連結:http://blog.51cto.com/tenderrain/1975268,如需轉載請自行聯系原作者