¿Por qué ZFS RAIDZ2 solo usa 2 GB de datos cuando creo un archivo de 1 GB?

¿Por qué ZFS RAIDZ2 solo usa 2 GB de datos cuando creo un archivo de 1 GB?

He creado un sistema de archivos ZFS RAIDZ2/Raid 6, que, según creo, almacenará la paridad en 2 discos.

root@zfs-demo:/data# zpool status
  pool: data
 state: ONLINE
config:

        NAME        STATE     READ WRITE CKSUM
        data        ONLINE       0     0     0
          raidz2-0  ONLINE       0     0     0
            sdb     ONLINE       0     0     0
            sdc     ONLINE       0     0     0
            sdd     ONLINE       0     0     0
            sde     ONLINE       0     0     0

errors: No known data errors

tengo un archivo de 1GB

root@zfs-demo:/data# ls -alh
total 1023M
drwxr-xr-x  2 root root    3 Dec 17 18:22 .
drwxr-xr-x 19 root root 4.0K Dec 17 18:10 ..
-rw-r--r--  1 root root 1.0G Dec 17 18:22 1GB.bin

Pensé que los dos discos de paridad significarían que estaba almacenando el archivo en sí + paridad de dos lotes = 3 GB de almacenamiento en total para un archivo de 1 GB, pero solo se asignan 2 GB.

root@zfs-demo:/data# zpool list
NAME   SIZE  ALLOC   FREE  CKPOINT  EXPANDSZ   FRAG    CAP  DEDUP    HEALTH  ALTROOT
data  39.5G  2.01G  37.5G        -         -     0%     5%  1.00x    ONLINE  -

Respuesta1

Con dos de los cuatro discos para redundancia, simplemente puede duplicar los datos del usuario: dos discos almacenan los datos originales y el mismo espacio se utiliza para los datos de redundancia en los otros dos discos. En realidad, la paridad se distribuye entre todos los discos mediante segmentación, pero eso no cambia el espacio que se ocupa.

Con la cantidad de discos, podría usar RAID 1/duplicación con la misma eficiencia de espacio pero mejor eficiencia de rendimiento (y menos resiliencia, como comentó Romeo Ninov). RAID-Z2 o RAID 6 se vuelven más eficientes con más discos: con un total de diez discos, ocho pueden usarse efectivamente para datos y aún así solo dos son para redundancia.

Respuesta2

La situación es (explicada para hacernos una idea, muy simplificada) esta:

Supongamos que ZFS usa bloques de 512 MB. Entonces, almacena en el disco 1 512 MB (primera parte del archivo), en el disco 2 almacena los siguientes 512 MB, en la paridad 1 almacena el siguiente bloque de 512 MB (para que pueda restaurar el archivo solo con el disco 1 y la paridad 1, por ejemplo), en la paridad 2 almacena otros 512 MB para poder restaurar el archivo con el disco 1 y la paridad 2.

Esto es lo que necesita para estar en funcionamiento para obtener el archivo completo:

  • d1+d2
  • d1+p1
  • d1+p2
  • d2+p1
  • d2+p2
  • p1+p2

Si, por ejemplo, tiene 5 discos (RAIDZ2) y tiene un bloque de 333 MB, tendrá dichos bloques en el disco 1, 2, 3, paridad 1 y 2. En total 1666 MB.

información relacionada