我在 ZFS 镜像池上使用 root 身份运行 FreeBSD 9.1。
首先,该池(标记为zroot
)总共有 1TB,跨越两个 1TB 驱动器。
最近我们遇到了磁盘空间问题,池已分配 99%,剩余空间约 15G。/home
仅文件系统就占用了约 800G。
为了解决这个问题,我们添加了 2 个 1TB 驱动器。
我们希望保留这些驱动器的镜像。现在的问题是,我们应该如何将额外的 2 个 1TB 驱动器添加到池中?
我们是否应该将它们添加到现有
zroot
池中并进行分配。这似乎是个坏主意,因为原始池设计为作为根文件系统运行。我们是否应该创建一个具有一组镜像驱动器的新池,然后创建一个新的
/home2
并将高使用率用户转换到该分区?
对我们来说,ZFS 功能的范围尚不清楚。我们倾向于选项 (2),因为它不会在根镜像上添加不必要的依赖关系。但是,我们很感激任何有关采取什么行动的见解和想法。
谢谢。
答案1
我们是否应该将它们添加到现有的 zroot 池并分配它。这似乎是个坏主意,因为原始池被设计为作为根文件系统运行。
首先,zpools 和 zfs 文件系统是两个独立的概念(实际上你无法将它们分开,但在考虑它们的设置时应该这样做)。因此,池并非“设计为作为根文件系统运行”,zpool 上有一个文件系统配置为作为根文件系统运行。
由于此 zpool 保存根文件系统,因此它必须是非冗余的单个 vdev,或者必须是单个镜像。因此您不能只是添加更多驱动器。
我们是否应该创建一个具有镜像驱动器集的新池,然后创建一个新的 /home2 并将高使用率用户转换到该分区?
为每个用户创建 zfs 文件系统并将其安装到他们的主驱动器位置要容易得多。这消除了不规范/不标准的/home2
想法,并允许您在每个用户的主文件夹上设置配额、预留等。
当我设置 ZFS 服务器时,我要么使用两块或三块较小的磁盘作为启动 zpool(我有 100-320GB 的闲置磁盘,所以通常使用它们),要么从主存储驱动器上切出一块(大小大致相同,使用 GPT 分区)。驱动器的其余部分获得一个大分区,然后进入存储 zpool。
以下是我的家庭服务器设置的示例:
pool: tank0
state: ONLINE
scan: scrub repaired 0 in 1h39m with 0 errors on Sat Jun 8 07:59:40 2013
config:
NAME STATE READ WRITE CKSUM
tank ONLINE 0 0 0
mirror-0 ONLINE 0 0 0
gpt/tank0-d0 ONLINE 0 0 0
gpt/tank0-d1 ONLINE 0 0 0
errors: No known data errors
pool: tank1
state: ONLINE
scan: scrub repaired 0 in 3h11m with 0 errors on Mon Jun 1 08:57:39 2013
config:
NAME STATE READ WRITE CKSUM
tank1 ONLINE 0 0 0
raidz1-0 ONLINE 0 0 0
gpt/tank1-d0 ONLINE 0 0 0
gpt/tank1-d1 ONLINE 0 0 0
gpt/tank1-d2 ONLINE 0 0 0
gpt/tank1-d3 ONLINE 0 0 0
答案2
首先让我猜一下你当前的配置。你曾经zpool add
向池中添加过新驱动器吗?如果是的话,你的 zpool 应该如下所示:
zpool:
mirror:
disk1
disk2
disk3
disk4
在这种情况下,要镜像您的新驱动器,您应该执行以下操作:
zpool attach <pool-name> <disk3> <disk5>
zpool attach <pool-name> <disk4> <disk6>
这将为您提供一个由三个镜像、每个镜像两个驱动器组成的池。
我认为,对于此设置,使用 zraid2 或 zraid3 会更好,您将获得更快的池和更好的可靠性。在当前设置中,您可以丢失两个驱动器以关闭池。使用 zraid2,您也可能丢失两个驱动器,但您将获得 1TB 的额外空间。使用 zraid3,您可以安全地丢失三个驱动器。
您可以考虑的另一个选择是启用池中的压缩。不要为根文件系统启用压缩!