ZFS - 两个池,一个根。

ZFS - 两个池,一个根。

我有一台带有两组磁盘的台式机 - 小型 SSD 适合我需要快速的东西,大型 HDD 适合我需要大的东西。

我已将小型 SSD 设置到名为“rpool”的池中,并成功按照说明将其用作 Ubuntu 的根文件系统 - 它甚至从它启动。 https://github.com/zfsonlinux/zfs/wiki/Ubuntu-16.04-Root-on-ZFS

ZFS 不允许我创建根目录为 的第二个池(HDD 的“hpool”)/。为了解决这个问题,我使用了/hddhpool 的根目录。

这意味着我的所有硬盘数据集都安装在 下/hdd,而不是/我希望它们安装的位置 - 例如 /hdd/tmp 而不是 /tmp。

我怎样才能解决这个问题? (除了一堆乱七八糟的符号链接。)

答案1

创建新池时,您可以使用该-R选项指定备用根。添加ZFS 选项-O canmount=off是为了防止首先安装该池,并防止在新池中创建子文件系统时出现以下错误消息:

zfs create tpool/tst
cannot mount 'tpool' on '/': directory is not empty
cannot mount 'tpool/tst' on '/tst': failure mounting parent dataset

创建第二个池如下:

zpool create -N -R / -O canmount=off tpool device

当您使用以下命令在新池中创建文件系统时:

zfs create tpool/tst

它将显示为:

NAME                                USED  AVAIL  REFER  MOUNTPOINT
rpool                              15.7G  15.3G    34K  /rpool
.
tpool                               146K   984M    31K  /
tpool/tst                            31K   984M    31K  /tst

ls -l /tst/
total 0

答案2

回答“我该如何解决这个问题?”的问题:

所有数据集都有一个 mountpoint 属性。您可以将其设置为您喜欢的任何目录。就您而言,/hdd如果您未设置它,则只是默认值。例如:

zfs set mountpoint=/foo hdd/foo

到目前为止,其他一些回复提出了很好的观点,但回答了未提出的问题“我应该做什么来避免这种情况发生?”

答案3

/hdd在您的配置中选择它是因为这是已安装池的基本安装点,并且 ZFS 使用继承来传播某些属性。

您可以通过设置其 mountpoint 属性将每个 ZFS 数据集安装到您想要的位置。

zfs set mointpoint=/tmp pool2/tmp

请注意, 的子数据集pool2/tmp将继承父连接点,除非您对每个数据集进行更正。

重新挂载系统目录时也要小心。在这里,很难从容易犯的错误中恢复过来。

答案4

你这样做是错的。

ZFS 确实支持在单个池中混合旋转和硅存储,但方式与您尝试的方式不同。 ZFS 不想手动管理数据的去向,而是希望通过其ZIL 和 L2ARC 缓存

以这种方式设置,ZFS 将根据您的使用模式找出需要的内容。

如果您必须手动管理什么东西去哪里,我建议简单地创建三个池:每个用于 SSD,一个镜像或RAID-Z对于硬盘驱动器。使用一个 SSD 池作为根文件系统,使用一个 SSD/home池作为大容量数据,使用慢速 HDD 池。试图将所有内容压缩为一件事,但仍保持手动管理是混合概念。您要么希望 ZFS 管理您的数据所在的磁盘,要么不这样做。

相关内容