Une proposition de stockage hétérogène redondant ZFS ou LVM ou MD

10

J'ai le même problème que la plupart des gens: comment créer une solution de stockage personnel fiable avec le fait que:

  1. Les disques durs tombent en panne avec une régularité alarmante. La perte de fichiers est inacceptable.
  2. J'achèterai un nouveau disque dur de temps en temps. Inévitablement, le meilleur prix / Go est d'une taille différente de celle du dernier achat de disque dur.
  3. 2 signifie qu'au fil du temps, j'ai une collection hétérogène de disques. Je veux les utiliser tous, et les disques défectueux seront généralement remplacés par des disques plus gros.

  4. L'intégrité et la fiabilité des données sont plus importantes pour moi que la vitesse.

Donc, après m'être cogné la tête contre ce problème pendant quelques jours (et à l'arrière de ma tête pendant des années), je propose la solution suivante. Je décrirai une solution que j'ai testée sur la base de Linux natif ZFS qui est disponible dans un PPA Ubuntu , mais LVM, MD et btrfs peuvent être utilisés pour y parvenir. Pour cela, j'utiliserai RAID1 (miroirs ZFS vdevs).

  1. Compte tenu de votre ensemble de lecteurs, regroupez-les en deux ensembles de disques, de sorte que la capacité de chaque ensemble soit aussi proche que possible de l'autre.
  2. Partitionnez les disques plus gros de sorte qu'il existe une partition exactement de la même taille que l'un des disques plus petits, dans l'autre groupe.
  3. Créez des vdev en miroir de sorte que chaque disque ait son miroir sur un autre disque.

Par exemple, considérons un ensemble de disques d'un nouveau lecteur de 2 To, d'un ancien lecteur de 750 Go, de 2 anciens lecteurs de 400 Go et d'un ancien lecteur de 500 Go. Le partitionnement miroir optimal a 2 To d'espace utilisable et est décrit dans le diagramme suivant où ':' sépare les partitions et '|' sépare les disques:

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

Créez votre zpool en tant que

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

Cela crée 4 vdev en miroir. Si l'un des disques tombe en panne, il peut être remplacé (par n'importe quel disque) et partitionné pour recréer les partitions manquantes. Il est important que les vdevs ZFS puissent être ajoutés à un pool mais pas supprimés . Donc, si cela est possible, lorsque vous achetez un nouveau disque, vous souhaitez réorganiser les vdev existants. Disons que le prochain achat était un disque de 3 To. Votre configuration optimale est de 3,5 To utilisable, comme décrit dans le diagramme suivant. Il s'agit maintenant de 5 paires vdev. Ceci peut être réalisé en partitionnant correctement et en échouant et repartitionnant successivement les disques.

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

Le maintien de cet appariement de disques en miroir peut également être effectué avec LVM ou avec MD RAID, l'idée étant de s'assurer que chaque disque a toujours un disque miroir ou une partition. Parce que tout est mis en miroir, nous sommes libres de faire échouer les disques et de réorganiser les partitions lorsque des disques sont ajoutés ou supprimés. En utilisant LVM ou MD, il serait possible de retirer des disques et de réduire la baie, si vous le souhaitez, au détriment d'outils de récupération moins sophistiqués dans ZFS par rapport à BTRFS.

Des commentaires sur cette procédure? Un bon script pourrait gérer l'allocation sans perte et le réarrangement des disques. Des commentaires sur LVM vs MD vs ZFS? Avez-vous des commentaires sur les performances de la baie étrangement partitionnée résultante? L'arrangement des données sur plusieurs partitions sur le même disque entraînera-t-il une recherche excessive de têtes et une défaillance précoce?

Développeurs BTRFS: tout le monde le veut et LVM ou MD ne sont pas techniquement nécessaires (et à mon avis, sous-optimaux). Faciliter la maintenance d'un tableau hétérogène redondant serait une fonctionnalité décourageante pour btrfs. C'est un hack sur LVM / MD / ZFS tel quel. Minimiser le resliver / resync est massivement souhaitable.

Oui, c'est évidemment le Drobo d'un pauvre homme. Il ne faut pas avoir besoin de matériel dédié pour ça ...

Bob McElrath
la source

Réponses:

4

J'ai testé cela avec ZFS et les performances d'écriture sont environ la moitié de ce qu'elles devraient être, car ZFS distribue les lectures et les écritures sur tous les vdev (donc en divisant les E / S à plusieurs endroits sur le même disque). Ainsi, la vitesse est limitée par la vitesse du disque avec le plus de partitions. La vitesse de lecture semble être égale à la bande passante du disque. Notez qu'une paire de partitions ZFS sur deux disques a environ le double de la vitesse de lecture de l'un ou l'autre disque, car elle peut lire à partir des disques en parallèle.

L'utilisation de tableaux MD LINEAR ou LVM pour créer les deux moitiés entraîne deux fois les performances d'écriture par rapport à la proposition ZFS ci-dessus, mais présente l'inconvénient que LVM et MD n'ont aucune idée de l'endroit où les données sont stockées. En cas de panne ou de mise à niveau du disque, un côté de la baie doit être entièrement détruit et resynchronisé / reslivré, suivi de l'autre côté. (par exemple, la resynchronisation / resliver doit copier 2 * (taille du tableau))

Il semble donc que la solution optimale consiste à créer un seul miroir ZFS vdev sur deux périphériques LVM ou MD LINEAR qui combinent les disques en "moitiés" de taille égale. Cela a à peu près le double de la bande passante de lecture de n'importe quel disque, et la bande passante d'écriture est égale aux bandes passantes de disque individuelles.

L'utilisation de BTRFS raid1 au lieu de ZFS fonctionne également, mais a la moitié de la bande passante en lecture car ZFS distribue ses lectures pour doubler la bande passante, alors qu'il semble que BTRFS ne le fasse pas (selon mes tests). BTRFS a l'avantage que les partitions peuvent être réduites, alors qu'elles ne le peuvent pas avec ZFS (donc si après une panne vous avez beaucoup d'espace vide, avec BTRFS, il est possible de reconstruire un tableau redondant plus petit en réduisant le système de fichiers, puis en réorganisant les disques).

C'est fastidieux à faire à la main mais facile avec de bons scripts.

Bob McElrath
la source