DIY NAS系列09 — ZFS 配置 NFS 共享

ZFS (Zettabyte File System) 是一种高级的文件系统,它提供了许多有用的特性,包括数据保护、压缩、快照和复制等。ZFS 还支持 NFS (网络文件系统),这使得 ZFS 文件系统可以在网络上共享,让其他设备或系统可以访问和使用这些文件。

ZFS NFS 功能简介

ZFS 的 NFS 共享功能允许您在网络上共享 ZFS 文件系统或数据集。这样,其他设备或系统可以通过网络远程访问和使用这些文件和数据。这种共享可以是只读的,也可以是可读写的,具体取决于您的配置。

使用 ZFS 的 NFS 功能,您可以轻松地在多个系统之间共享数据,而不需要复制或移动数据。这是一种高效的数据共享方式,特别是对于大量数据或需要在多个系统之间实时共享数据的情况。

ZFS NFS 共享的配置非常灵活。您可以配置哪些系统或网络可以访问共享的文件系统,以及它们的访问权限等。ZFS 还提供了一些高级的 NFS 特性,例如安全性增强的 NFSv4 和自动共享功能。

ZFS NFS 共享也能和 ZFS 的其他特性一起使用。例如,您可以为共享的文件系统创建快照,从而在数据被修改或删除后能够恢复。您还可以使用 ZFS 的数据保护和冗余特性,来保护共享的数据不被硬件故障影响。

下面将详细介绍如何设置和管理 ZFS NFS 共享。

NFS 与 ZFS 权限控制

NFS 和 ZFS 权限系统有两个不同层次的控制,它们都需要得到满足才能进行文件操作。

  1. NFS 访问控制[email protected]/16 此选项指定对 172.16.0.0/16 网段主机共享有读写访问。这个选项控制了哪些主机可以访问 NFS 共享,以及它们可以进行什么操作。如果一个主机不在允许的网段内,或者 sharenfs 选项只给予了读取(ro)权限,那么该主机将无法对共享进行写入。
  2. 文件系统权限:即使 NFS 允许某个主机写入共享,访问登录账号也需要在文件系统级别拥有写入权限。这个权限由文件或目录的所有者、组和其他用户的读/写/执行权限决定,通常通过 chmodchown 命令管理。例如,如果一个目录的权限被设置为 755,那么只有所有者才能写入这个目录,而组用户和其他用户只能读取和执行。为了让所有用户都能写入目录,您需要将其权限设置为777。

这两个层次的权限控制提供了灵活性,但也增加了复杂性。例如,我们可以允许所有主机访问 NFS 共享,但只允许某些用户写入,或者可以只允许某些主机访问共享,但允许所有用户写入。可以根据自身的安全需求和使用场景来配置这两个层次的权限。

此外,ZFS 还提供了一些其他的权限管理特性,例如 ACLs(Access Control Lists,访问控制列表)。ACLs 提供了比基本的文件系统权限更细粒度的权限控制,允许对单个用户或组设置特定的权限。然而,使用 ACLs 可能会增加配置的复杂性,需要根据具体需求来决定是否使用。

ZFS NFS 安装与配置

# 安装 NFS 服务
[root@localhost /]# dnf install nfs-utils -y

# 启动并设置开机自启动
[root@localhost /]# systemctl enable --now nfs-server.service

# 允许所有用户增、删、改
[root@localhost /]# zfs set sharenfs=on SSD
[root@localhost /]# zfs get sharenfs
NAME              PROPERTY  VALUE     SOURCE
SSD               sharenfs  on        local
SSD@snap20230615  sharenfs  -         -

# 允许172.16.0.0/16用户能够读写SSD NFS
[root@localhost /]# zfs set [email protected]/16 SSD

# 查看 NFS 共享
[root@localhost /]# zfs get sharenfs
NAME              PROPERTY  VALUE              SOURCE
SSD               sharenfs  [email protected]/16  local
SSD@snap20230615  sharenfs  -                  -

# 修改配置后,需要重启服务
[root@localhost /]# systemctl restart nfs-server

