我有这个 zpool:
bash-3.2# zpool status dpool
pool: dpool
state: ONLINE
scan: none requested
config:
NAME STATE READ WRITE CKSUM
dpool ONLINE 0 0 0
c3t600601604F021A009E1F867A3E24E211d0 ONLINE 0 0 0
c3t600601604F021A00141D843A3F24E211d0 ONLINE 0 0 0
我想用一个(更大的)磁盘替换这两个磁盘。可以做到吗? zpool 附加允许我更换一个物理磁盘,但不允许我同时更换两个。
答案1
不,我认为按照您描述的方式这是不可能的。
你能但是,创建一个包含单个磁盘的新池,并使用简单的zfs 发送/接收过程。
答案2
您应该能够使用zpool attach
新的更大的驱动器,等待镜像完成,然后再zpool detach
使用旧驱动器。
编辑:我误读了你的问题,我很确定你是把它们当作镜像来运行的。
我同意最好的做法是创建一个新池并递归地将所有数据集发送到新池,但如果您真的不能这样做,那么您仍然可以按照我概述的步骤进行操作,前提是您将新的、更大的磁盘分区为两个分区,每个分区至少与它要替换的磁盘一样大。
我不建议这样做,主要是因为(1)管理变得更加复杂,并且(2)您将无法利用驱动器的写入缓存。
我将在此处粘贴在最近的 Illumos 盒子上执行的序列。请注意,我正在创建空文件来显示这一点,而不是使用整个磁盘和切片/分区,因为我无法在该盒子上处理物理设备。文件名为aa1
、aa2
和aa3
。
准备设备。
aa3
大小为 200M,而aa1
和aa2
只有 100M:# dd if=/dev/zero of=/opt/local/aa1 bs=1M count=100 # dd if=/dev/zero of=/opt/local/aa2 bs=1M count=100 # dd if=/dev/zero of=/opt/local/aa3 bs=1M count=200
创建我们的测试池:
# zpool create test mirror /opt/local/aa1 /opt/local/aa2
检查一切是否顺利:
# zpool list -v test NAME SIZE ALLOC FREE EXPANDSZ CAP DEDUP HEALTH ALTROOT test 95,5M 106K 95,4M - 0% 1.00x ONLINE - mirror 95,5M 106K 95,4M - /opt/local/aa1 - - - - /opt/local/aa2 - - - -
设置
autoexpand
属性:# zpool set autoexpand=on test
连接新设备:
# zpool attach test /opt/local/aa2 /opt/local/aa3
一切都还好吗?
# zpool list -v test NAME SIZE ALLOC FREE EXPANDSZ CAP DEDUP HEALTH ALTROOT test 95,5M 120K 95,4M - 0% 1.00x ONLINE - mirror 95,5M 120K 95,4M - /opt/local/aa1 - - - - /opt/local/aa2 - - - - /opt/local/aa3 - - - -
是的。
分离前两个开发人员:
# zpool detach test /opt/local/aa1 # zpool detach test /opt/local/aa2
最后,我们再检查一下池子:
# zpool list -v test
NAME SIZE ALLOC FREE EXPANDSZ CAP DEDUP HEALTH ALTROOT
test 196M 124K 195M - 0% 1.00x ONLINE -
/opt/local/aa3 196M 124K 195M -
它已正确增长至200MB。