我有一个由 2TB HDD 组成的单驱动器池。我有两个 1TB 驱动器可用于镜像 - 我想为我的池添加冗余。
我如何将这两个驱动器连接为单个设备,以便它们可以用作条带镜像?
假设我的 2TB 驱动器为sda
,空白 1TB 驱动器为sdb
和sdc
。
我试过了:zfs attach tank sda sdb sdc
但是那说明too many arguments
。
我试过了:zfs attach tank sda sdb
但是那意味着device is too small
我试过了:zfs attach tank sda sdb+sdc
但是那意味着no such device in /dev
我试过了:zfs attach tank sda sdb,sdc
但是那意味着no such device in /dev
我已经阅读了手册并搜索了网页——但我没有任何主意。
我想我可以尝试从这两个 1TB 驱动器创建一个新的条带池,在里面创建一个 zvol 并将其用作我的主池的镜像,但这可能无论如何都不会给我足够的镜像容量,而且还会带来很多不必要的开销。
我怎样才能做到这一点?
答案1
这不能直接通过 ZFS 完成。从手册页:
虚拟设备不能嵌套,因此镜像或 raidz 虚拟设备只能包含文件或磁盘。不允许使用镜像的镜像(或其他组合)。
我的建议是创建一个由两个 1 TB 磁盘组成的新池,并使用合子频繁地将第一个池的内容发送到新池。
--- 警告:以下是笨重的解决方法!如果不是非常确定,请勿使用!!!---
无论如何,如果你真的想要将两个 1 TB 磁盘添加为前 2 TB 磁盘的镜像,可以尝试一种解决方法。您可以使用设备映射器(以其 LVM 形式)连接两个磁盘并将生成的卷附加到 2 TB 设备。例如:
pvcreate /dev/sdb
pvcreate /dev/sdc
vgcreate zvg /dev/sdb
vgextend zvg /dev/sdc
lvcreate zvg --name zdev -l +100%FREE
zpool attach tank /dev/sda /dev/zvg/zdev
zpool status
您可以使用 mdadm 获得类似(甚至更好)的结果,创建 RAID0 设备并将其附加到 zpool:
mdadm --create md127 --level=0 --raid-devices=2 /dev/sdb /dev/sdc
zpool attach tank /dev/sda /dev/md127
zpool status
这种方法不是建议使用。使用时请自担风险。
答案2
要将两个新磁盘添加到池中,您可以使用zpool add tank mirror sdb sdc
,但这会将新对添加为镜像,并将其与现有磁盘进行条带化。(这不会添加任何冗余)。
您需要使用zpool attach
命令将磁盘附加到现有的 vdev,但不能使用镜像对来支持单个磁盘,而必须添加新的 2TB 磁盘使其成为镜像对。