Warum verwendet ZFS RAIDZ2 nur 2 GB Daten, wenn ich eine 1 GB-Datei erstelle?

Warum verwendet ZFS RAIDZ2 nur 2 GB Daten, wenn ich eine 1 GB-Datei erstelle?

Ich habe ein ZFS RAIDZ2/Raid 6-Dateisystem erstellt, das meiner Ansicht nach die Parität auf 2 Festplatten speichern wird.

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

Ich habe eine 1 GB große Datei

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

Ich dachte, die beiden Paritätsfestplatten würden bedeuten, dass ich die Datei selbst + zwei Paritätsfestplatten = insgesamt 3 GB Speicherplatz für eine 1-GB-Datei speichere, aber es sind nur 2 GB zugewiesen.

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  -

Antwort1

Mit zwei von vier Platten für Redundanz kann man die Benutzerdaten einfach verdoppeln: Zwei Platten speichern die Originaldaten und der gleiche Platz wird auf den beiden anderen Platten für Redundanzdaten verwendet. Die Parität wird zwar per Striping auf alle Platten verteilt, aber das ändert nichts am belegten Platz.

Mit der Anzahl der Festplatten könnten Sie RAID 1/Spiegelung mit derselben Platzeffizienz, aber besserer Durchsatzeffizienz (und geringerer Ausfallsicherheit, wie Romeo Ninov angemerkt hat) verwenden. RAID-Z2 oder RAID 6 werden mit mehr Festplatten effizienter: Bei insgesamt zehn Festplatten können acht effektiv für Daten verwendet werden und dennoch dienen nur zwei der Redundanz.

Antwort2

Die Situation ist (um den Eindruck zu vermitteln, sehr vereinfacht erklärt) folgende:

Angenommen, ZFS verwendet 512-MB-Blöcke. Sie speichern also auf Datenträger 1 512 MB (Teil 1 der Datei), auf Datenträger 2 die nächsten 512 MB, auf Parität 1 den nächsten 512-MB-Block (damit Sie die Datei beispielsweise nur mit Datenträger 1 und Parität 1 wiederherstellen können), auf Parität 2 weitere 512 MB, damit Sie die Datei mit Datenträger 1 und Parität 2 wiederherstellen können.

Um die gesamte Datei abzurufen, benötigen Sie Folgendes:

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

Wenn Sie beispielsweise 5 Festplatten (RAIDZ2) haben und einen Block von 333 MB haben, haben Sie solche Blöcke auf den Festplatten 1, 2, 3, Parität 1 und 2. Insgesamt 1666 MB

verwandte Informationen