Ich habe dies mit zdb -ddddd
[siehe http://www.cuddletech.com/blog/pivot/entry.php?id=980 ] getestet.
Ich habe zwei Dateien mit den Namen " disk1" und " disk2" erstellt , die 400 MB groß waren, und dann " disk3" und " disk4" bei 650 MB und ich habe einen zpool "tank" damit erstellt:
zpool create tank mirror disk1 disk2
zpool add mirror disk3 disk4
( Ich gehe davon aus, dass Sie früher zpool add mirror
die Datenträger in den Pool aufgenommen haben und nicht zpool attach
die Datenträger für einen vorhandenen Spiegel-VDEV verwendet haben. Letzteres ist eine allgemein schlechte Idee und erhöht die Kapazität sowieso nicht. Fügen Sie einfach ein weiteres Spiegel-Gerät hinzu. )
Als ich den Pool mit mkfile auf jeweils 100M füllte , überprüfte ich, zdb -ddddd tank <inode#>
auf welche vdevs geschrieben wurde, und zfs verteilte die Last zwischen den beiden; Von 400 Blockadressen wurden im Durchschnitt 300 bis 350 auf die kleineren "Festplatten" und 450 bis 500 auf die größeren geschrieben, selbst in der letzten Datei, die den Pool füllte.
Das bedeutet , dass ZFS werden die Blöcke ausgleichen es zwischen jedem schreibt vdev in einem Pool. (In diesem Fall zwischen jedem Ihrer 11 Spiegel). Wenn Sie einem vorhandenen Spiegel ein größeres Laufwerk mithilfe von zpool attach hinzufügen , kann ZFS diesen zusätzlichen Speicherplatz nicht nutzen, da auf jede Festplatte in einem Spiegel dieselben Blöcke geschrieben werden.
Es wird normalerweise empfohlen, dieselben Datenträger in einem Pool zu verwenden, dies ist jedoch anscheinend nicht erforderlich. Machen Sie sich jedoch nicht die Mühe, einem Pool mit langsameren Datenträgern ein schnelleres Laufwerk hinzuzufügen. In einem Pool ist Ihre langsamste Festplatte Ihr Engpass (obwohl das Hinzufügen eines SSD-Protokolls für die ZIL dieses Problem möglicherweise mildern kann).
Außerdem würde ich mir keine Sorgen um die Defragmentierung in ZFS machen, da es sich bei ZFS um ein Copy-on-Write- Dateisystem handelt, ist dies unvermeidlich. (Anstatt einen Block mit neuen Daten zu überschreiben, werden die neuen Daten in einen neuen Block geschrieben und anschließend Metadatenzeiger und Prüfsummen aktualisiert, um stattdessen den neuen Block zu verwenden.) Ich würde nicht erwarten, dass dies die Leistung beeinträchtigt.
Die Leistung wird durch eine Auslastung von 90% beeinträchtigt (stört beim Schreiben). Es wird empfohlen, die Auslastung für Spitzenleistungen bei oder unter 80% zu halten.
Was mich an etwas anderes denken lässt - Ihr Pool war bereits vorhanden, und dann haben Sie zwei neue Datenträger hinzugefügt -, werden die vorhandenen Daten NICHT über diese Datenträger verteilt, nicht bevor sie neu geschrieben wurden, sodass ich weniger Gesamtdaten erwarten würde auf den neuen Festplatten für einige Zeit.