Homebrew NFS Network File Sharing Environment

217 篇文章 30 订阅
19 篇文章 2 订阅
文章详细介绍了如何在优麒麟OS上配置NFS服务器,以及在Ubuntu22.04客户端上挂载和使用这些共享目录。服务器端涉及exports文件配置、权限设置,客户端包括查看共享和挂载操作。还讨论了NFS的权限机制和挂载时可能遇到的权限问题及解决方法。最后提到了NFS在虚拟化场景中的应用。
摘要由CSDN通过智能技术生成

环境介绍

nfs server 优麒麟 OS作为NFS服务器:

nfs client, ubuntu 22.04 作为NFS 客户端:

网络拓扑结构,网关1安装在客厅,为了加强卧室信号,用一台小米路由器作为信号中继,拓扑结构如下:

NFS Server路由信息,可见前两跳分别是两个网关

NFS Client信息:

安装环境:

NFS Server端

sudo apt-get update
sudo apt-get install inetutils-traceroute traceroute
sudo apt-get install nfs-kernel-server rpcbind

NFS Client端

sudo apt install nfs-common

内核配置:

如果使用自编译的内核,需要打开如下配置项:

Networking support ---> Networking options --->TCP/IP networking ---> IP: kernel level autoconfiguration
File systems ---> Network File Systems 
Networking support ---> Networking options --->TCP/IP networking
File systems ---> Networking File Systems ---> NFS client support(子级都选上)
File systems ---> Networking File Systems ---> Root file system on NFS

服务器配置

默认情况下,nfs 服务器上定义了某个共享目录,则该目录及其子目录下的所有文件都可被访问。

出于对安全的考虑,客户端任何需要 超级用户 (即 root 用户,uid=0 & gid=0)权限的文件操作都默认映射到 uid=65534 和 gid=65534 的用户,即 ubuntu 系统中的 nobody:nogroup。

例如客户端使用 root 权限在挂载的共享目录中创建文件时,该文件的 属主属组 自动变为 nobody:nogroup ,而非 root:root

1. 在服务器端创建共享目录

sudo mkdir -p /var/nfs/gernel 
sudo mkdir -p /var/nfs/public 
sudo chown nobody:nogroup /var/nfs/gernel

2. 修改 exports 文件

为了使 nfs 服务器定义的共享文件可被指定的客户端主机访问,需要在服务器端的 /etc/exports 文件中添加对应的记录,如果系统中默认没有这个文件,就创建一个

/var/nfs/gernel *(rw,insecure,sync,no_subtree_check)
/var/nfs/public *(ro,insecure,sync,no_subtree_check)

第一条纪录表示 子网 中的所有主机都可挂载 var/nfs/gernel 目录并拥有读写( rw )权限

第二条纪录表示 所有 主机都可挂载 /var/nfs/public 目录且拥有 只读ro )权限

insecure选项:允许通过任意端口的远程访问

sync选项:强制 nfs 服务器在响应请求之前将文件的改动写入磁盘(强调客户端和服务端文件内容的一致性,但会降低文件操作的效率)。

no_subtree_check选项:禁用 subtree_check 。subtree_check 用来设置服务器在收到请求时,检查该文件是否在指定目录结构中依旧可用(该选项会在某些情况下发生错误:重命名某文件的同时,该文件在客户端打开)。

启动NFS 服务

sudo systemctl stop nfs-kernel-server
sudo systemctl start nfs-kernel-server
sudo systemctl restart nfs-kernel-server

启动后,查看服务器状态:

sudo service nfs-server status

至此,服务器端配置完毕,接下来在客户端操作。

不重启服务,更新共享目录列表

sudo exportfs -arv

客户端查看服务端目录共享情况

客户端安装nfs-common工具后,可以通过showmount命令查看NFS Server端的共享目录,如下图所示:

sudo showmount -e 192.168.31.156

挂载

在客户端执行如下命令进行挂载:

sudo mount -t nfs 192.168.31.156:/var/nfs/gernel /mnt

nfs 的权限设定基于 linux 文件系统的权限管理,即客户端挂载远程共享目录后,会把它们当成本地磁盘目录一样对待,也是根据文件的属主(组)及其对应的权限设定来限制访问。

gernel 目录的属主(组)为 nobody:nogroup(65534:65534),所以虽然该目录为读写权限,非 root 用户无法执行新建操作。而 root 用户由于 nfs 默认的安全机制,会自动映射到 nobody:nogroup。

NFS Client端切换到ROOT对文件进行写入

NFS Server端看到了内容更新:

network connection

挂载NFS后无法读写的问题

在服务端设置目录权限:

$ sudo chmod a+rw /var/nfs/gernel
$ sudo chmod a+rw /var/nfs/public

在客户端挂载时加入 -o nocal不进行权限检查

sudo mount -t nfs -o noacl 192.168.31.156:/var/nfs/gernel /mnt

应用

在虚拟化应用场景中,可以将虚拟机镜像放到公共的集群可访问的NFS目录中,客户机挂载到本地后,通过透明的QEMU命令方式启动虚拟机,经过验证,这种方式在第一次启动虚拟机时会比较慢,第二次启动则会快很多,原因可能是首次启动收到远程磁盘读写和网络带宽的影响,而第二次启动则是受益于第一次启动产生的本地缓存,加速的启动进程。

参考资料

https://www.bbsmax.com/A/o75N9xgDJW/

【精选】NFS服务器_nfs服务器是什么-CSDN博客

NFS原理详解-CSDN博客

结束

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

papaofdoudou

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值