Date:2012-12-20
Version:1
一)NFS介紹:
NFS(Network File System, 網絡檔案系統)可以通過網絡将分享不同主機(不同的OS)的目錄——可以通過NFS挂載遠端主機的目錄, 通路該目錄就像通路本地目錄一樣!
一般而言, 使用nfs能夠友善地使各unix-like系統之間實作共享. 但如果需要在unix-like和windows系統之間共享, 就得使用samba了!
NFS運作在SUN的RPC(Remote Procedure Call, 遠端過程調用)基礎上, RPC定義了一種與系統無關的方法來實作程序間通信. 由此, NFS server也可以看作是RPC server.
正因為NFS是一個RPC服務程式, 是以在使用它之前, 先要映射好端口——通過portmap設定.
比如: 某個NFS client發起NFS服務請求時, 它需要先得到一個端口(port). 是以它先通過portmap得到port
number. (不僅NFS, 所有的RPC服務程式啟動之前, 都需要設定好portmap)
在啟動RPC服務(比如NFS)之前, 需要啟動portmap服務!(關于nfs和portmap是否存在于目前系統, 看後面的"NFS安裝"部分.
二)安裝NFS
Debian上預設是沒有安裝NFS伺服器的,首先要安裝NFS服務程式:
root#apt-get install nfs-kernel-server
(安裝nfs-kernel-server時,apt會自動安裝nfs-common和portmap)
這樣,主控端就相當于NFS Server。
同樣地,目标系統作為NFS的用戶端,需要安裝NFS用戶端程式。如果是Debian/系統,則需要安裝nfs-common。
root#sudo apt-get install nfs-common
nfs-common和nfs-kernel-server都依賴于portmap!
三)與NFS相關的幾個檔案, 指令
1, /etc/exports
對NFS卷的通路是由exports來準許, 它枚舉了若幹有權通路NFS伺服器上檔案系統的主機名.
NFS配置檔案設定
NFS服務的配置檔案是etc/exports
exports檔案内容格式:
<輸出目錄> [用戶端1 選項(通路權限,使用者映射,其他)] [用戶端2 選項(通路權限,使用者映射,其他)]
1.輸出目錄:
輸出目錄是指NFS系統中需要共享給客戶機使用的目錄;
2.用戶端:
用戶端是指網絡中可以通路這個NFS輸出目錄的計算機
用戶端常用的指定方式
指定ip位址的主機 192.168.200.62
指定子網中的所有主機 192.168.200.0/24
指定域名的主機 a.liusuping.com
指定域中的所有主機 *.liusuping.com
所有主機 *
3.選項:
選項用來設定輸出目錄的通路權限、使用者映射等。NFS主要有3類選項:
通路權限選項
設定輸出目錄隻讀 ro
設定輸出目錄讀寫 rw
使用者映射選項
all_squash 将遠端通路的所有普通使用者及所屬組都映射為匿名使用者或使用者組(nfsnobody);
no_all_squash 與all_squash取反(預設設定);
root_squash 将root使用者及所屬組都映射為匿名使用者或使用者組(預設設定);
no_root_squash 與rootsquash取反;
anonuid=xxx 将遠端通路的所有使用者都映射為匿名使用者,并指定該使用者為本地使用者(UID=xxx);
anongid=xxx 将遠端通路的所有使用者組都映射為匿名用 戶組賬戶,并指定該匿名使用者組賬戶為本地使用者組賬戶(GID=xxx);
其它選項
secure 限制用戶端隻能從小于1024的tcp/ip端口連接配接nfs伺服器(預設設定);
insecure 允許用戶端從大于1024的tcp/ip端口連接配接伺服器;
sync 将資料同步寫入記憶體緩沖區與磁盤中,效率低,但可以保證資料的一緻性;
async 将資料先儲存在記憶體緩沖區中,必要時才寫入磁盤;
wdelay 檢查是否有相關的寫操作,如果有則将這些寫操作 一起執行,這樣可以提高效率(預設設定);
no_wdelay 若有寫操作則立即執行,應與sync配合使用;
subtree 若輸出目錄是一個子目錄,則nfs伺服器将檢查其父目錄的權限(預設設定);
no_subtree 即使輸出目錄是一個子目錄,nfs伺服器也不檢查其父目錄的權限,這樣可以提高效率;
.
2, /sbin/exportfs
維護NFS的資源共享. 可以通過它重新設定 /etc/exports 的共享目錄, 解除安裝NFS Server共享的目錄或者重新共享等.
3, /usr/sbin/showmount
用在 NFS Server 端,而 showmount 則主要用在 Client
端. showmount 可以用來檢視 NFS 共享的目錄資源.
4, /var/lib/nfs/xtab
NFS的記錄文檔: 通過它可以檢視有哪些Client 連接配接到NFS主機的記錄.
下面這幾個并不直接負責NFS, 實際上它們負責所有的RPC
5, /etc/default/portmap
實際上, portmap負責映射所有的RPC服務端口, 它的内容非常非常之簡單(後面詳述)
6, /etc/hosts.deny
設定拒絕portmap服務的主機
7, /etc/hosts.allow
設定允許portmap服務的主機
四)檢視/etc/exports檔案
Cat /etc/exports
root@debian:~# more /etc/exports
# /etc/exports: the access control list for filesystems which may be exported
# to NFS clients. See exports(5).
#
# Example for NFSv2 and NFSv3:
# /srv/homes hostname1(rw,sync,no_subtree_check) hostname2(ro,sync,no_subtree_check)
# Example for NFSv4:
# /srv/nfs4 gss/krb5i(rw,sync,fsid=0,crossmnt,no_subtree_check)
# /srv/nfs4/homes gss/krb5i(rw,sync,no_subtree_check)
/home/share 192.168.200.0/255.255.255.0(rw,sync) *(ro)
root@debian:~#
NFS挂載目錄及權限由/etc/exports檔案定義
比如我要将将我的home目錄中的/home/share目錄讓192.168.200.*的IP共享, 則在該檔案末尾添加下列語句:
/home/share 192.168.200.*(rw,sync,no_root_squash)
或者:/home/share 192.168.200.0/24(rw,sync,no_root_squash)
192.168.200.* 網段内的NFS用戶端能夠共享NFS伺服器/home/share目錄内容.且有讀,寫權限, 并且該使用者進入/home/share目錄後的身份為root
最好加上sync, 否則 root#exportfs -r 時會給出警告, sync是NFS的預設選項.
運作 $ showmount -e 檢視NFS server的export list.
root@debian:~# showmount -e localhost
Export list for localhost:
/home/share (everyone)
用戶端設定;
使用apt-get install { portmap,nfs-common}
自動挂載器的介紹(automounter)
自動挂載器就是當我們網絡中有一台NFS Server的時候,用戶端需要去挂載NFS Server上面的資源,如果将NFS的挂載資訊寫在/etc/fstab這個檔案裡面,那麼用戶端隻要是啟動計算機,就是自動挂載NFS資源。可能有些用戶端不需要去挂載NFS的資源,這樣就會浪費資源。而自動挂載器就可以幫我們實作,當用戶端需要去通路的時候,才挂載,不需要通路的時候,資源是斷開的,是以學習自動挂載器是很有必要的。
要想實作自動挂載的功能,必須安裝autofs這個包
[root@localhost ~]#apt-get install autofs5
自動挂載是通過兩個檔案來實作的
/etc/auto.master
/etc/auto.misc
現在我們打開/etc/auto.master這個檔案,看下裡面是怎麼定義的。
[root@localhost ~]# vim /etc/auto.master
# $Id: auto.master,v 1.4 2005/01/04 14:36:54 raven Exp $
# Sample auto.master file
# This is an automounter map and it has the following format
# key [ -mount-options-separated-by-comma ] location
# For details of the format look at autofs(5).
/misc /etc/auto.misc
# NOTE: mounts done from a hosts map will be mounted with the
# “nosuid” and “nodev” options unless the “suid” and “dev”
# options are explicitly given.
/net -hosts
# Include central master map if it can be found using
# nsswitch sources.
# Note that if there are entries for /net or /misc (as
# above) in the included master map any keys that are the
# same will not be seen as the first read key seen takes
# precedence.
+auto.master
可以看到,在/etc/auto.master裡面是這樣定義的,
我們先看這句話
将/etc/auto.misc裡面的内容挂載到/misc這個目錄下面去。
我們再來開到/etc/auto.misc這個檔案
[root@localhost ~]# vim /etc/auto.misc
# $Id: auto.misc,v 1.2 2003/09/29 08:22:35 raven Exp $
# Details may be found in the autofs(5) manpage
cd -fstype=iso9660,ro,nosuid,nodev :/dev/cdrom
# the following entries are samples to pique your imagination
#linux -ro,soft,intr ftp.example.org:/pub/linux
#boot -fstype=ext2 :/dev/hda1
#floppy -fstype=auto :/dev/fd0
#floppy -fstype=ext2 :/dev/fd0
#e2floppy -fstype=ext2 :/dev/fd0
#jaz -fstype=ext2 :/dev/sdc1
#removable -fstype=ext2 :/dev/hdd
~
在/etc/auto.misc檔案定義了将cdrom裡面的東西挂載到cd目錄下面去
注意,這裡的cd目錄是以/misc為根的,也就是/misc/cd目錄。
我們将這兩個檔案整合一下,意思就是說将cdrom裡面的東西挂載到/misc/cd目錄下面去,就是這個意思。
現在我們将一張CD光牒放入光驅裡面,看下能否自動挂載起來。
[root@localhost ~]# cd /misc/
[root@localhost misc]# ls
[root@localhost misc]#
我們現在已經進入了這個目錄,可以看到,這個目錄裡面什麼東西都沒有,剛才哪兩個檔案定義說,是挂載到/misc/cd目錄下面,現在我們進入cd目錄。
[root@localhost misc]# cd cd
[root@localhost cd]# ls
AUTORUN.INF HD4.GHO PESETUP README.TXT WINPE.XPE
AXPE OSGHOST.EXE PESOFT SYSTEM WNPEFONT.BIN
[root@localhost cd]# cd ..
cd
可以看到,我們CD光牒裡面的東西就被挂載到/misc/cd目錄下面去了。
這個自動挂載的功能是系統預設就有了的,下面我們根據剛才的例子來學習如何利用自動挂載器的功能來實作挂載NFS網絡資源。
首先編輯/etc/auto.master這個檔案,
auto.master 檔案定義本地挂載點. 本地挂載點目錄/mnt
編輯auto.master 配置檔案如下:
/mnt /etc/auto.nfs
/etc/auto.nfs這個檔案可以自己命名,在/etc/auto.misc這個檔案定義也是可以的。
複制一個模闆檔案auto.misc成auto.nfs
這個檔案名一定要與/etc/master中定義的一緻。
[root@localhost ~]#
[root@localhost ~]# cp /etc/auto.misc /etc/auto.nfs
編輯/etc/auto.nfs配置檔案如下
nfs 192.168.200.91:/home/share
這個nfs目錄在/mnt下面不需要有
重新開機一下服務
[root@localhost ~]# service autofs restart
Stopping automount: [ OK ]
Starting automount: [ OK ]
服務啟動成功。
root@debian:/mnt/nfs# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda4 7.5G 912M 6.2G 13% /
tmpfs 993M 0 993M 0% /lib/init/rw
udev 988M 104K 988M 1% /dev
tmpfs 993M 0 993M 0% /dev/shm
/dev/sda1 184M 20M 155M 12% /boot
/dev/sda3 369M 11M 340M 3% /tmp
[root@localhost ~]#
現在可以df –h 可以看到的nfs網絡資源是沒有挂載過來的
udev 988M 104K 988M 1% /dev
192.168.200.91:/home/share
50G 180M 47G 1% /mnt/nfs
root@debian:/mnt/nfs#
nfs 權限根伺服器權限有關。
More /etc/exports
/home/share 192.168.200.*(rw,sync,anonuid=1001,anongid=1001)
把用戶端通路使用者映射為伺服器使用者rovkxu:1001:1001 檔案夾權限需在伺服器端修改