Ein Vorschlag für einen redundanten heterogenen ZFS-, LVM- oder MD-Speicher

10

Ich habe das gleiche Problem, das die meisten Menschen haben: Wie man eine zuverlässige persönliche Speicherlösung mit der Tatsache erstellt, dass:

  1. Festplatten fallen mit alarmierender Regelmäßigkeit aus. Der Verlust von Dateien ist nicht akzeptabel.
  2. Ich werde von Zeit zu Zeit eine neue Festplatte kaufen. Der beste Preis / GB ist zwangsläufig eine andere Größe als der letzte Festplattenkauf.
  3. 2 bedeutet, dass ich im Laufe der Zeit eine heterogene Sammlung von Festplatten habe. Ich möchte sie alle verwenden, und ausgefallene Festplatten werden im Allgemeinen durch größere Festplatten ersetzt.

  4. Datenintegrität und Zuverlässigkeit sind mir wichtiger als Geschwindigkeit.

Nachdem ich einige Tage lang (und jahrelang im Hinterkopf) mit dem Kopf gegen dieses Problem geschlagen habe, schlage ich die folgende Lösung vor. Ich werde eine Lösung beschreiben, die ich basierend auf nativem Linux-ZFS getestet habe, das in einem Ubuntu-PPA verfügbar ist , aber LVM, MD und btrfs können verwendet werden, um dasselbe zu erreichen. Dafür werde ich RAID1 (ZFS Mirror Vdevs) verwenden.

  1. Gruppieren Sie Ihre Laufwerke in zwei Festplattensätze, sodass die Kapazität jedes Satzes so nahe wie möglich am anderen liegt.
  2. Partitionieren Sie die größeren Festplatten so, dass eine Partition in der anderen Gruppe genau so groß ist wie eine der kleineren Festplatten.
  3. Erstellen Sie Spiegel-vdevs so, dass jeder Datenträger seinen Spiegel auf einem anderen Datenträger hat.

Stellen Sie sich beispielsweise einen Festplattensatz eines neuen 2-TB-Laufwerks, eines älteren 750-GB-Laufwerks, zweier älterer 400-GB-Laufwerke und eines älteren 500-GB-Laufwerks vor. Die optimale gespiegelte Partitionierung verfügt über 2 TB nutzbaren Speicherplatz und wird in der folgenden Abbildung beschrieben, in der ':' Partitionen und '|' trennt. trennt Festplatten:

+------------------------------------------------------------------+
| 2TB (sda1)        : (sda2)       : (sda3)       : (sda4)         |
+------------------------------------------------------------------+--+
| 750 GB (sdb)      | 400 GB (sdc) | 400 GB (sdd) | 500 GB (sde1)  :XX|
+---------------------------------------------------------------------+

Erstellen Sie Ihren Zpool als

zpool create archive mirror /dev/sda1 /dev/sdb mirror /dev/sda2 /dev/sdc mirror /dev/sda3 /dev/sdd mirror /dev/sda4 /dev/sde1

Dadurch werden 4 gespiegelte vdevs erstellt. Wenn eine der Festplatten ausgefallen ist, kann sie ersetzt (durch eine Festplatte beliebiger Größe) und partitioniert werden, um die fehlenden Partitionen neu zu erstellen. Es ist wichtig, dass ZFS-vdevs einem Pool hinzugefügt, aber nicht entfernt werden können . Wenn es also möglich ist, wenn Sie ein neues Laufwerk kaufen, möchten Sie die vorhandenen vdevs neu anordnen. Angenommen, der nächste Kauf war ein 3-TB-Laufwerk. Ihre optimale Konfiguration ist mit 3,5 TB verwendbar, wie in der folgenden Abbildung beschrieben. Dies sind jetzt 5 vdev-Paare. Dies kann durch geeignete Partitionierung und sukzessives Versagen und erneutes Partitionieren der Laufwerke erreicht werden.

+--------------------------------------------------------------+-------------+
| 3 TB (sdf1)       : (sdf2)      : (sdf3)      : (sdf4)       | 500GB (sde) |
+--------------------------------------------------------------+-------------+-+
| 2TB (sda1)        | 400GB (sdb) | 400GB (sdc) | 750GB (sdd1) : (sdd2)      :X| 
+------------------------------------------------------------------------------+

