Um espelho zfs pode conter discos combinados?

Um espelho zfs pode conter discos combinados?

Posso criar um único espelho zfs combinando discos?

mypool
    mirror1
        disk1 (2TB)
        disk2 (2TB)
        combined
            disk3 (1TB)
            disk4 (1TB)

Em outras palavras, disco3 e disco4 devem conter os mesmos dados que disco3+disco4 combinados.

Isso é possível? Ou algo semelhante é possível? Em caso afirmativo, quais são os comandos que me levam da minha configuração atual:

mypool
    mirror1
        disk1 (2TB)
        disk2 (2TB)

para a configuração acima?

Responder1

Desculpe, mas não, acho que você não pode.

Mas se você estiver interessado em experimentar, primeiro

FAÇA BACKUP DA SUA PISCINA!

Esta postagem é um exercício acadêmico desenvolvido para lhe dar ideias e não traz nenhuma garantia de que funcionará no mundo real, e você é explicitamente advertido contra incorrer em perda de dados causada por ações tomadas com base nessas sugestões.

Eu tenho certeza que isso zpoolirá alertá-lo contra a mistura de vdevs espelhados e raidz. Veja a -fbandeira de, zpool addpor exemplo. Seu vdev proposto combinedé essencialmente um " raidz-0" ou vdev concatenado, embora mirror1seja obviamente um espelho.

Com tudo isso dito,depois de fazer backup do seu pool,estude a página de manual atentamente e observe os -nsinalizadores em alguns comandos. Isso permitirá que você veja qual será o efeito de um comando sem realmente fazer nada em seu pool.

Mais evidências no caso contra sua soluçãocomo propostoé encontrado na zpoolpágina de manual:

Os dispositivos virtuais não podem ser aninhados, portanto, um dispositivo virtual espelhado ou raidz pode conter apenas arquivos ou discos. Espelhos de espelhos (ou outras combinações) não são permitidos.

No entanto, se você estiver no FreeBSD você pode usar gstripepara concatenar disk3e disk4criar o combineddispositivo. Você pode então adicionar esse dispositivo ao espelho, pois o ZFS o verá como apenas mais um disco.

Aqui está uma sugestão sobre como experimentar isso, supondo que você esteja executando o ZFS no FreeBSD. Usaremos drives simulados de 2GB em vez de TB, mas fora isso....

# mkdir zfs-test; cd zfs-test
# truncate -s 2G drive1; truncate -s 2G drive2
# truncate -s 1G drive3; truncate -s 1G drive4

Crie pseudo-dispositivos md1 a md4 correspondentes aos arquivos da unidade[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

Seu espelho existente é simples de criar:

# 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

É aqui que você está preso no momento. Com esta sandbox, agora você pode experimentar vários comandos usando zpoolo sinalizador ' -n, mas não acho que nada funcionará, exceto isto:

# 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

É provável que isso aconteça com você também, se suas unidades de 2 TB foremexatamentedobrar o tamanho das unidades de 1 TB. A ligeira perda de espaço na concatenação das duas unidades de 1 TB resulta em uma combinedunidade ligeiramente menor do que qualquer uma das duas unidades nativas de 2 TB. diskinfo(8)confirma isso md1e md2cada um tem 4194304 setores, mas stripe/combinedé 256 setores menor, com apenas 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

Mas na minha sandbox do jogo, posso resolver esse problema.

Primeiro, vou eliminar a combinedfaixa e seus componentes psuedo-devices /dev/md3 e /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

Agora posso recriar o disco3 e o disco4 para torná-los um pouco maiores que 1 GB, recriar os dispositivos /dev/md3 e md4, juntá-los para criar o dispositivo /dev/stripe/combined e anexar esse dispositivo ao espelho:

# 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

informação relacionada