为什么使用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,一个叫做AnonymousGid和AnonymousUid,值都保持是0就可以了。
之后重启系统,再重新挂载上,发现就可以对nfs挂载的内容进行修改了。
另一种图形化操作方案是在资源管理器上方找到映射网络驱动器,但是这个方法一直会要求输入用户名和密码,有时候随便输一个就能成功,但是我后来又挂载不上了,感觉不是很稳定。
==施工中 只用命令行的方式难以实现开机挂载==