NFS(Network File System)是由Sun创建的网络协议,主要供不同的UNIX主机之间共享文件系统,由于存在一些安全隐患,Sun后来又发展出了NIS,NIS+,这些协议的使用在UNIX的世界里面十分普遍,Sun还开发了PC-NFS,供用户从PC上运行NFS协议,共享UNIX的资源。对于Linux来说,由于有Samba的存在,所以大多数人不很熟悉NFS,其实在多台Linux主机之间共享文件系统,NFS仍然不失为一种简单易用的选择。下面我们就以较短的篇幅,简单地介绍一下NFS以及如何实现。
要把自己的文件系统共享出去,首先保证自己的机器上启动了NFS服务,可以用:
# ps –ef| grep nsfd
查看一下nfsd是否已经运行,如果没有,请启动它,启动和停止NFS如下:
# /etc/rc.d/init.d/nfs start
# /etc/rc.d/init.d/nfs start
也可以调用ntsysv命令,将nfs服务设置为自动运行。
然后,将你要共享出去的文件系统,需要用exportfs命令,你也可以通过设置/etc/exports文件,在系统启动的时候,自动将资源共享出去。具体用法请查看exportfs的手册页。
要配置NFS,就是要修改/etc/fstab(客户端)和/etc/exports(服务器端),exports文件在服务器端指定要与哪些客户共享哪些目录以及每个客户的访问权限;fstab文件在客户端用来指定应该联接哪些目录以及把它们放在本地目录的哪一个位置。
1. 服务器端配置/etc/exports文件
文件的格式如下:
----------------------------------------------------------------------------------------------------------------
#要共享的目录 主机名1(权限) 主机名2(权限) 主机名3(权限)。。。。。。
/dir/exports host1(rw) host2(rw)
----------------------------------------------------------------------------------------------------------------
如果一行太长,用符号“”连接到下一行。关于权限,可供选择的是:
rw 可以读和写
ro 只读
no_root_squash 承认并信任客户记得root账号
当设置完/etc/exports文件后,运行下面的命令让共享生效:
# exportfs -a
2. 要共享资源的主机运行mount
我们可以简单地使用mount命令安装NFS服务器的文件系统,在mount远程文件系统时,和mount本地的文件系统时一样的,唯一的不同是要在文件系统的描述前面加上远程文件系统的主机名称,如果该主机在/etc/hosts中出现了,那么在命令中使用主机名字就可以,否则要使用IP地址。语法一般是:
# mount servername:/exported_dir /dir_to_mount –t nfs
例如,主机jw运行了NFS,将自己的/export目录共享了,那么客户机lidf应该这样: # mount jw:/export /home/inport –t nfs
客户机在mount服务器的资源时,可以传递一些命令选项,如:
# mount jw:/export /home/inport –o ro –t nfs
表示把jw主机的/export目录挂在本地的/home/inport目录下,只读。其他选项如下:
rw 可以读写
bg 后台安装(避免因为安装不上服务器资源而导致系统停顿)
intr 出现问题是,可以中断
soft 允许经过retrans次尝试后,停止安装,返回失败信息
retrans 为soft指定尝试次数
当要卸载服务器的文件系统时,和本地一样,使用umount命令。
# umount /home/inport
更具体的参数使用请查看mount的手册页和NFS-HOWTO。
3.利用/etc/fstab文件,在启动时自动挂载远程主机的文件系统
/etc/fstab文件包含了以哪种方式挂载哪种文件系统的信息。对于NFS的mount,它包括了服务器名字、释放(export)的服务器目录、本地的挂载点(mount point)和控制挂载的一些选项。
下面是一个/etc/fstab文件的例子:
#device mount_point filesystem_type option fsck
/dev/hda5 / ext2 defaults 1 1
/dev/hda6 /usr ext2 defaults 1 2
/dev/hda9 /usr/local ext2 defaults 1 2
/dev/hda8 swap swap defaults 0 0
/dev/fd0 /mnt/floppy ext2 noauto 0 0
/dev/cdrom /mnt/cdrom iso9660 noauto,ro 0 0
none /proc proc defaults 0 0
none /dev/pts devpts mode=0622 0 0
jw:/usr/local/pub /pub nfs rsize=8192,wsize=8192,timeo=14,intr
文件系统了各种文件系统的信息,每一个文件系统单独一行,每行的域的信息以空格或者tab分开。在fstab文件中,行的前后顺序是很重要的,因为这可能对fsck、mount和umount等命令有影响。
关于这6个域的解释,请查看介绍fstab的部分。
我们注意到,按照最后一行,系统在启动的时候会尝试挂载主机jw的/usr/local/pub到本地的/pub,文件系统类型是nfs,最后两个供fsck使用的参数不填,表示不进行检查。
注意NFS服务器和客户机是相对的,一个提供共享资源的NFS服务器,也可以共享其他NFS服务器的资源。
要在系统启动的时候就mount其他NFS服务器的资源,我们可以修改/etc/fstab文件:
4. 配置文件示例
一个完整的/etc/exports文件
----------------------------------------------------------------------------------------------------------------------
#
# /etc/exports for jw
#
# Share the following directory
/export/home lidf(rw) syy(rw) caibb(rw) zhougj(ro) eagle(ro)
#
# Share local software
#
/export/usr/local lidf(rw,no_root_squash)
syy(rw,no_root_squash)
caibb(rw,no_root_squash)
zhougj(ro)
eagle(ro)
----------------------------------------------------------------------------------------------------------------------
一个完整的/etc/fstab文件
----------------------------------------------------------------------------------------------------------------------
#
# /etc/fstab for lidf
#
/dev/hda1 / ext2 rw 1 1
/dev/hda2 swap swap
/dev/hda3 /usr ext2 rw 0 0
/dev/hda4 /var ext2 rw 0 0
jw:/export/home /home nfs rw,bg,intr,soft 0 0
jw:/export/usr/local /usr/local nfs rw,bg,intr,soft 0 0
----------------------------------------------------------------------------------------------------------------------