使用NFS网络文件系统
- 贡献者:HHJ
- 阅读:1877
- 类别:系统服务
- 更新时间:2017-10-10 08:37:22
1. NFS 网络文件系统的介绍
NFS(Network File System)即网络文件系统,是 FreeBSD 支持的文件系统中的一种,它允许网络中的计算机之间通过 TCP/IP 网络共享资源。在 NFS 的应用中,本地 NFS 的客户端应用可以透明地读写位于远端 NFS 服务器上的文件,就像访问本地文件一样。 以下是 NFS 最显而易见的好处:
- 节省本地存储空间,将常用的数据存放在一台 NFS 服务器上且可以通过网络访问,那么本地终端将可以减少自身存储空间的使用。
- 用户不需要在网络中的每个机器上都建有 Home 目录,Home 目录可以放在 NFS 服务器上且可以在网络上被访问使用。
- 一些存储设备如软驱、CDROM 和 Zip(一种高储存密度的磁盘驱动器与磁盘)等都可以在网络上被别的机器使用。这可以减少整个网络上可移动介质设备的数量。
提示:
以上关于 NFS 网络文件系统的介绍引用于百度百科
1.2. NFS 网络文件系统服务端的组成介绍
FreeBSD 系统的 NFS 文件系统已经集成于内核之中,现版本的 FreeBSD 已经默认支持 NFS 服务端以及客户端。我们说文件系统是由内核实现的,但是服务是在用户层实现的。一个完整的 NFS 服务体系就像 mail 一样是一个复杂的服务集合体,其中包括:
- nfsd 提供基于 NFS 第三版本 和第四版本协议的服务支持,但是服务开放一组随机服务端口。
- rpcbind 开放 111 端口监听客户端请求,协调 NFS 服务端和客户端的端口绑定。
- nfsuserd 完成本地用户和远程用户 uid guid 的访问权限映射(对接)
- mountd 协助完成本地 NFS 文件系统挂载给客户端。
1.3. FreeBSD 下 NFS 服务端配置
虽然在 FreeBSD 上一个完整的文件系统的服务端要求至少 4 个服务启动才能协调工作。但是在配置上是不需要这么啰嗦的。 为了能够正常的运行支持 NFSv3 的 NFS 服务器,你需要修改/etc/rc.conf添加如下配置:
nfs_server_enable="YES" nfsuserd_enable="YES"
为了能够正常的运行支持 NFSv4 的 NFS 服务器,你需要修改/etc/rc.conf添加如下配置:
nfs_server_enable="YES" nfsv4_server_enable="YES" nfsuserd_enable="YES"
重要:
NFSv3 与 NFSv4 的区别是:NFSv4支持专有的访问控制列表,允许客户端在本地操作文件
其中 nfs_server_enable 与 nfsv4_server_enable 是 nfsd 服务中的启动开关,这两个开关均由 nfsd 服务所支持。而不需要用户强制启动 rpcbind 与 mountd 的理由是:这两个服务均由 nfsd 服务后台自主维护,且进行后台强制启动!详细见如下代码分析
#!/bin/sh
....
nfsd_precmd()
{
rc_flags="${nfs_server_flags}"
# Load the modules now, so that the vfs.nfsd sysctl
# oids are available.
load_kld nfsd
if checkyesno nfs_reserved_port_only; then
echo 'NFS on reserved port only=YES'
sysctl vfs.nfsd.nfs_privport=1 > /dev/null
else
sysctl vfs.nfsd.nfs_privport=0 > /dev/null
fi
if checkyesno nfsv4_server_enable || \
checkyesno nfs_server_managegids; then
force_depend nfsuserd || err 1 "Cannot run nfsuserd"
fi
if checkyesno nfsv4_server_enable; then
sysctl vfs.nfsd.server_max_nfsvers=4 > /dev/null
else
echo 'NFSv4 is disabled'
sysctl vfs.nfsd.server_max_nfsvers=3 > /dev/null
fi
force_depend rpcbind || return 1
force_depend mountd || return 1
}
这段代段表示在 nfsd 服务启动之前要处理的运行环境,而代码段的最后两行表示在 nfsd 服务启动之前要强制启动 rpcbind 以及 mountd。关于 rc 系统的 start_precmd 请参考本站的 rc脚本的书写 小节。
1.4. 配置 exports 系统
NFS 文件系统需要一个可维护的本地挂载点,用于共享给远程客户端,而在通用文件系统上这个本地挂载点的维护则由 exports 系统来提供(ZFS 文件系统可自主维护 NFS 共享目录),其配置文件为/etc/exports
,简单语法示例如下小节。
1.4.1 针对于 NFSv3 协议 exports 简单示例
/usr /usr/local -maproot=0:10 friends /usr -maproot=daemon grumpy.cis.uoguelph.ca 131.104.48.16 /usr -ro -mapall=nobody /u -maproot=bin: -network 131.104.48 -mask 255.255.255.0 /a -network 192.168.0/24 /u2 -maproot=root friends /u2 -alldirs -network cis-net -mask cis-mask /cdrom -alldirs,quiet,ro -network 192.168.33.0 -mask 255.255.255.0 #/usr 以及 /usr/local表示共享目录, -maproot=0:10 表示远程用户被映射为本地 uid 为 0 gid 为 #10 的用户,friends 是远程主机名,在 /etc/hosts 中应该为其定义映射 IP 地址。也就是说如果远 #程 friends 主机如果挂载以上两个目录,则远程主机的用户会被映射为本地的uid:gid = 0:10 的用户 # #-maproot=daemon 表示远程用户被映射为本地用户 daemon。grumpy.cis.uoguelph.ca 131.104.48.16 #分别表示远程主机名以及远程 IP 地址,也就是说 /usr 挂载点如果被这两台主机进行挂载,则远程 #用户就会被影射为本地的 daemon 用户。 # #/usr -ro -mapall=nobody 表示初以上情况外,所有其他主机的挂载权限为 ro(只读权限),且用户被 #映射为本地的 nobody 用户。 # #/u -maproot=bin: -network 131.104.48 -mask 255.255.255.0 以及 /a -network 192.168.0/24 分 #别表示本地目录可以共享给 131.104.48/24 以及 192.168.0/24 这两个网段的客户端使用,只是用了 #不同的表示方法。 # #/u2 -alldirs 表示所有 /u2 下的目录都可以被客户端当作独立挂载点进行挂载 # #/cdrom -alldirs,quiet 中 quiet 表示如果出错,则以静默方法记录日志
1.4.2 针对于 NFSv4 协议 exports 简单示例
V4: / -sec=krb5:krb5i:krb5p -network 131.104.48 -mask 255.255.255.0 V4: / -sec=sys:krb5:krb5i:krb5p grumpy.cis.uoguelph.ca #第一行代码表示使用 NFSv4 协议共享目录,可以使用此共享目录的客户端必须在 131.104.48/24 网段内 #第二行代码表示可以使用此共享目录的客户端主机名为 grumpy.cis.uoguelph.ca # #以上两行表示使用不同版本的 krb5 进行安全认证,并且被 chroot 在 "/" 本地挂载点。
小心:
exports 文件中 NFSv4 挂载点必须以 "V4: " 为前缀修饰词,且 "V4" 必须使用英文大写字母。
2. FreeBSD 下 NFS 文件系统客户端的使用
如果想把服务端共享目录以简单的方法挂载到本地,只需要使用 mount 命令进行挂载即可 针对于 NFSv3 协议只需
# mount -t nfs server-ip:/usr/ports /mnt
针对于 NFSv4 协议只需
# mount -t nfs -o nfsv4 server-ip:/usr/ports /mnt
如果想在开机启动时自动挂载 NFS 远程目录则需要按照如下几个步骤示例操作即可 需要在/etc/rc.conf文件中添加
nfsuserd_enable="YES" nfscbd_enable="YES"
注意:
nfscbd 的作用是允许服务端向客户端委托事物
对于 NFSv3 协议调节/etc/fstab
server-ip:/usr/ports /usr/ports nfs rw 0 0
对于 NFSv4 协议调节/etc/fstab
server-ip:/usr/ports /usr/ports nfs rw,nfsv4 0 0