实现文件共享的前提:两台机器能够相互ping通!!!
服务器端设置如下:
1. 安装NFS server软件
sudo apt-get install nfs-kernel-server
2. 创建共享目录并将目录的权限改为777
mkdir -p share
chmod 777 share
3. 配制文件vi /etc/exports
sudo vi /etc/exports
添加以下条目
/share *(rw,sync,no_root_squash)
其中/share为共享目录, rw为可读写操作
共享目录 可以访问的主机(权限) 代表所有用户(权限)
这个配置文件很简单,每一行前面是要共享的目录,是以目录为单位。然后这个目录可以依照不同的权限共享给不同的主机,不同的主机用空格分开,主机后面是以小括号"()“定义权限参数,若权限参数不只一个时,则以逗号”,“分开,并且主机名与小括号是连在一起的,主机与共享目录之间用空格分开,在这个文件内也可以利用#号来进行注释。
可以使用完整的IP或者网络号,例如:
单个主机:192.168.1.100 网络号:192.169.1.0/24或192.168.1.0/255.255.255.0
可以使用主机名,但这个主机名必须要在/etc/hosts内,或可以使用DNS找到该名称,重点是可以找到IP地址,如果是主机名可以支持通配符,例如”*“或”?"均可接受。
小括号内常用的权限参数如下:
- ro:共享目录只读;
- rw:共享目录可读可写
- sync:同步,将数据同步写入内存缓冲区与磁盘中,效率低,但可以保证数据的一致性
- async:异步,将数据先保存在内存缓冲区中,必要时才写入磁盘,效率高,但有丢失数据的风险;
- wdelay(默认):如果有多个客户端要对同一个共享目录进行写操作,则将这些操作集中执行。对有很多小的IO写操作时,使用该选项可以有效的提高效率;
- no_wdelay:如果有多个客户端要对同一个共享目录进行写操作则立即写入。当设置了async选项时,no_wdelay选项无效,应与sync配合使用;
- root_squash(默认):将来访的root用户映射为匿名用户或用户组;
- no_root_squash:来访的root用户保持root帐号权限;
- all_squash:所有访问用户都映射为匿名用户或用户组;
- no_all_squash(默认):访问用户先与本机用户匹配,匹配失败后再映射为匿名用户或用户组;
- anonuid=:指定匿名访问用户的本地用户UID,默认为nfsnobody(65534);
- anongid=:指定匿名访问用户的本地用户组GID,默认为nfsnobody(65534);
- secure(默认):限制客户端只能从小于1024的tcp/ip端口连接服务器;
- insecure:允许客户端从大于1024的tcp/ip端口连接服务器;
- subtree_check :若输出目录是一个子目录,则nfs服务器将检查其父目录的权限;
- no_subtree_check(默认) :即使输出目录是一个子目录,nfs服务器也不检查其父目录的权限,这样可以提高效率;
- hide:共享一个目录时,不共享该目录的子目录;
- no_hide:共享子目录;
如果想了解更多的参数,可以使用man exports
4. 开启nfs服务
sudo systemctl start nfs-kernel-server
客户端设置如下:
- 安装nfs-common (在另一台机器执行以下命令)
sudo apt-get install nfs-common
- 远程mount
sudo mount x.x.x.12:/share /home/share
把远程目录mount到本地/media/share下
遇到的问题及对策:
1)mount.nfs: access denied by server while mounting x.x.x.124:/home/share
对策:如果客户端的端口号大于1024,则需要将 insecure 选项加入到配置文件(/etc/exports)相关选项中mount客户端才能正常工作
修改配置文件/etc/exports,加入 insecure 选项
/home/share *(insecure,rw,async,no_root_squash)
保存退出
然后重启nfs服务:
service nfs restart
然后问题就解决了
2)文件夹访问失败
对策:将当前访问文件夹统一给权限,服务端和客户端给一样的权限
chmod 777 /share
3)两台机器连不通
对策:关闭两台机器的防火墙
sudo ufw disable
4)客户端开机没有共享文件夹
重启nfs服务+重新挂载即可sudo /etc/init.d/rpcbind restart
重启rpcbindsudo /etc/init.d/nfs-kernel-server restart
重启nfs
sudo mount x.x.x.124:/share/home/share
5)Ubuntu nfs重启服务**
sudo systemctl restart nfs-kernel-server
如果报错,有可能是/etc/exports配置错误,检查错误,重新启动