1.什麼是NFS(Network FileSystem)centos
NFS 就是 Network FileSystem 的縮寫,最先以前是由 Sun 所發展出來的。他最大的功能就是能夠透過網絡,讓不一樣的機器、不一樣的操做系統、能夠彼此分享個別的檔案 ( share file ),因此,也能夠簡單的將他看作是一個 file server 呢!這個 NFS Server 可讓你的 PC 來將網絡遠程的 NFS 主機分享的目錄,掛載到本地端的機器當中,因此,在本地端的機器看起來,那個遠程主機的目錄就好象是本身的 partition 通常!安全
雖然 NFS 有屬於本身的協議與使用的 port number ,可是在資料傳送或者其它相關訊息傳遞的時候, NFS 使用的則是一個稱爲遠程過程調用( Remote Procedure Call, RPC )的協議來協助 NFS 自己的運做!服務器
2.RPC(Remote Procedure Call)網絡
當咱們在使用某些服務來進行遠程聯機的時候,有些信息,例如主機的IP、服務的 port number、與對應到的服務之 PID 等等,都須要管理與對應!這些管理 port 的對應與服務相關性的工做,就是這個 Remote Procedure Call, RPC 的任務了app
NFS 自己的服務並無提供資料傳遞的協議,可是 NFS 卻能讓咱們進行檔案的分享,這其中的緣由,就是 NFS 使用到一些其它相關的傳輸協議!而這些傳輸的協議,就是使用到這個所謂的 RPC 的功能囉!這也就是說, NFS 自己就是使用 RPC 的一個 program 就是了!說的更白話一點, NFS 也能夠視做是一個 RPC server 啦!同時要注意到的是,在某些情況中,不但跑 NFS 的 Server 須要激活 RPC 的服務,連帶的,要掛載 NFS partition 的 Client 機器,也須要同步激活 RPC 才行!這樣 Server 端與 Client 端才能藉由 RPC 的協議來進行 program port 的對應喔!NFS 主要在管理分享出來的目錄,而至於資料的傳遞,就直接將他丟給 RPC 的協議來運做就是了!async
3.NFS須要有兩個套件才行,分別是:tcp
nfs-utilside
就是提供 rpc.nfsd 及 rpc.mountd 這兩個 NFS daemons 與其它相關 documents 與說明文件、執行檔等的套件!這個就是 NFS 的主要套件ui
portmap spa
NFS的安裝配置:
centos 5 :
yum -y install nfs-utils portmap
centos 6(在CentOS 6.3當中,portmap服務由rpcbind負責) :
yum -y install nfs-utils rpcbind
就如同剛剛提的到,咱們的 NFS 其實能夠被視爲一個 RPC server program,而要激活任何一個 RPC server program 以前,咱們都須要作好 port 的對應 ( mapping ) 的工做才行,這個工做其實就是『 portmap 』這個服務所負責的
4.NFS server端的設定:
a)./etc/exports
分享的目錄 主機名稱1或IP1(參數1,參數2) 主機名稱2或IP2(參數3,參數4)
b).參數
rw: 可擦寫的權限
ro: 只讀的權限
no_root_squash: 登入 NFS 主機使用分享目錄的使用者,若是是 root 的話,那麼對於這個分享的目錄來講,他就具備 root 的權限!這個項目『極不安全』,不建議使用!
root_squash: 在登入 NFS 主機使用分享之目錄的使用者若是是 root 時,那麼這個使用者的權限將被壓縮成爲匿名使用者,一般他的 UID 與 GID 都會變成 nobody 那個身份;
all_squash: 不論登入 NFS 的使用者身份爲什麼,他的身份都會被壓縮成爲匿名使用者,一般也就是 nobody 啦!
anonuid: 前面關於 *_squash 提到的匿名使用者的 UID 設定值,一般爲 nobody,可是你能夠自行設定這個 UID 的值!固然,這個 UID 必須要存在於你的 /etc/passwd 當中!
anongid: 同 anonuid ,可是變成 group ID 就是了
sync: 資料同步寫入到內存與硬盤當中
async: 資料會先暫存於內存當中,而非直接寫入硬盤\
5.exportfs的用法
若是咱們修改了/etc/exports後,並不須要重啓nfs服務,只要用exportfs從新掃描一次/etc/exports,而且從新加載便可
語法: exportfs [-aruv]
-a: 所有掛載(或卸載) /etc/exports檔案內的設定
-r: 從新掛載/etc/exports裏面的設定,也同步的更新/etc/exports和/var/lib/nfs/xtab裏面的內容
-u:卸載某一目錄
-v:在export的時候,將分享的目錄顯示到熒屏上.
例子:
編寫/etc/exports 文件,將特定的目錄共享出去,在server段寫入,定義某臺機器能夠訪問,某臺機器不能夠訪問,不許寫入文件,
[root@aaa nfs]# cat /etc/exports
/ext4/aa *(rw)
/ext4/bb *(rw,,no_root_squash)
/nfs/tmp 10.0.0.123(rw,sync)
/nfs/opt *(ro)
exportfs -r 來實現重讀文件,不須要重啓服務
而後,能夠經過另外一臺服務器來掛載目錄,經過mount命令來掛載共享目錄。
mount x.x.x.x:/ext4/aa /mnt
掛載以後,進入/mnt操做,會發現沒法進行新增,刪除等操做,即便使用root用戶也沒法操做該目錄,覺得redhat 6中,默認會添加上root-squash選項,會把root用戶映射成nfsnobody帳號,因此掛載後的目錄權限須要根據nfsnobody的權限來作操做,能夠設置成/ext4/aa爲777的權限,進入該目錄能夠作操做,經過ls -lh去查看建立的目錄爲nfsnobody的全部者
mount x.x.x.x:/ext4/bb /mnt
掛載以後,用root用戶進入操做以後,建立目錄都爲root所屬
/nfs/tmp 10.0.0.123(rw,sync)
指定只有10.0.0.123這臺機器能夠掛載,而且掛載後數據寫入會同步寫入到硬盤上面,也就是內存與硬盤同步。
Autofs搭建:
修改/etc/auto.master 這個文件,
客戶端本地目錄 /etc/auto.nfs 隨便指定的一個文件(能夠去拷貝/etc/auto.misc)
/test /etc/auto.nfs 指定服務器端掛載過來的目錄,是要掛到客戶端/test目錄下,
修改/etc/auto.nfs文件
opt -rw 10.0.0.23:/nfs
將 0.23服務器上面的nfs目錄自動掛載過來,掛載的目錄是/test/opt,/test是掛載點,具體掛載到哪個目錄下面,是在auto.nfs設定。
其中,在auto.nfs掛載中,可加參數爲:
(1)-a:把/etc/fstab中列出的路徑所有掛載。
(2)-t:須要mount的類型,如nfs等。
(3)-r:將mount的路徑定爲read only。
(4)-v mount:過程的每個操做都有message傳回到屏幕上。
(5)rsize=n:在NFS服務器讀取文件時NFS使用的字節數,默認值是1 024個字節。
(6)wsize=n:向NFS服務器寫文件時NFS使用的字節數,默認值是1 024個字節。
(7)timeo=n:從超時後到第1次從新傳送佔用的1/7秒的數目,默認值是7/7秒。
(8)retry=n:在放棄後臺mount操做以前能夠嘗試的次數,默認值是7 000次。
(9)soft:使用軟掛載的方式掛載系統,若Client的請求得不到迴應,則從新請求並傳回錯誤信息。
(10)hard:使用硬掛載的方式掛載系統,該值是默認值,重複請求直到NFS服務器迴應。
(11)intr:容許NFS中斷文件操做和向調用它的程序返回值,默認不容許文件操做被中斷。
(12)fg:一直在提示符下執行重複掛載。
(13)bg:若是第1次掛載文件系統失敗,繼續在後臺嘗試執行掛載,默認值是失敗後不在後臺處理。
(14)tcp:對文件系統的掛載使用TCP,而不是默認的UDP。
說明:mount NFS服務器的另外一個重要參數是hard(硬)mount或soft(軟)mount。
對於NFS掛載的時間默認是在/etc/sysconfig/autofs裏面能夠查看。