Die Aufrechterhaltung dieser Paarung gespiegelter Laufwerke kann auch mit LVM oder MD RAID erfolgen. Dabei sollte sichergestellt werden, dass jedes Laufwerk immer über ein Spiegellaufwerk oder eine Spiegelpartition verfügt. Da alles gespiegelt ist, können wir Laufwerke ausfallen lassen und Paritionen neu anordnen, wenn Laufwerke hinzugefügt oder entfernt werden. Mit LVM oder MD wäre es möglich, Laufwerke zu entfernen und das Array bei Bedarf zu verkleinern, und zwar auf Kosten weniger ausgefeilter Wiederherstellungstools in ZFS im Vergleich zu BTRFS.

Irgendwelche Kommentare zu diesem Verfahren? Ein gutes Skript könnte die verlustfreie Zuordnung und Neuanordnung von Laufwerken bewältigen. Irgendwelche Kommentare zu LVM vs. MD vs. ZFS? Irgendwelche Kommentare zur Leistung des resultierenden seltsam partitionierten Arrays? Verursacht die Datenanordnung über mehrere Partitionen auf demselben Laufwerk hinweg eine übermäßige Kopfsuche und einen frühen Ausfall?

BTRFS-Entwickler: Jeder möchte dies und LVM oder MD sind technisch nicht notwendig (und meiner Meinung nach nicht optimal). Die einfache Verwaltung eines redundanten heterogenen Arrays wäre für btrfs ein Killer-Feature. Es ist ein Hack auf LVM / MD / ZFS wie es ist. Das Minimieren von Resliver / Resync ist massiv wünschenswert.

Ja, das ist offensichtlich der Drobo eines armen Mannes. Dafür sollte man keine dedizierte Hardware benötigen ...

Bob McElrath
quelle

Antworten:

4

Ich habe dies mit ZFS getestet und die Schreibleistung ist ungefähr halb so hoch wie sie sein sollte, da ZFS Lese- und Schreibvorgänge über alle vdevs verteilt (wodurch die E / A auf mehrere Stellen auf derselben Festplatte aufgeteilt wird). Somit ist die Geschwindigkeit durch die Geschwindigkeit der Platte mit den meisten Partitionen begrenzt. Die Lesegeschwindigkeit scheint gleich der Festplattenbandbreite zu sein. Beachten Sie, dass ein Paar von ZFS-Partitionen auf zwei Festplatten ungefähr die doppelte Lesegeschwindigkeit einer einzelnen Festplatte aufweist, da es parallel von den Festplatten lesen kann.

Die Verwendung von MD LINEAR-Arrays oder LVM zum Erstellen der beiden Hälften führt zu einer doppelten Schreibleistung im Vergleich zum obigen ZFS-Vorschlag, hat jedoch den Nachteil, dass LVM und MD keine Ahnung haben, wo die Daten gespeichert sind. Im Falle eines Festplattenausfalls oder eines Upgrades muss eine Seite des Arrays vollständig zerstört und neu synchronisiert / erneut ausgeliefert werden, gefolgt von der anderen Seite. (zB muss der Resync / Resliver 2 * kopieren (Größe des Arrays))

Daher scheint es dann die optimale Lösung zu sein, einen einzelnen ZFS-Spiegel vdev über zwei LVM- oder MD LINEAR-Geräte zu erstellen, die die Festplatten zu gleich großen "Hälften" kombinieren. Dies hat ungefähr die doppelte Lesebandbreite einer Festplatte, und die Schreibbandbreite entspricht den einzelnen Festplattenbandbreiten.

Die Verwendung von BTRFS raid1 anstelle von ZFS funktioniert ebenfalls, hat jedoch die Hälfte der Lesebandbreite, da ZFS seine Lesevorgänge verteilt, um die Bandbreite zu verdoppeln, während BTRFS dies (nach meinen Tests) anscheinend nicht tut. BTRFS hat den Vorteil, dass Partitionen verkleinert werden können, während dies mit ZFS nicht möglich ist (wenn Sie also nach einem Fehler viel leeren Speicherplatz haben, können Sie mit BTRFS ein kleineres redundantes Array neu erstellen, indem Sie das Dateisystem verkleinern und dann die Festplatten neu anordnen).

Dies ist mühsam von Hand, aber mit einigen guten Skripten einfach.

Bob McElrath
quelle