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)
root@debian:~#
客户端设置;
使用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里面是这样定义的,
我们先看这句话
/misc /etc/auto.misc
将/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 $
#
# This is an automounter map and it has the following format
# key [ -mount-options-separated-by-comma ] location
# 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目录下面去,就是这个意思。
现在我们将一张光盘放入光驱里面,看下能否自动挂载起来。
[root@localhost ~]# cd /misc/
[root@localhost misc]# ls
[root@localhost misc]#
我们现在已经进入了这个目录,可以看到,这个目录里面什么东西都没有,刚才哪两个文件定义说,是挂载到/misc/cd目录下面,现在我们进入cd目录。
[root@localhost ~]# cd /misc/
[root@localhost misc]# ls
[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 ..
[root@localhost misc]# ls
cd
[root@localhost misc]#
可以看到,我们光盘里面的东西就被挂载到/misc/cd目录下面去了。
这个自动挂载的功能是系统默认就有了的,下面我们根据刚才的例子来学习如何利用自动挂载器的功能来实现挂载NFS网络资源。
首先编辑/etc/auto.master这个文件,
auto.master 文件定义本地挂载点. 本地挂载点目录/mnt
编辑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
/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配置文件如下
# $Id: auto.misc,v 1.2 2003/09/29 08:22:35 raven Exp $
# This is an automounter map and it has the following format
# key [ -mount-options-separated-by-comma ] location
# Details may be found in the autofs(5) manpage
nfs 192.168.200.91:/home/share
这个nfs目录在/mnt下面不需要有
重启一下服务
[root@localhost ~]# service autofs restart
Stopping automount: [ OK ]
Starting automount: [ OK ]
[root@localhost ~]#
服务启动成功。
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网络资源是没有挂载过来的
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
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 文件夹权限需在服务器端修改