为什么使用NFS

之前也写过一篇使用smaba服务器共享文件的博客Samba服务器的搭建

Samba服务器支持非常广泛,甚至在iPhone上都可以直接连接使用,那为什么还需要NFS呢?smaba服务器确实比较方便,但是每次都要更改配置,还要重新设置用户名和密码,以及在linux上挂载,都有一点小麻烦。nfs则可以更加方便地在linux上挂载,也可以在windows和mac上挂载使用。

服务器设置

编辑/etc/exports文件,插入以下行:

/srv/nfs *(rw,sync,no_root_squash)
  • 第一项是共享的目录名
  • 第二项(对应星号位置)是共享给谁,可以填通配符、网段、主机组以及ip地址
  • 第三项是options参数,这里rw表示可读可写,sync表示保持同步,no_root_squash表示关闭root权限保护,默认的选项和这里给出的三个都是相反的,即默认只读、不同步、保护root权限

root_squash和no_root_squash的含义:root_squash意味着如果客户端用户在客户端的主机上是root权限,访问共享目录时权限会被压缩成nobody,比较安全;而no_root_squash表示这样的用户权限不会被压缩,保留root权限,会不太安全。

可以把对多个共享目标的配置写在同一行,例如:

/mnt/minio/data 192.168.2.0/24(rw,sync,no_subtree_check) 172.27.0.0/16(rw,sync,no_subtree_check) 10.144.0.0/16(rw,sync,no_subtree_check)

注意:如果主机上没有这个文件,可能是还没有安装nfs,可以通过下面的命令安装:

apt install nfs-kernel-server

改好了配置文件之后,就可以通过下面的命令一键启用新配置:

exportfs -rv

r参数表示重新应用配置,v表示打印完整信息。

另外,exportfs还可以做一些nfs的管理,例如exportfs -a可以查看现在主机所有nfs共享的目录。

客户端配置

Linux

Linux可以直接挂载NFS目录,方法如下:

mount -t nfs 127.0.0.1:/srv/nfs /mnt/nfs

这里-t指定要挂在的nfs文件系统,后面挂载目标是<host>:<dir>的格式。

如果不确定目标服务器有什么可以挂载的目录,可以使用showmount -e <host>命令查询。

Windows

windows 上面如果想要挂载和使用稍微有点麻烦。首先要知道windows默认没有启用nfs的功能,因此要先在控制面板->程序与功能里面找到启动或关闭windows功能,然后找到nfs相关的客户端和管理工具,将这两个打开。

之后需要使用命令挂载nfs文件系统。不要使用管理员权限的cmd,否则会在自己的资源管理器中看不到挂载的盘符。mount -o anon <host>:<dir> x: 这里-o anon 表示匿名挂载。x表示一个盘符,windows会像c盘一样给nfs文件系统分配一个盘符。

单纯这样挂载之后,发现还不能在nfs文件系统中写入,只能读取。要做的是给匿名用户权限,需要去修改一下注册表。

开始菜单输入regedit来到注册表编辑器,导航到HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\ClientForNFS\CurrentVersion\Default注册表中,然后在这个下面建立两个New DWORD (32-bit) Value,一个叫做AnonymousGidAnonymousUid,值都保持是0就可以了。

之后重启系统,再重新挂载上,发现就可以对nfs挂载的内容进行修改了。

另一种图形化操作方案是在资源管理器上方找到映射网络驱动器,但是这个方法一直会要求输入用户名和密码,有时候随便输一个就能成功,但是我后来又挂载不上了,感觉不是很稳定。

==施工中 只用命令行的方式难以实现开机挂载==