Skip to content

NFS Server

NFS 服务端搭建 ,如需挂载 挂载网络文件系统(NFS)

将主机目录通过NFS服务共享

RedHat官方文档# 配置 NFS 服务器

1. 安装 NFS 服务

首先,确保已经安装了 NFS 相关的软件包。如果你使用的是 Ubuntu 或 Debian 系统,可以使用以下命令安装:

sudo apt update && sudo apt install nfs-kernel-server

对于 Red Hat 系列的 Linux(如 CentOS 或 Fedora),使用以下命令:

sudo yum install nfs-utils

2. 创建导出目录

如果你已经准备好了目录,请忽略

所谓导出目录,相当于要共享的目录

你需要指定哪些目录可以通过 NFS 共享,首先创建一个共享目录。例如:

sudo mkdir -p /srv/nfs/share

3. 配置 /etc/exports

如果 /etc/exports 文件不存在,可以手动创建它。在文件中指定你想共享的目录和访问权限。例如,在 /etc/exports 文件中添加以下内容:

# 使用nano 编辑
sudo nano /etc/exports
# 参考如下配置写上自己本地路径

# 如果你只需要只读共享,可以直接使用下面的模板 
# 一般不需要考虑权限问题,但要求文件夹开放给其他用户可读
/home/user/test1/common    *(insecure,ro,sync,no_root_squash,no_subtree_check) # 其中ro 表示只读 如要读写 改为 rw

# 如果你需要完全的读写权限,同时多台机器上的UID 没有对齐,nfs 允许将匿名用户映射为特定的UID(这个UID 即可为文件所有者的UID)
# 这种映射 机制 使用 anonuid,anongid 两个参数控制,你可以通过 id 查看所有者的id ,
# 但是简单的做法,就是映射为0,这样就等价为主机的root用户拥有文件的全部权限(这也有潜在)
/home/user/test1/common   *(insecure,rw,sync,all_squash,no_subtree_check,anonuid=0,anongid=0)

/mnt/nvme3 192.168.3.0/24(insecure,rw,async,no_subtree_check,all_squash,anonuid=1102,anongid=1010)

4. 启动并启用 NFS 服务

编辑完 /etc/exports 文件后,重新加载 NFS 配置并启动服务:

sudo exportfs -ra && sudo systemctl restart nfs-kernel-server

1. 安装依赖

sudo apt update && sudo apt install nfs-kernel-server
# 查看支持nfs版本

sudo cat /proc/fs/nfsd/versions
# +3 +4 +4.1 +4.2
# 请确保 存在 4.x 版本

2. 配置 /etc/exports

查看主用户,或常用用户的id 和 组 id

使用id 命令, 一般来说二者均是1000

id

#如:uid=1000(user) gid=1000(user) 组=1000(user),24(cdrom),25(floppy),27(sudo),29(audio),30(dip),44(video),46(plugdev),100(users),106(netdev),111(bluetooth),113(lpadmin),116(scanner)

# 此时uid 和 gid 均为1000

把要分享的目录写入到 /etc/exports

sudo nano /etc/exports

参考如下:

# /etc/exports: the access control list for filesystems which may be exported
#               to NFS clients.  See exports(5).
#
# Example for NFSv2 and NFSv3:
# /srv/homes       hostname1(rw,sync,no_subtree_check) hostname2(ro,sync,no_subtree_check)
#
# Example for NFSv4:
# /srv/nfs4        gss/krb5i(rw,sync,fsid=0,crossmnt,no_subtree_check)
# /srv/nfs4/homes  gss/krb5i(rw,sync,no_subtree_check)

<要分享的目录>   192.168.3.0/24(insecure,rw,async,no_subtree_check,all_squash,anonuid=<填入uid>,anongid=<填入gid>)  

# 如:/mnt/ssd1 即要分享的目录, 一定要确保目录存在,并且开机能够自动挂载到对应位置
# /mnt/ssd1    192.168.3.0/24(insecure,rw,async,no_subtree_check,all_squash,anonuid=1112,anongid=1010)

如果需要共享多个目录可以使用 mount --bind ,将多个文件夹在挂载到同一个父目录中,并且要写入到 /etc/fstab 中,再写到 /etc/exports 中

可参考:https://docs.redhat.com/zh-cn/documentation/red_hat_enterprise_linux/5/html/global_file_system_2/s1-manage-pathnames#s1-manage-pathnames

3. 重启服务

sudo exportfs -ra && sudo systemctl restart nfs-kernel-server