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