我有一台带有两组磁盘的台式机 - 小型 SSD 适合我需要快速的东西,大型 HDD 适合我需要大的东西。
我已将小型 SSD 设置到名为“rpool”的池中,并成功按照说明将其用作 Ubuntu 的根文件系统 - 它甚至从它启动。 https://github.com/zfsonlinux/zfs/wiki/Ubuntu-16.04-Root-on-ZFS
ZFS 不允许我创建根目录为 的第二个池(HDD 的“hpool”)/
。为了解决这个问题,我使用了/hdd
hpool 的根目录。
这意味着我的所有硬盘数据集都安装在 下/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 管理您的数据所在的磁盘,要么不这样做。