¿Puedo crear un único espejo zfs combinando discos?
mypool
mirror1
disk1 (2TB)
disk2 (2TB)
combined
disk3 (1TB)
disk4 (1TB)
En otras palabras, disk3 y disk4 deben contener los mismos datos que disk3+disk4 combinados.
es posible? ¿O es posible algo similar? Si es así, ¿cuáles son los comandos que me sacan de mi configuración actual?
mypool
mirror1
disk1 (2TB)
disk2 (2TB)
a la configuración anterior?
Respuesta1
Lo siento, pero no, no creo que puedas.
Pero si estás interesado en experimentar, primero
¡RESPALDA TU PISCINA!
Esta publicación es un ejercicio académico diseñado para brindarle ideas y no garantiza que funcione en el mundo real, y se le advierte explícitamente contra la pérdida de datos causada por las acciones que realice en función de estas sugerencias.
Estoy seguro de que eso zpool
le advertirá contra la mezcla de vdevs reflejados y raidz. Vea la -f
bandera de zpool add
, por ejemplo. Su vdev propuesto combined
es esencialmente un " raidz-0
" o vdev concatenado, mientras que mirror1
obviamente es un espejo.
Con todo lo dicho,después de haber hecho una copia de seguridad de su grupo,Estudie detenidamente la página de manual y observe las -n
banderas en algunos comandos. Eso le permitirá ver cuál será el efecto de un comando sin tener que hacer nada en su grupo.
Más pruebas en el caso contra su solucióncomo se propusose encuentra en la zpool
página de manual:
Los dispositivos virtuales no se pueden anidar, por lo que un dispositivo virtual mirror o raidz solo puede contener archivos o discos. No se permiten espejos de espejos (u otras combinaciones).
Sin embargo, si estás en FreeBSD puedes usarlo gstripe
para concatenar disk3
y disk4
crear el combined
dispositivo. Luego puede agregar ese dispositivo al espejo, ya que ZFS lo verá como un disco más.
Aquí hay una sugerencia sobre cómo experimentar con esto, suponiendo que esté ejecutando ZFS en FreeBSD. Usaremos unidades simuladas de 2 GB en lugar de TB, pero aparte de eso...
# mkdir zfs-test; cd zfs-test
# truncate -s 2G drive1; truncate -s 2G drive2
# truncate -s 1G drive3; truncate -s 1G drive4
Cree pseudodispositivos md1 a md4 correspondientes a los archivos de la unidad [1-4]:
# for N in $(jot 4); do mdconfig -u $N -t vnode -f drive$N; done
# mdconfig -lv
md1 vnode 2048M /home/jim/zfs-test/drive1
md2 vnode 2048M /home/jim/zfs-test/drive2
md3 vnode 1024M /home/jim/zfs-test/drive3
md4 vnode 1024M /home/jim/zfs-test/drive4
Su espejo existente es fácil de crear:
# zpool create mypool mirror md1 md2
# zpool status mypool
pool: mypool
state: ONLINE
scan: none requested
config:
NAME STATE READ WRITE CKSUM
mypool ONLINE 0 0 0
mirror-0 ONLINE 0 0 0
md1 ONLINE 0 0 0
md2 ONLINE 0 0 0
errors: No known data errors
Aquí es donde estás estancado actualmente. Con este sandbox, ahora puedes experimentar con varios comandos usando zpool
el -n
indicador, pero no creo que nada funcione, excepto esto:
# gstripe label -h combined md3 md4
# gstripe status
Name Status Components
stripe/combined UP md3
md4
# zpool attach mypool md2 stripe/combined
cannot attach stripe/combined to md2: device is too small
Es probable que esto también le suceda a usted si sus unidades de 2 TB sonexactamenteduplica el tamaño de las unidades de 1TB. La ligera pérdida de espacio al concatenar las dos unidades de 1 TB da como resultado una combined
unidad ligeramente más pequeña que cualquiera de las dos unidades nativas de 2 TB. diskinfo(8)
confirma que md1
y md2
cada uno tiene 4194304 sectores, pero stripe/combined
son 256 sectores más pequeños, con solo 4194048:
# diskinfo -v md1 md2 stripe/combined
md1
512 # sectorsize
2147483648 # mediasize in bytes (2.0G)
4194304 # mediasize in sectors
0 # stripesize
0 # stripeoffset
MD-DEV5473951480393710199-INO24 # Disk ident.
Yes # TRIM/UNMAP support
Unknown # Rotation rate in RPM
md2
512 # sectorsize
2147483648 # mediasize in bytes (2.0G)
4194304 # mediasize in sectors
0 # stripesize
0 # stripeoffset
MD-DEV5473951480393710199-INO24 # Disk ident.
Yes # TRIM/UNMAP support
Unknown # Rotation rate in RPM
stripe/combined
512 # sectorsize
2147352576 # mediasize in bytes (2.0G)
4194048 # mediasize in sectors
65536 # stripesize
0 # stripeoffset
No # TRIM/UNMAP support
Unknown # Rotation rate in RPM
Pero en mi zona de pruebas de juego, puedo solucionar ese problema.
Primero, eliminaré la combined
banda y sus psuedo-dispositivos componentes /dev/md3 y /dev/md4:
# gstripe destroy combined
# mdconfig -d -u3; mdconfig -d -u4
# mdconfig -lv
md1 vnode 2048M /home/jim/zfs-test/drive1
md2 vnode 2048M /home/jim/zfs-test/drive2
Ahora puedo volver a crear el disco 3 y el disco 4 para que cada uno tenga un tamaño ligeramente superior a 1 GB, volver a crear los dispositivos /dev/md3 y md4, agruparlos para crear el dispositivo /dev/stripe/combined y conectar ese dispositivo al espejo:
# truncate -s 1025M drive3
# truncate -s 1025M drive4
# mdconfig -u3 -t vnode -f drive3
# mdconfig -u4 -t vnode -f drive4
# gstripe label -h combined md3 md4
# zpool attach mypool md2 stripe/combined
# zpool status mypool
pool: mypool
state: ONLINE
scan: resilvered 81.5K in 0 days 00:00:04 with 0 errors on Thu May 23 15:27:26 2019
config:
NAME STATE READ WRITE CKSUM
mypool ONLINE 0 0 0
mirror-0 ONLINE 0 0 0
md1 ONLINE 0 0 0
md2 ONLINE 0 0 0
stripe/combined ONLINE 0 0 0
errors: No known data errors