
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