如何将 ZFS 池移动到子池?

如何将 ZFS 池移动到子池?

我使用以下命令在 zfs 中创建了一个池:

zpool create data001 mirror /dev/sda /dev/sdb

但事后看来我想创造

zpool create data/001 mirror /dev/sda /dev/sdb

我发现所有重命名/移动选项都不起作用,因为“数据”不存在,但我无法创建“数据”,因为创建没有设备的池似乎没有意义。

答案1

我很确定您的意思是第一个“zpool create”而不是“zfs create”。所以这是你应该做的:

# zpool create data mirror /dev/sda /dev/sdb
# zfs create data/001

第一个命令将获取“数据”池以及 /data 文件系统,第二个命令将创建 /data/001 文件系统。

答案2

zpool create data mirror /dev/sda /dev/sdb

zfs create data/001

这是我应该运行的命令集,还是仍然可以在保留数据的同时运行的命令集?第一行看起来会在现有池的顶部创建一个新池。

这是你应该做的。现在执行此操作只会告诉您,在不破坏旧池或从中删除磁盘的情况下,不可能将已经属于池一部分的磁盘用于新池(除了最后一个,如果使用 raidz 而不是则不可能)镜子)。如果您没有备份策略,那么考虑一下您的备份策略也可能是一个好主意。


我是 zfs 的新手,发现 zfs 和 zpool 之间的功能划分似乎是任意的,可能是因为对技术的一些误解

甲骨文有一个详细指南以及如何使用池和文件系统,还有一些浓缩的最佳实践。从广义上概括起来,有三层:

  1. 您可以从具有某种冗余功能(基本、镜像或 raidz)的普通设备(通常是磁盘,也可以是文件或分区)构建虚拟设备 (vdev)。
  2. 您可以从多个 vdev 构建存储池 (zpool),这些存储池始终是条带化(串联)的,并为您提供这些 vdev 的总大小作为连续存储。
  3. 您可以在这些池中创建文件系统或 zvol。文件系统可以相互嵌套。理论上,池本身也是可写的,但建议不要这样做,因为更容易管理/属性继承。

我个人对这些层的建议:

  1. 为每个 vdev 使用相同大小、速度和质量的磁盘。更喜欢镜像,因为它们比 raidz 更灵活、更快。避免使用基本的 vdev,因为如果出现故障,它们可能会杀死整个池。
  2. 为类似的 vdev 创建存储池,例如,一个包含 SSD vdev(镜像)的池用于 VM 存储,另一个池包含 HDD vdev (raidz2),用于速度较慢但容量更大的备份存储。将它们组合起来会使池像 HDD 一样慢,并且像所有数据的单个镜像一样危险,因此这不是一个好主意。
  3. 创建任意数量的文件系统,并使用继承来轻松管理它们(SMB 或 NFS 共享等属性可以像配额或常规 ACL 设置一样继承)。您的设计取决于您的组织和结构,但常见规则是“每个用户主目录一个文件系统”和“每个独立网络共享一个文件系统”。如果内部内容本质上是关于同一主题的,但移动很频繁,请避免拆分文件系统,因为文件系统间移动始终是一个完整且成本高昂的操作,即使在同一个池上也是如此。仅当导出块存储或使用 KVM 时才需要 zvol,因此从简单开始(文件系统也可以用作块存储)。
  4. 像平常一样使用文件系统内的目录(设置 ACL、隔离数据等)。

相关内容