# 查看挂载点信息
[root@localhost /]# showmount -e
Export list for localhost.localdomain:
/SSD 172.16.0.0/16

# 查看是否支持NFSv3 和 NFSv4,这是可以看到同时支持v3和v4
[root@localhost /]# rpcinfo -p localhost | grep nfs
    100003    3   tcp   2049  nfs
    100003    4   tcp   2049  nfs
    100227    3   tcp   2049  nfs_acl

# 创建挂载点
[root@localhost /]# mkdir /NFS

# 挂载对应文件系统,系统默认使用NFSv4协议
[root@localhost /]# mount -t nfs 172.16.0.1:/SSD /NFS
[root@localhost /]# mount -l | grep NFS
172.16.0.1:/SSD on /NFS type nfs4 (rw,relatime,vers=4.2,rsize=1048576,wsize=1048576,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,clientaddr=172.16.0.1,local_lock=none,addr=172.16.0.1)

# 创建目录失败,这是因为没有文件系统权限
[root@localhost /]# mkdir /NFS/789
mkdir: cannot create directory ‘/NFS/789’: Permission denied

# 设置权限
[root@localhost /]# chmod -R 777 /SSD

# 再创建目录
[root@localhost /]# mkdir /NFS/789
[root@localhost /]# ls -l /NFS
total 2
-rw-r--r-- 1 nobody nobody 0 Jun 16 10:06 1.txt
drwxrwxrwx 2 root   root   2 Jun 15 21:46 123
drwxr-xr-x 2 nobody nobody 2 Jun 16 10:40 789

# 指定使用 NFSv3
[root@localhost /]# mount -t nfs -o vers=3 172.16.0.1:/SSD /NFS
[root@localhost /]# mount -l | grep NFS
172.16.0.1:/SSD on /NFS type nfs (rw,relatime,vers=3,rsize=1048576,wsize=1048576,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,mountaddr=172.16.0.1,mountvers=3,mountport=20048,mountproto=udp,local_lock=none,addr=172.16.0.1)

# NFS 客户端配置
dnf install nfs-utils -y
systemctl enable --now nfs-client.target
mount -t nfs -o vers=4 172.16.0.1:/SSD /NFS

写在最后

至此,我们对 ZFS NFS 配置讲解就告一段落。希望这篇文章能帮助您了解并掌握如何通过 ZFS 实现 NFS 共享,以及如何配置和管理这些共享的权限。在操作中,我们要注意的是两个层次的权限控制:NFS 访问控制和文件系统权限。它们共同决定了谁可以访问共享,以及可以执行什么样的操作。通过恰当地配置这两个层次的权限,我们可以实现既灵活又安全的数据共享。

在未来的学习和实践中,如果遇到任何困难或疑问,都欢迎您回顾这篇文章或进行进一步的查询和研究。每个人在学习和使用新技术的过程中,都可能会遇到挑战。但请记住,每一次克服困难,都是您技能提升的机会。

在接下来的文章中,我们将转向另一个重要的主题:ZFS SMB 共享。这是一个同样重要的功能,它允许您在 Windows 环境中共享 ZFS 文件系统。我们期待您在学习这个新主题的过程中,能继续发现和学习新的知识和技能。再次感谢您的阅读,我们在下一篇文章中见!

下篇预告: DIY NAS系列10 -- ZFS 配置 SMB 共享

Avatar photo

关于 木子

Founder of the Rocky Linux Chinese community, MVP、VMware vExpert、TVP, advocate for cloud native technologies, with over ten years of experience in site reliability engineering (SRE) and the DevOps field. Passionate about Cloud Computing、Microservices、CI&CD、DevOps、Kubernetes, currently dedicated to promoting and implementing Rocky Linux in Chinese-speaking regions.
用一杯咖啡支持我们,每一篇 [文档] 都经过我们实操,并非从网上一味的copy,期间花费了大量的心思,希望能够帮忙到您。
暂无评论

发送评论 编辑评论


|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