nfs简介&配置
一、簡介
NFS(Network File System/網絡文件系統):
1)、設置Linux系統之間的文件共享(Linux與Windows中間文件共享采用SAMBA服務);
2)、NFS只是一種文件系統,本身沒有傳輸功能,是基于RPC協議實現的,才能達到兩個Linux系統之間的文件目錄共享;
3)、NFS為C/S架構;
二、依賴的服務和軟件包
1、檢查下列兩個包是否已經安裝(默認安裝完RHEL或者CentOS系統,就已經安裝了這兩個軟件包)
[root@Mylinux ~]# rpm -qa | grep 'portmap|nfs-utils'
2、如果沒有安裝,現在就安裝它們
[root@Mylinux ~]# yum install -y portmap nfs-utils
說明如下:
(1)nfs-utils套件
該套件提供rpc.nfsd及rpc.mountd這兩個NFS daemons與其它相關documents與說明文件、執行檔等的套件!所以它是NFS的主要套件
(2)portmap套件
NFS其實可以被視為一個RPC server program,而要激活任何一個RPC server program之前,我們都需要做好port的對應(mapping)的工作才行,這個工作其實就是portmap這個服務所負責的!也就是說,在激活任何一個RPC server之前,需要激活portmap,那么portmap就是作port的mapping
例如:當Client端嘗試來使用RPC server所提供的服務時,由于Client需要取得一個可以連接的port才能夠使用RPC server所提供的服務,因此,Client首先就會去跟portmap聯系一個port number,好讓Client可以跟RPC聯絡,這個時候portmap就自動的將自己管理的port mapping告知Client,好讓他可以連接上來server!所以說:在激活NFS之前,要先激活portmap
既然nfs依賴于RPC,那么我們使用rpcinfo指令來查看一下本地rpc信息
[root@Mylinux ~]# service portmap start; service nfs start; rpcinfo -p localhost
rpc.nfsd---管理clinet是否有權限登錄,以及判別登錄者的uid等
rpc.mountd---讀取/etc/exports的權限,對文件訪問權限進行控制
rpc.lockd---文件的互斥鎖,保證文件在同一時間只有一個人訪問,需要nfslockd服務
rpc.statd---檢查文件的一致性,需要nfslockd服務
三、服務端配置方法
1)配置服務器端的主配置文件/etc/exports
[root@Mylinux ~]# vim /etc/exports
(1)語法格式
/etc/exports文件中每一行提供了一個共享目錄的設置,其格式為如下:
+ 空格 + [hostname1或IP1(參數1,參數2.....)] + 空格 + [hostname2或IP2(參數3,參數4....)]
(2)主要參數如下
|
rw |
可讀可寫 |
|
ro |
只讀 |
|
sync |
數據同步寫入內存緩沖區與磁盤中,雖然這樣做效率較低,但可以保證數據的一致性(適合于小文件傳輸) |
|
async |
數據先暫時放于內存,而非直接寫入硬盤,等到必要時才寫入磁盤(適合于大文件傳輸) |
|
no_root_squash |
使用nfs時,如果用戶是root,不進行權限壓縮,即root用戶在nfs上創建的文件屬組和屬主仍然是root(不安全,不建議使用) |
|
root_squash |
使用nfs時,如果用戶是root,則進行權限壓縮,即把root用戶在nfs上創建的文件屬組和屬主修改為nfsnobody |
|
all_squash |
所有的普通用戶使用nfs都將使用權限壓縮,即:將遠程訪問的所有普通用戶及所屬用戶組都映射為匿名用戶或者用戶組(一般均為nfsnobody) |
|
no_all_squash |
所有的普通用戶使用nfs都不使用權限壓縮,即:不將遠程訪問的所有普通用戶及所屬用戶組都映射為匿名用戶或者用戶組(默認設置) |
|
anonuid=XXX |
anon即anonymous(匿名者),前面關于*_squash提到的匿名用戶的uid的設置值,通常為nobody或者nfsnobody,使用這個參數可以自行設定這個uid值,這個uid必須存在于/etc/passwd |
|
anongid=XXX |
將遠程訪問的所有用戶組都映身為匿名用戶組賬戶,并指定該匿名用戶組賬戶為本地用戶組賬戶(GID=XXX) |
|
insecure |
允許客戶端從大于1024的TCP/IP端口連NFS服務器 |
|
secure |
限制客戶端只能從小于1024的TCP/IP端口連接NFS服務器(默認設置) |
|
wdelay |
檢查是否有相關的寫操作,如果有則將這些寫操作一起執行,這樣可提高效率(默認設置) |
|
no_wdelay |
若有寫操作則立即執行(應與sync配置) |
|
subtree_check |
若輸出目錄是一個子目錄,則NFSW:務器將檢查其父目錄的權限(默認設置) |
|
no_subtree_check |
即使輸出目錄是一個子目錄,NFS服務器也不檢查其父目錄的權限,這樣做可提高效率 |
(3)設置實例
|
/tmp*(rw,no_root_squash) |
在所有的IP(主機)上登錄的用戶都可對NFS服務器上的共享目錄/tmp擁有rw操作權限,同時如果是root用戶訪問該共享目錄,那么不將root用戶及所屬用戶組都映射為匿名用戶或用戶組(*表示所有的主機或者IP) |
|
/tmp*(rw) |
在所有的IP(主機)登錄的用戶都可對NFS服務器上的共享目錄/tmp擁有rw操作權限 |
|
/home/public192.168.0.*(rw)*(ro) |
除了在192. 168. 0.0/24這個網段內的主機上登錄的用戶,可對NFS服務器共享目錄/home/public進行rw操作權限,而其它網段的主機上登錄的用戶,對NFS服務器共享目錄/home/public只能進行r操作 |
|
/home/test192.168.0.100(rw) |
只對192.168.0.100該臺主機設置權限,即:使在該臺主機登錄的用戶都可對NFS服務器上的共享目錄/home/test擁有讀與寫的操作 |
|
/home/linux*.linux.org(rw,all_squash,anonuid=40,anongid=40) |
當*.linux.org(加入域linux.org的所有主機) 登陸此NFS主機,并且在/home/linux下面寫入檔案時,該檔案的所有人與所有組,就會變成NFS服務器上的/etc/passwd文件里面對應的UID為40的那個身份的使用者了(因為指定了參數:all_squash,anonuid=40,anongid=40) |
(4)權限問題
|
NFS服務器(192.168.0.2)上的/etc/exports配置文件設置如下 |
|
|
例如:我們在192.168.0.100這個client端登陸此NFS主機(192.168.0.2),那么會怎么樣呢? |
|
|
情況一: 在192.168.0.100的帳號為test這個身份,同時NFS主機上也有test這個帳號 |
(1)由于NFS主機的/tmp權限為-rwxrwxrwt,所以我(test在192.168.0.100上)在/tmp下面具有存取的權限,并且寫入檔案的所有人為test |
|
(2)在/home/public中,由于我有讀寫的權限,如果NFS主機在/home/public這個目錄的權限對于test開放寫入的話,那么就可 以讀寫,并且寫入檔案的所有人是test。如果NFS主機的/home/public對于test這個使用者并沒有開放寫入權限時,那就無法寫入,雖然/etc/exports里面是rw,也不起作用 |
|
|
(3)在/home/test中,權限與/home/public有相同的狀態,需要NFS主機的/home/test對于test有開放的權限 |
|
|
(4)在/home/linux當中,不論是何種的user,身份都會被變成UID=40的這個帳號 |
|
|
情況二: 如果我們在192.168.0.100的身份為test2,但是NFS主機卻沒有test2這個帳號時 |
(1)在/tmp下還是可以寫入,但是寫入的檔案所有人變成nobody |
|
(2)在/home/public與/home/test里面是否可以寫入,還需要看/home/public的權限而定,不過身份就被變成nobody |
|
|
(3)/home/linux下的身份還是變成UID=40的帳號 |
|
|
情況三:在192.168.0.100的身份為root |
(1)在/tmp里面可以寫入,但是由于no_root_squash的參數,改變了預設的root_squash的設定值,所以在/tmp寫入檔案的所有人為root了 |
|
(2)在/home/public底下的身份被壓縮成了nobody,因為預設的屬性都具有root_squash,所以檔案所有人就變成了nobody |
|
|
(3)/home/test情況與/home/public相同 |
|
|
(4)/home/linux中,root的身份也被壓縮成UID=40的那個使用者了 |
|
(5)啟動nfslock、portmap、nfs服務,并查看日志是否正常的激活
[root@Mylinux ~]# service portmap start
[root@Mylinux ~]# service nfs start
[root@Mylinux ~]# service nfslock start
[root@Mylinux ~]# tail -10 /var/log/messages
注意:啟動這些服務的順序
(6)客戶端連接使用nfs
[root@Mylinux ~]# /etc/init.d/portmap start
[root@Mylinux ~]# /etc/init.d/nfslock start
[root@Mylinux ~]# showmount -e 192.168.0.2
(7)exportfs與showmount指令的用法
| exportfs指令作用 |
用來維護NFS服務的共享目錄列表的輸出 |
|
|
exportfs指令語法 |
-a |
全部mount或者unmount /etc/exports中內容(即:要被共享出來的目錄) |
|
-r |
重新讀取/etc/exports文件的設置,并使得設置立即生效,而不需要重新啟動nfs服務 |
|
|
-u |
停止輸出某一個目錄 |
|
|
-v |
在輸出目錄時,將詳細的信息輸出到屏幕上 |
|
|
注意:當修改了/etc/exports配置文件,可以使用參數-r重新讀取/etc/exports配置文件,使得設置立即生效,而不需要重啟nfs服務 |
||
|
exportfs指令例子 |
#exportfs -rv //重新export一次 |
|
|
格式:showmount [-ae] hostname(IP) |
|
|
-a |
顯示指定的NFS服務器的所有客戶端主機及其所連接的目錄(一般在NFS Server上使用該參數) |
|
-e |
顯示指定的NFS服務器上所有export出來的目錄 |
(8)/var/lib/nfs/etab里面可以查看每個目錄的分享權,例如:
/nfs *rw,sync,wdelay,hide,nocrossmnt,secure,root_squash,no_all_squash,no_subtree_check,secure_locks,acl,mapping=identity,anonuid=65534,anongid=65534)
對照一下/etc/passwd,你就會發現,65534這個UID的用戶是nfsnobody
(9)啟動和停止NFS服務
Section 1:啟動NFS服務
[root@Mylinux ~]# service portmap start
[root@Mylinux ~]# service nfs start
[root@Mylinux ~]# service nfslock start
注意:它們的啟動順序,因為nfs服務是依賴于RPC服務的,而RPC服務又依賴于portmap服務,所以要先啟動portmap,而最后一個nfslock服務是對nfs共享的文件的讀定鎖定,所以在啟動nfs服務后再啟動
Section 2:停止NFS服務
[root@Mylinux ~]# service nfslock start
[root@Mylinux ~]# service nfs start
[root@Mylinux ~]# service portmap start
Section 3:檢測與重啟NFS服務
[root@Mylinux ~]# /etc/init.d/nfs restart
[root@Mylinux ~]# /etc/init.d/nfs status
[root@Mylinux ~]# /etc/init.d/portmap status
Section 4:設置自動啟動NFS服務
[root@Mylinux ~]# chkconfig --level 345 portmap on
[root@Mylinux ~]# chkconfig --level 345 nfs on
四、客戶端配置方法
1、手動掛載NFS服務器的共享目錄到NFS客戶端
[root@Mylinux ~]# mount -t nfs hostname(orIP):/directory /mountpoint
注意:為了擔心會不小心將 NFS 端掛進來的具有 SUID 權限檔案的程序執行,root可以將NFS 所分享的目錄以較為安全的情況掛載進來,即:“ mount -t nfs -onosuid,rohostname:/directory /mountponit ”
|
掛載NFS系統文件的可選參數如下 |
|
|
soft |
當服務器端沒回應時,會在timeout后重新連接,傳回錯誤信息 |
|
hard |
當服務器端沒回應時持續在后臺嘗試連接 |
|
intr |
當正在進行NFS請求時,允許用鍵盤中斷 |
|
nointr |
當正在進行NFS請求時,不允許用鍵盤中斷 |
|
timeo |
請求過期時間,單位為秒 |
|
bg |
當第一次請求不成功,第二次的mount將放到后臺執行 |
|
fg |
一直在前臺發送請求 |
|
proto=tcp|udp |
修改使用TCP協議還是UDP協議來傳輸nfs的數據 |
|
default |
hard和nointr |
|
rsize |
讀操作的塊大小,這個設置影響服務器和客戶端的nfs緩存大小,如果有充足的內存和網絡帶寬,可以設置高些,如32768(bytes) |
|
wsize |
寫操作的塊大小,這個設置影響服務器和客戶端的nfs緩存大小,如果有充足的內存和網絡帶寬,可以設置高些,如32768(bytes) |
|
查看幫助文件:man fstab、man -a mount |
|
注意:如果要自動掛NFS共享目錄,那么可以在/etc/fstab文件中進行配置
2、使用autofs來實現自動掛載NFS服務器的共享目錄到NFS客戶端
1)為什么要使用autofs
autofs能夠自動掛載卸載nfs和文件系統,并且在空閑的時候能夠關閉nfs連接,降低系統負載。使用autofs要先關閉netfs服務,并注釋掉/etc/fstab里關于nfs的內容
2)如何使用autofs實現NFS服務
[root@Mylinux ~]#chkconfig --level 35 autofs on
[root@Mylinux ~]#/etc/init.d/autofs start
[root@Mylinux ~]#vi /etc/auto.master
/nfs /etc/auto.nfs --timeout=60
[root@Mylinux ~]# vi /etc/auto.nfs
public -ro,soft,intr 192.168.0.228:/data
[root@Mylinux ~]# reboot
[root@Mylinux ~]# cd /nfs
[root@Mylinux ~]# ls
[root@Mylinux ~]# mount
/dev/hda1 on / type ext3 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
tmpfs on /dev/shm type tmpfs (rw)
/dev/hda2 on /web type ext3 (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)
[root@Mylinux ~]# cd public
[root@Mylinux ~]# mount
/dev/hda1 on / type ext3 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
tmpfs on /dev/shm type tmpfs (rw)
/dev/hda2 on /web type ext3 (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)
192.168.0.228:/data on /nfs/public type nfs (ro,soft,intr,addr=192.168.0.228)
同時使用多個參數的方法:mount -t nfs -o timeo=3,udp,hard 192.168.0.30:/tmp /nfs
注意:NFS客戶機和服務器的選項并不一定完全相同,而且有的時候會有沖突。比如說服務器以只讀的方式導出,客戶端卻以可寫的方式mount,雖然可以成功mount上,但嘗試寫入的時候就會發生錯誤。一般服務器和客戶端配置沖突的時候,會以服務器的配置為準
3、配置/etc/fstab文件來實現開機自動掛載NFS服務器的共享目錄到NFS客戶端
注意:要開機掛載nfs文件系統還需要開啟netfs服務,并且把掛載項寫入到/etc/fstab
|
/etc/fstab文件的語法格式 |
|
|
格式:fs_spec fs_file fs_type fs_options fs_dump fs_pass |
|
|
fs_spec |
該字段定義希望加載的文件系統所在的設備或遠程文件系統,對于nfs這個參數一般設置為這樣:192.168.0.1:/NFS |
|
fs_file |
本地的掛載點 |
|
fs_type |
對于NFS來說這個字段只要設置成nfs |
|
fs_options |
掛載的參數,可以使用的參數可以參考上面的mount參數 |
|
fs_dump |
該選項被" dump "命令使用來檢查一個文件系統應該以多快頻率進行轉儲,若不需要轉儲就設置該字段為:0 |
|
fs_pass |
該字段被fsck命令用來決定在啟動時需要被掃描的文件系統的順序,根文件系統"/"對應該字段的值應該為:1,其他文件系統應該為:2。若該文件系統無需在啟動時掃描則設置該字段為:0 |
|
查看幫助文件:manfstab、man-amount |
|
4、與NFS有關一些其它指令
nfsstat: 查看NFS的運行狀態,對于調整NFS的運行有很大幫助
rpcinfo -p hostname(orIP):查看rpc執行信息,可以用于檢測rpc運行情況的工具
總結
以上是生活随笔為你收集整理的nfs简介&配置的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 半贝丸_功效作用注意事项用药禁忌用法用量
- 下一篇: 深度清理电脑C盘垃圾的方法如何深度清理电