Top

NFS

参考:FreeBSD手册30.3. Network File System (NFS)

NFS(Network File System,网络文件系统)允许服务器通过网络共享文件夹和文件。
客户端可以像访问存储在本地的资源一样访问这些共享的文件。

服务器上必须运行以下进程:
进程 说明
nfsd NFS守护进程,NFS客户端需要此进程
mountd 执行从nfsd接收的请求的NFS装载守护进程。
rpcbind 此守护进程允许NFS客户端发现NFS服务器正在使用的端口。
另外,在客户端执行nfsiod可以提高性能,但不是必须的。

以下命令可以查看nfs服务器共享了哪些目录:
$ showmount -e 192.168.0.101

配置服务器

服务器端的配置文件是/etc/exports,此文件每行指定一个共享。
一个共享包括:共享的文件系统、哪些客户端可以访问该文件系统以及一些访问选项。
如果没有指定客户端,则网络上所有客户端都可以挂载该文件系统。

示例:
/cdrom -ro alpha bravo charlie
以上表示:以只读(-ro,read-only)方式将/cdrom共享给alpha、bravo、charlie这三台主机。
主机名必须能被正确识别,比如DNS能解析,或在服务器的/etc/hosts文件中有记录。

-alldirs允许子文件夹可以被挂载,比如:
/usr/home -alldirs 10.0.0.2 10.0.0.3 10.0.0.4

/a -maproot=root host.example.com box.example.org
以上例子设置允许两个来自不同网域的客户端访问共享目录(/a)。
-maproot=roor允许客户端的root用户可以像服务器的root用户一样在共享目录中写数据。
如果没有-maproot=roor,则客户端的root将会被映射到服务器的nobody账户,并受到服务器上nobody相同的限制。

每个客户端只能被指定一次。例如:以下写法是错误的:
/usr/src   client
/usr/ports client
正确的写法是:
/usr/src /usr/ports client

以下是个完整的示例:
# Export src and ports to client01 and client02, but only
# client01 has root privileges on it
/usr/src /usr/ports -maproot=root    client01
/usr/src /usr/ports               client02
# The client machines have root and can mount anywhere
# on /exports. Anyone in the world can mount /exports/obj read-only
/exports -alldirs -maproot=root      client01 client02
/exports/obj -ro

配置文件完成后,需要在/etc/rc.conf中加入以下行:
rpcbind_enable="YES"
nfs_server_enable="YES"
mountd_enable="YES"
然后启动服务:
# service nfsd start
启动nfsd时会自动启动mountd服务。但是mountd服务只有在启动时才会去读取/etc/exports文件。
所以修改/etc/exports文件后需要重新加载mountd服务:
# service mountd reload

配置客户端

客户端电脑需要在/etc/rc.conf中加入以下行:
nfs_client_enable="YES"
然后运行:
# service nfsclient start
现在客户端可以挂载服务器共享的文件系统了。
假设服务器名称为server,共享的文件系统为/home。客户端要将其挂载到自己的/mnt目录,使用以下命令:
# mount server:/home /mnt
如果客户端要每次启动时自动挂载,可以编辑客户端的/etc/fstab文件,加入以下行:
server:/home /mnt nfs rw 0 0

对于windows系统
需要在“启用或关闭Windows功能中,勾选”NFS服务“。

在命令行窗口使用以下命令挂载服务器共享的nfs文件夹:
mount \\[server_ip|server_name]\sharefolder h:

锁定

某些应用程序需要文件锁定才能正确运行,这需要在服务器和客户端的/etc/rc.conf中同时加入以下行:
rpc_lockd_enable="YES"
rpc_statd_enable="YES"
然后在服务器和客户端运行以下命令启动这两个服务:
# service lockd start
# service statd start
如果不需要服务器端的锁定,客户端可以在运行mount时包含-L选项将NFS客户端配置为本地锁定。

使用autofs自动挂载

autofs工具是几个组件的通用名,它们一起允许在访问该文件系统中的文件或目录时自动挂载远程和本地文件系统。
它由核心组件autofs和几个用户空间应用程序组成:automountautomountdautounmountd
autofs虚拟文件系统由automount挂载到指定挂载点,通常在引导期间调用。

autofs的配置文件为/etc/auto_master。

/net上挂载了一个特殊的自动挂载器映射。当访问该目录中的文件时,autofs(5)会查找相应的远程挂载并自动挂载它。
例如,尝试访问/net/192.168.0.106/usr中的文件会告诉automountd(8)从主机192.168.0.106挂载/usr导出。
% showmount -e 192.168.0.106
Exports list on 192.168.0.106:
/usr                               Everyone
/a                                 Everyone
% cd /net/192.168.0.106/usr
showmount -e 192.168.0.106命令显示了可以从NFS服务器192.168.0.106挂载的共享文件系统。

要在系统启动时启用autofs,可以在/etc/rc.conf中加入:
autofs_enable="YES"
手动启动的命令为:
# service automount start
# service automountd start
# service autounmountd start