ubuntu 16.04 nfs服务的搭建

NFS(Network File System)网络文件系统。它允许网络中的计算机之间通过TCP/IP网络共享资源。在NFS的应用中,本地NFS的客户端应用可以透明地读写位于远端NFS服务器上的文件,就像访问本地文件一样。

1. 安装

1
$ sudo apt-get install nfs-common nfs-kernel-server

2. 修改配置文件

1
2
3
$ sudo vim  /etc/exports
#add these line at end
/home *(rw,sync,no_root_squash)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
/home   :共享的目录
* :指定哪些用户可以访问
* 所有可以ping同该主机的用户
192.168.1.* 指定网段,在该网段中的用户可以挂载
192.168.1.12 只有该用户能挂载
(rw,sync,no_root_squash): 权限
选项说明
ro:共享目录只读;
rw:共享目录可读可写;
sync:同步,将数据同步写入内存缓冲区与磁盘中,效率低,但可以保证数据的一致性;
async:将数据先保存在内存缓冲区中,必要时才写入磁盘;
all_squash:所有访问用户都映射为匿名用户或用户组;
no_all_squash(默认):访问用户先与本机用户匹配,匹配失败后再映射为匿名用户或用户组;
root_squash(默认):将来访的root用户映射为匿名用户或用户组;
no_root_squash:来访的root用户保持root帐号权限;
anonuid=<UID>:指定匿名访问用户的本地用户UID,默认为nfsnobody(65534);
anongid=<GID>:指定匿名访问用户的本地用户组GID,默认为nfsnobody(65534);
secure(默认):限制客户端只能从小于1024的tcp/ip端口连接服务器;
insecure:允许客户端从大于1024的tcp/ip端口连接服务器;
wdelay(默认):检查是否有相关的写操作,如果有则将这些写操作一起执行,这样可以提高效率;
no_wdelay:若有写操作则立即执行,应与sync配合使用;
subtree_check(默认) :若输出目录是一个子目录,则nfs服务器将检查其父目录的权限;
no_subtree_check :即使输出目录是一个子目录,nfs服务器也不检查其父目录的权限,这样可以提高效率;

3. 加载配置文件

1
$ sudo exportfs -a

出现提示跳过

3. 重启nfs服务

1
$ sudo /etc/init.d/nfs-kernel-server restart

4. 测试

客户端:

查看服务端的共享目录

1
2
3
$ showmount -e + nfs服务主机IP
Export list for 192.168.1.129:
/home *

挂载nfs服务器到本地客户端某个目录

1
2
$ sudo mkdir /mnt/nfs/
$ sudo mount -o rw 192.168.1.129:/home /mnt/nfs/

客户端创建文件测试

1
$ sudo touch /mnt/nfs/helloworld.txt

服务端查看是否同步

1
2
$ ls /home
helloworld.txt

对于windows客户端:

起先使用windows10 自带的nfs客户端服务功能

打开控制面板>>程序>>程序和功能>>启动或关闭Windows功能

1553224408192

1
$ mount 192.168.1.129:/home  k:

1553225441914

卸载挂载

1
2
umount  k:  #卸载挂载点k盘
#umount -f -a #卸载全部的NFS挂载

其他:

1
2
3
showmount -e [server]    显示 NFS 服务器导出的所有共享。
showmount -a [server] 列出客户端主机名或 IP 地址,以及使用“主机:目录”格式显示的安装目录。
showmount -d [server] 显示 NFS 服务器上当前由某些 NFS 客户端安装的目录。

5. NFS文件访问权限

要共享一个目录给别人用,我们直觉能想到的就是,需要共享什么目录,共享给谁,这两个基本问题。
另外还有一个非常重要的部分:共享文件的权限。我们上面的极简示例中,服务端共享/data目录,
客户端挂载/data目录,之后就可正常读写,且慢,大家有没有注意到我在客户端是使用root用户
读写/data目录里的内容的,假如在客户端换成普通用户呢?这里我明确的告诉大家,对于上述极简
示例中,客户端使用普通用户,只能读,不能写。



----------- 本文结束 -----------




如果你觉得我的文章对你有帮助,你可以打赏我哦~
0%