我有一个更年长(2-3岁)的NAS运行FreeNAS。我想是时候升级一些硬盘了。以下是当前的状态:
NAME STATE READ WRITE CKSUM
Pool1 ONLINE 0 0 0
raidz1 ONLINE 0 0 0
ada3p2 ONLINE 0 0 0
ada4p2 ONLINE 0 0 0
ada5p2 ONLINE 0 0 0
mirror ONLINE 0 0 0
ada1p2 ONLINE 0 0 0
ada2p2 ONLINE 0 0 0 RaidZ1中的驱动器都是1GB的,并且将保持不变。
向RaidZ1添加2或3个1GB硬盘并完全删除镜像驱动器(仅为500 1GB)的最佳方法是:
池大约满了50%,所以我甚至不确定镜像驱动器上有数据。
如何检查或从哪里开始?
发布于 2014-07-02 00:38:22
唯一的方法是按照您的建议:将所有数据集复制到一个新的池中,并重新构建这个池。zfs不支持通过增加驱动器来扩展raidz1 1‘S,也不支持删除顶级的vdevs (这就是“镜像”)。
发布于 2021-10-13 22:18:48
最好的方法是..。更多..。驱动器到RaidZ1并完全删除镜像驱动器,.没有:
你不能。停下来。根据您的配置,如果不创建新的池并复制到镜像驱动器,您将无法删除镜像驱动器。特别是考虑到发布的时间,ZFS不支持从池中删除VDEV。对于最近遇到此问题的读者,在撰写本文时,zpool remove不支持从包含一个或多个raidz VDEV的池中删除VDEV。zpool remove确实支持删除连接磁盘或级联镜像。
您有一个与镜像vdev连接的raidz1 vdev的不寻常配置。您将无法从池中删除镜像vdev,除非创建一个新池,将数据从旧池复制到新池,然后销毁旧池。
但是,只要不更改vdev结构,当然可以扩展当前池的容量。
因此,您可以切换到更大的驱动器,而不是添加更多的驱动器。这是相对没有痛苦的,虽然它将需要几次迭代,将池银每个新驱动器,一次一个。但与传统的RAID相比,ZFS在重发方面效率更高,因此取决于您的池有多满,它可能不会那么糟糕。
关键是必须一次只执行一个磁盘。首先要确保您有一个完整的、经过测试的池备份。
下面是一个带有三个1G驱动器(设备/dev/md0到/dev/md2 )的测试沙箱,每个驱动器上都有一个GPT分区表:
# gpart show md{0..2}
=> 40 2097072 md0 GPT (1.0G)
40 200 1 linux-swap (100K)
240 2096872 2 freebsd-zfs (1.0G)
=> 40 2097072 md1 GPT (1.0G)
40 200 1 linux-swap (100K)
240 2096872 2 freebsd-zfs (1.0G)
=> 40 2097072 md2 GPT (1.0G)
40 200 1 linux-swap (100K)
240 2096872 2 freebsd-zfs (1.0G)在这些驱动器中,我构建了一个raidz1池:
# zpool create tank raidz1 /dev/md{0..2}p2
# zpool status tank; echo; zpool list tank
pool: tank
state: ONLINE
config:
NAME STATE READ WRITE CKSUM
tank ONLINE 0 0 0
raidz1-0 ONLINE 0 0 0
md0p2 ONLINE 0 0 0
md1p2 ONLINE 0 0 0
md2p2 ONLINE 0 0 0
errors: No known data errors
NAME SIZE ALLOC FREE CKPOINT EXPANDSZ FRAG CAP DEDUP HEALTH
tank 2.75G 196K 2.75G - - 0% 0% 1.00x ONLINE可爱的。现在,假设我有三个新驱动器,/dev/md3、md4和md5。但这些不是1G驱动器,而是10G驱动器。它们还使用GPT分区表进行设置,并准备就绪:
# gpart show md{3..5}
=> 40 20971440 md3 GPT (10G)
40 200 1 linux-swap (100K)
240 20971240 2 freebsd-zfs (10G)
=> 40 20971440 md4 GPT (10G)
40 200 1 linux-swap (100K)
240 20971240 2 freebsd-zfs (10G)
=> 40 20971440 md5 GPT (10G)
40 200 1 linux-swap (100K)
240 20971240 2 freebsd-zfs (10G)因为池是多余的,所以我可以小心地用一个更大的驱动器替换raidz1数组中的一个驱动器,然后等待池重新显示,然后移动替换下一个驱动器,每次一个。我将用很长的方法完成第一个,由offline-ing驱动,检查数组是否仍在运行,然后用大驱动器替换小驱动器:
# zpool offline tank md0p2
# zpool status tank
pool: tank
state: DEGRADED
status: One or more devices has been taken offline by the administrator.
Sufficient replicas exist for the pool to continue functioning in a
degraded state.
action: Online the device using 'zpool online' or replace the device with
'zpool replace'.
config:
NAME STATE READ WRITE CKSUM
tank DEGRADED 0 0 0
raidz1-0 DEGRADED 0 0 0
md0p2 OFFLINE 0 0 0
md1p2 ONLINE 0 0 0
md2p2 ONLINE 0 0 0
errors: No known data errors现在,我可以将1G /dev/md0p2分区替换为10G分区/dev/md3p2。实际上,上面的zpool offline步骤并不是绝对必要的。可以直接转到这个zpool replace命令:
# zpool replace tank md0p2 md3p2
# zpool status tank; echo; zpool list tank
pool: tank
state: ONLINE
scan: resilvered 128K in 00:00:02 with 0 errors on Wed Oct 13 13:46:23 2021
config:
NAME STATE READ WRITE CKSUM
tank ONLINE 0 0 0
raidz1-0 ONLINE 0 0 0
md3p2 ONLINE 0 0 0
md1p2 ONLINE 0 0 0
md2p2 ONLINE 0 0 0
errors: No known data errors
NAME SIZE ALLOC FREE CKPOINT EXPANDSZ FRAG CAP DEDUP HEALTH
tank 2.75G 265K 2.75G - - 0% 0% 1.00x ONLINE注意,重银器已完成。这是至关重要的。如果您在池中存储了大量数据,您将不得不等待,顺其自然地检查zpool status tank,直到刷新完成为止。
完成重新银之后,我们可以继续替换第二个磁盘:
# zpool replace tank md1p2 md4p2再说一次,我们必须等到zpool status说重新镀银结束:
# zpool status tank
pool: tank
state: ONLINE
scan: resilvered 134K in 00:00:03 with 0 errors on Wed Oct 13 13:54:17 2021
config:
NAME STATE READ WRITE CKSUM
tank ONLINE 0 0 0
raidz1-0 ONLINE 0 0 0
md3p2 ONLINE 0 0 0
md4p2 ONLINE 0 0 0
md2p2 ONLINE 0 0 0
errors: No known data errors现在重新银已经完成,我们将用更大的替换替换第三个小磁盘:
# zpool replace tank md2p2 md5p2
# zpool status tank; echo; zpool list tank
pool: tank
state: ONLINE
scan: resilvered 146K in 00:00:03 with 0 errors on Wed Oct 13 14:55:56 2021
config:
NAME STATE READ WRITE CKSUM
tank ONLINE 0 0 0
raidz1-0 ONLINE 0 0 0
md3p2 ONLINE 0 0 0
md4p2 ONLINE 0 0 0
md5p2 ONLINE 0 0 0
errors: No known data errors
NAME SIZE ALLOC FREE CKPOINT EXPANDSZ FRAG CAP DEDUP HEALTH
tank 2.75G 319K 2.75G - - 0% 0% 1.00x ONLINE因此,现在旧的小型磁盘md0、md1和md2不再存在于池中。池运行在较大的磁盘md3、md4和md5上。但是没有额外的空间,因为我们还没有告诉zpool扩展raidz1数组。这很容易做到:
# zpool online -e tank md5p2
# zpool status tank; echo; zpool list tank
pool: tank
state: ONLINE
scan: resilvered 146K in 00:00:03 with 0 errors on Wed Oct 13 14:55:56 2021
config:
NAME STATE READ WRITE CKSUM
tank ONLINE 0 0 0
raidz1-0 ONLINE 0 0 0
md3p2 ONLINE 0 0 0
md4p2 ONLINE 0 0 0
md5p2 ONLINE 0 0 0
errors: No known data errors
NAME SIZE ALLOC FREE CKPOINT EXPANDSZ FRAG CAP DEDUP HEALTH
tank 29.8G 394K 29.7G - - 0% 0% 1.00x ONLINE现在不是3G池,而是一个30G池,一次小心地更换一个磁盘,然后扩展数组。
发布于 2017-02-03 22:19:49
首先,在进行任何更改之前,您可能需要考虑启动一个zpool scrub以确保一切都是健康的。
离开内存(所以您需要确认),我相信您想要的选项是zpool add能够扩展现有的raidz池。
为了方便地移动数据,您可以使用zfs send\receive,以及使用快照进行增量send接收。
https://unix.stackexchange.com/questions/140180
复制相似问题