¿Puede un espejo zfs contener discos combinados?

¿Puede un espejo zfs contener discos combinados?

¿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 zpoolle advertirá contra la mezcla de vdevs reflejados y raidz. Vea la -fbandera de zpool add, por ejemplo. Su vdev propuesto combinedes esencialmente un " raidz-0" o vdev concatenado, mientras que mirror1obviamente 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 -nbanderas 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 zpoolpá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 gstripepara concatenar disk3y disk4crear el combineddispositivo. 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 zpoolel -nindicador, 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 combinedunidad ligeramente más pequeña que cualquiera de las dos unidades nativas de 2 TB. diskinfo(8)confirma que md1y md2cada uno tiene 4194304 sectores, pero stripe/combinedson 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 combinedbanda 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

información relacionada