段落1、需求描述
内网中的一些Linux主机,还有一些Docker容器,需要持续化的一些文件共享,这个场景,NFS是非常适合的,下面就来讲解一下,如何配置NFS服务器,为其他内网Linux/Docker容器,提供共享的文件存储分区
NFS 的优点是内核直接支持,部署简单、运行稳定,协议简单、传输效率高。
NFS 的缺点是没有加密授权等功能,仅依靠 IP 地址或主机名来决定用户能否挂载共享目录,对具体目录和文件无法进行 ACL 权限控制(NFSv4 以前)。通常的做法是通过 Kerberos 对 NFS 进行认证及加密,不过部署配置比较麻烦。
Windows对于NFS文件存储支持稍欠缺,缺UTF8编码,可能有文件名乱码问题。
段落2、安装 NFS Server
apt update apt install nfs-kernel-server
段落3、配置 NFS Server
/media/NFSData 是我这里模拟提供NFS存储的大容量磁盘的挂载点
/dev/sdb1 是我这里模拟提供NFS存储的大容量设备文件分区
相关Dasmz的其他博客
Ubuntu/Debian 的Linux环境,格式化超过2TB的磁盘 2022-4-24
mkdir -p /media/NFSData chown nobody:nogroup /media/NFSData chmod 777 /media/NFSData mount /dev/sdb1 /media/NFSData
修改基于IP可信的配置文件,我这里,对于整个内网的IP段虚拟机VM都放行这个NFS分区
修改配置文件
# 修改 /etc/exports 文件 /media/NFSData 10.11.11.0/24(rw,sync,no_subtree_check)
参数释义
ro: specifies that the directory may only be mounted as read only rw: grants both read and write permissions on the directory no_root_squash: is an extremely dangerous option that allows remote “root” users the same privilege as the “root” user of the host machine subtree_check: specifies that, in the case of a directory is exported instead of an entire filesystem, the host should verify the location of files and directories on the host filesystem no_subtree_check: specifies that the host should not check the location of the files being accessed withing the host filesystem sync: this just ensures that the host keeps any changes uploaded to the shared directory in sync async: ignores synchronization checks in favor of increased speed
修改完配置文件,重启服务即可
systemctl restart nfs-server systemctl enable nfs-server
NFS Server监听端口是 TCP/2049
RPC-Bind监听端口 TCP/111
段落4、配置客户端
apt update apt install nfs-common mkdir -p /media/NFS mount -t nfs4 10.11.11.200:/media/NFSData /media/NFS
段落5、设置开机启动的挂载
# 修改文件 /etc/fstab 10.11.11.200:/media/NFSData /media/NFS nfs4 defaults,user,exec 0 0
完成
段落6、排查问题,部分版本的,可能需要修改/etc/default/nfs-common
常见报错
mount.nfs: access denied by server while mounting
可能原因
6.1、安全组,防火墙,端口放行
6.2、检查配置文件
exportfs -rav
6.3、用户ID匹配,我这里不区分,即:
# 修改 /etc/default/nfs-common NEED_IDMAPD=no NEED_GSSD=no
6.4、客户端显示更多信息
客户端执行mount命令的时候,加上 -v 参数 mount -t nfs -vvvv 1.169.9.27:/media/remote_nfs /media/LNFS
附录1、安全
如果不放心未知的风险,可选用防火墙加固一下 111/ 2049 两个端口,如果是NFSv3,可能还需要增加防护端口 37305/40087/54045/55529
2023-02-23 更新文章
附录2、视频演示