我一直在做一些阅读,看起来ZFS 不喜欢从非冗余阵列中删除磁盘:
您可以使用该
zpool detach
命令从镜像存储池中分离设备。例如:Run Code Online (Sandbox Code Playgroud)# zpool detach zeepool c2t1d0
但是,如果没有其他有效的数据副本,则拒绝此操作。例如:
Run Code Online (Sandbox Code Playgroud)# zpool detach newpool c1t2d0 cannot detach c1t2d0: only applicable to mirror and replacing vdevs
基本问题是可以理解的:从数组中删除一段数据(无论是元数据还是有效载荷数据)的唯一副本会使该数据不可用。
替换 ZFS 存储池中设备的示例给出了如何替换存储池中设备的基本分步说明:使磁盘脱机、移除磁盘、插入替换磁盘、运行zpool replace
以通知 ZFS 更改并使磁盘联机。这显然要求阵列不依赖于被替换的磁盘,因此阵列必须具有冗余;如果它确实取决于所讨论的驱动器,则此方法会出现与上述相同的问题。
在非冗余ZFS 阵列中更换磁盘的推荐方法是什么?
假设现有磁盘工作正常,并假设替换磁盘至少与被替换磁盘的大小相同。(如果现有磁盘出现故障,显然唯一能做的就是添加一个新磁盘并从备份中恢复受磁盘故障影响的所有文件。)
Sté*_*las 11
zpool attach pool old-disk new-disk
Run Code Online (Sandbox Code Playgroud)
这会将旧磁盘转换为具有旧磁盘和新磁盘的镜像并开始重新同步,然后您可以分离旧磁盘。
zpool detach pool old-disk
Run Code Online (Sandbox Code Playgroud)
用循环设备测试:
# truncate -s 1G a b
# truncate -s 1200M c
# losetup /dev/loop0 a
# losetup /dev/loop1 b
# losetup /dev/loop2 c
# zpool create test loop{0,1}
# zpool attach test loop1 loop2
# zpool status
pool: test
state: ONLINE
scan: resilvered 62K in 0h0m with 0 errors on Wed Jul 31 13:43:19 2013
config:
NAME STATE READ WRITE CKSUM
test ONLINE 0 0 0
loop0 ONLINE 0 0 0
mirror-1 ONLINE 0 0 0
loop1 ONLINE 0 0 0
loop2 ONLINE 0 0 0
# zpool detach test loop1
# zpool status
pool: test
state: ONLINE
scan: resilvered 62K in 0h0m with 0 errors on Wed Jul 31 13:43:19 2013
config:
NAME STATE READ WRITE CKSUM
test ONLINE 0 0 0
loop0 ONLINE 0 0 0
loop2 ONLINE 0 0 0
Run Code Online (Sandbox Code Playgroud)
小智 5
不知道 13 中的情况是否有所不同,但“zfs replace”适用于非冗余池。您只需运行 1 命令而不是先分离。
d1 是 1G,d2 是 2G,都是 /tmp 中的空文件:
/t/test #> zpool create test /tmp/test/d1
/t/test #> zpool set autoexpand=on test
/t/test #> zpool status
pool: test
state: ONLINE
scan: none requested
config:
NAME STATE READ WRITE CKSUM
test ONLINE 0 0 0
/tmp/test/d1 ONLINE 0 0 0
errors: No known data errors
/t/test #> zpool list
NAME SIZE ALLOC FREE EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT
test 1008M 258K 1008M - 0% 0% 1.00x ONLINE -
/t/test #> zpool replace test /tmp/test/d1 /tmp/test/d2
/t/test #> zpool status
pool: test
state: ONLINE
scan: resilvered 61K in 0h0m with 0 errors on Sun Sep 18 18:55:32 2016
config:
NAME STATE READ WRITE CKSUM
test ONLINE 0 0 0
/tmp/test/d2 ONLINE 0 0 0
errors: No known data errors
/t/test #> zpool list
NAME SIZE ALLOC FREE EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT
test 1.98G 408K 1.98G - 0% 0% 1.00x ONLINE -
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
9682 次 |
最近记录: |