学而实习之 不亦乐乎

在 Freebsd 中构建 NFS 服务

2023-09-28 08:12:21

网络文件系统(NFS)是 FreeBSD 支持的文件系统中的一种,也被称为 NFS。 NFS 允许一个系统在网络上与它人共享目录和文件。通过使用NFS,用户和程序可以象访问本地文件一样访问远端系统上的文件。

NFS的好处:

  1. 本地工作站使用更少的磁盘空间,因为通常的数据可以存放在一台存储服务器上而且可以通过网络访问到。
  2. 用户不必在每个网络上机器里头都有一个home目录。Home目录可以被放在NFS服务器上并且在网络上处处可用。
  3. 诸如软驱,CDROM,和 Zip(是指一种高储存密度的磁盘驱动器与磁盘)之类的存储设备可以在网络上面被别的机器使用,这可以减少整个网络上的可移动介质设备的数量。

 
NFS的实际应用:

  1. 多机组建负载均衡集群时,可以使用NFS共享存储,保证各服务器读写文件的一致性
  2. 多个机器共享一台CDROM或者其他设备。这对于在多台机器中安装软件来说更加便宜跟方便。   
  3. 在大型网络中,配置一台中心 NFS 服务器用来放置所有用户的home目录可能会带来便利。这些目录能被输出到网络以便用户不管在哪台工作站上登录,总能得到相同的home目录。   
  4. 几台机器可以有通用的 /usr/ports/distfiles 目录。这样的话,当您需要在几台机器上安装 port 时,您可以无需在每台设备上下载而快速访问源码。

注:NFS 由 Sun microsystems 公司开发。是一种网络操作系统,并且是unix操作系统的协议
 
NFS的工作方式:

NFS 至少包括两个主要的部分:一台服务器,以及至少一台客户机, 客户机远程地访问保存在服务器上的数据。要让这一切运转起来, 需要配置并运行几个程序。

服务器必须运行以下服务:

  1. nfsd NFS为来自NFS客户端的请求服务。
  2. mountd NFS挂载服务,处理 nfsd 递交过来的请求。
  3. rpcbind 此服务允许 NFS 客户程序查询正在被 NFS 服务使用的端口。

 客户端同样运行一些进程,比如 nfsiod。 nfsiod处理来自NFS的请求。

一、NFS安装配置

安装rpc 

# cd /usr/ports/math/rpc 
# make install clean

NFS服务器这端,确认/etc/rc.conf 文件里头以下开关都配上了: 

nfs_server_enable="YES"
rpcbind_enable="YES"
nfs_server_flags="-u -t -n 4"
mountd_flags="-r"

每当NFS服务器启动时,mountd就自动运行了。在选项 nfs_server_flags 中,-u 表示我们提供 UDP 方式联机,而 -t 表示以 TCP 方式联机。-n 4标志,告诉nfsd运行自己的4个相同的拷贝,如果您所要使用 NFS 的 client 都是 FreeBSD,您可以只以 TCP 联机,如此可以有较佳的效能。-n 4 表示我们一次打开四个 nfsd 的 daemon。
 
某些应用程序需要文件上锁支持才能正常运行。在使用 NFS 时, 可以用 rpc.lockd 来支持文件上锁功能。 要启用它, 需要在服务器和客户机的 /etc/rc.conf 中加入 (假定两端均已配好了 NFS):

rpc_lockd_enable="YES"
rpc_statd_enable="YES"

 然后使用下述命令启动该程序:

# /etc/rc.d/lockd start
# /etc/rc.d/statd start

在客户端一侧,确认下面这个开关出现在 /etc/rc.conf里头:

nfs_client_enable="YES"
nfs_client_flags="-n 4"  #像nfsd,-n 4告诉nfsiod运行自己的4个拷贝

二、exports配置文件相关设置参数

打开NFS server的服务是个很简单的事情,只需要运行/stand/sysinstall,选择Configure,在这个菜单中选择Networking,里面有一个NFS Server的选项,把它勾上以后会进入编辑器编辑一个文件/etc/exports你直接写你要export出去的目录就可以了。 
实例说明:

# cat /etc/exports
# /usr/src /usr/obj -ro 192.168.9.224

-ro             表示 read only,只读 

# /home   -alldirs       192.168.9.220 192.168.9.221 192.168.9.222

-alldirs      标记允许子目录被作为挂载点,但前提是 /data 必须是一个独立的 filesystem

# /a      -maproot=0 -network 192.168.9.0 -mask 255.255.248.0

-maproot=root         标记授权远端系统上的 root 用户在被输出的文件系统上以root身份进行读写,-network IP -mask MASK 指定允许联机的网域

# /cdrom -ro -mapall=alex

-mapall              将所有 client 的存取联机对映到 user,也就是说所有人的身份都转成 user 

配置文件/etc/exports内容如下:

# cat /etc/exports
/data        -alldirs      192.168.9.223

三、NFS启动与重载配置文件

启动NFS

# /etc/rc.d/nfsd start

重新加载NFS配置文件: 在修改了 /etc/exports 文件之后, 就必须让 mountd 服务重新检查它, 以便使修改生效。一种方法是通过给正在运行的服务程序发送 HUP 信号来完成:

# kill -HUP `cat /var/run/mountd.pid`

或指定适当的参数来运行 mountd 脚本:

# /etc/rc.d/mountd reload

如果第一次设定,所以连 mountd 都还没有启动,所以你可以选择重新开机或是执行下列指令来启动 NFS 服务

# rpcbind
# nfsd -u -t -n 4
# mountd -r

在 NFS 客户端:

# nfsiod -n 4

四、客户端配置

1.查看NFS服务器的输出

# showmount -e 192.168.9.134 

2.挂载NFS服务器中的共享目录到本地目录/data2/下

# mount -t nfs 192.168.9.134:/data /data2/

3.卸载系统中已挂载的NFS共享目录

# umount /data/

4.修改fstab文件让系统启动时自动挂载NFS文件

# ee /etc/fstab
192.168.1.134:/data    /data2    nfs     defaults    0 0