Gibt es eine Möglichkeit, wie ZFS aufgefordert werden kann, ein bestimmtes Dateisystem über alle Festplatten in seinem Zpool zu verteilen?
Ich denke an ein Szenario, in dem ich ein ZFS-Volume mit fester Größe habe, das als LUN über FC exportiert wird. Der aktuelle zpool ist klein, nur zwei gespiegelte 1-TB-Festplatten, und der zvol beträgt insgesamt 750 GB. Wenn ich die Größe des Zpools plötzlich auf beispielsweise 12 1-TB-Festplatten erweitern würde, würde der Zvol meines Erachtens effektiv nur auf den ersten beiden Spindeln "untergebracht".
Mit welcher Methode könnte ich angesichts der Tatsache, dass mehr Spindeln = mehr IOPS das zvol auf alle 12 Spindeln umverteilen, um sie zu nutzen?
zfs send | zfs recv
Es gibt keinen Grund dafür, dass zvol nur auf den ersten Geräten gespeichert wird. Wenn Sie den Pool vergrößern, erstreckt sich ZFS über die aktualisierten Daten aller verfügbaren zugrunde liegenden Geräte. Es gibt keine feste Partitionierung mit ZFS.
quelle
Dies ist eine "Fortsetzung" der Antwort von ewwhite:
Ich habe ein PHP-Skript ( verfügbar auf github ) geschrieben, um dies auf meinem Ubuntu 14.04-Host zu automatisieren.
Sie müssen lediglich das PHP-CLI-Tool mit installieren
sudo apt-get install php5-cli
und das Skript ausführen, wobei Sie als erstes Argument den Pfad zu Ihren Pool-Daten übergeben. Z.Bphp main.php /path/to/my/files
Idealerweise sollten Sie das Skript zweimal für alle Daten im Pool ausführen. Beim ersten Durchlauf wird die Laufwerksauslastung ausgeglichen, aber die einzelnen Dateien werden den zuletzt hinzugefügten Laufwerken übermäßig zugewiesen. Der zweite Durchlauf stellt sicher, dass jede Datei "fair" über die Laufwerke verteilt ist. Ich sage ziemlich statt gleichmäßig, weil es nur gleichmäßig verteilt wird, wenn Sie Laufwerkskapazitäten nicht mischen, wie ich es bei meinem RAID 10 mit Paaren unterschiedlicher Größe (4 TB Spiegel + 3 TB Spiegel + 3 TB Spiegel) bin.
Gründe für die Verwendung eines Skripts
Wie kann ich feststellen, ob eine gleichmäßige Laufwerksauslastung erreicht wird?
Verwenden Sie das iostat-Tool über einen längeren Zeitraum (z. B.
iostat -m 5
) und überprüfen Sie die Schreibvorgänge. Wenn sie gleich sind, haben Sie eine gleichmäßige Verteilung erreicht. Sie sind nicht perfekt, auch in dem Screenshot unten, weil ich ein Paar 4 TB mit 2 Paaren 3 TB-Laufwerken in RAID 10 laufen lasse, so dass die beiden 4en auf etwas mehr geschrieben werden.Wenn Ihre Laufwerksauslastung "unsymmetrisch" ist, zeigt iostat in etwa den folgenden Screenshot an, in den die neuen Laufwerke überproportional geschrieben werden. Sie können auch feststellen, dass es sich um die neuen Laufwerke handelt, da die Lesevorgänge auf 0 stehen, da sie keine Daten enthalten.
Das Skript ist nicht perfekt, nur eine Problemumgehung, aber es funktioniert in der Zwischenzeit, bis ZFS eines Tages eine Neuausgleichsfunktion implementiert, wie sie BTRFS hat (Daumen drücken).
quelle
Nun, das ist ein kleiner Hack, aber da Sie die Maschine mit zvol angehalten haben, können Sie zfs das Dateisystem an eine lokale Datei auf localhost mit dem Namen bar.zvol senden und dann das Dateisystem erneut zurückerhalten. Das sollte die Daten für Sie wieder ins Gleichgewicht bringen.
quelle
Die beste Lösung, die ich gefunden habe, war, die Hälfte Ihrer Daten im erweiterten Pool zu duplizieren und dann die ursprünglichen duplizierten Daten zu löschen.
quelle