为了让服务器更加节能,同时提升一些随机读写性能,希望将ZFS中2TB 3.5英寸的 机械硬盘更换成1TB的固态硬盘。直接用replace命令是不行的,只能曲线更换。
首先构造一个测试卷
hzy@hzy-VirtualBox:~$ fallocate -l 500M big-1
hzy@hzy-VirtualBox:~$ fallocate -l 500M big-2
hzy@hzy-VirtualBox:~$ sudo zpool create vault mirror ~/big-1 ~/big-2
hzy@hzy-VirtualBox:~$ zpool status
pool: vault
state: ONLINE
scan: none requested
config:
NAME STATE READ WRITE CKSUM
vault ONLINE 0 0 0
mirror-0 ONLINE 0 0 0
/home/hzy/big-1 ONLINE 0 0 0
/home/hzy/big-2 ONLINE 0 0 0
errors: No known data errors
hzy@hzy-VirtualBox:~$ sudo sh -c 'echo hello world > /vault/note'
hzy@hzy-VirtualBox:~$ cat /vault/note
hello world
hzy@hzy-VirtualBox:~$ zpool list
NAME SIZE ALLOC FREE CKPOINT EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT
vault 480M 114K 480M - - 0% 0% 1.00x ONLINE -
然后构造第二个vdev
hzy@hzy-VirtualBox:~$ fallocate -l 300M small-1
hzy@hzy-VirtualBox:~$ fallocate -l 300M small-2
hzy@hzy-VirtualBox:~$ sudo zpool add vault mirror ~/small-1 ~/small-2
hzy@hzy-VirtualBox:~$ zpool status
pool: vault
state: ONLINE
scan: none requested
config:
NAME STATE READ WRITE CKSUM
vault ONLINE 0 0 0
mirror-0 ONLINE 0 0 0
/home/hzy/big-1 ONLINE 0 0 0
/home/hzy/big-2 ONLINE 0 0 0
mirror-1 ONLINE 0 0 0
/home/hzy/small-1 ONLINE 0 0 0
/home/hzy/small-2 ONLINE 0 0 0
errors: No known data errors
hzy@hzy-VirtualBox:~$ zpool list
NAME SIZE ALLOC FREE CKPOINT EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT
vault 768M 132K 768M - - 0% 0% 1.00x ONLINE -
尝试删除第一个vdev
hzy@hzy-VirtualBox:~$ sudo zpool remove vault mirror-0
hzy@hzy-VirtualBox:~$ zpool status
pool: vault
state: ONLINE
scan: none requested
remove: Removal of vdev 0 copied 112K in 0h0m, completed on Tue Jan 18 15:17:54 2022
216 memory used for removed device mappings
config:
NAME STATE READ WRITE CKSUM
vault ONLINE 0 0 0
mirror-1 ONLINE 0 0 0
/home/hzy/small-1 ONLINE 0 0 0
/home/hzy/small-2 ONLINE 0 0 0
errors: No known data errors
hzy@hzy-VirtualBox:~$ zpool list
NAME SIZE ALLOC FREE CKPOINT EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT
vault 288M 194K 288M - - 0% 0% 1.00x ONLINE -
hzy@hzy-VirtualBox:~$ cat /vault/note
hello world
因此总的来说
POOL=vault
OLD_VDEV=mirror-0
NEW_DEVS="/dev/dummy1 /dev/dummy2"
zpool add $POOL mirror $NEW_DEVS
zpool remove $POOL $OLD_VDEV