Ho lo stesso problema che molte persone hanno: come creare una soluzione di archiviazione personale affidabile con il fatto che:
- I dischi rigidi si guastano con regolarità allarmante. Perdere file è inaccettabile.
- Comprerò un nuovo HDD di volta in volta. Inevitabilmente, il miglior prezzo / GB ha dimensioni diverse rispetto all'ultimo acquisto di HDD.
2 significa che nel tempo ho una raccolta eterogenea di dischi. Voglio usarli tutti e i dischi guasti verranno generalmente sostituiti da dischi più grandi.
- L'integrità e l'affidabilità dei dati per me sono più importanti della velocità.
Quindi dopo aver sbattuto la testa contro questo problema per alcuni giorni (e nella parte posteriore della mia testa per anni), propongo la seguente soluzione. Descriverò una soluzione che ho testato sulla base di Linux ZFS nativo che è disponibile in un Ubuntu PPA , ma LVM, MD e btrfs possono essere usati per ottenere lo stesso. Per questo userò RAID1 (ZFS mirror vdevs).
- Dato il tuo set di unità, raggruppali in due set di dischi, in modo tale che la capacità di ciascun set sia il più vicino possibile all'altro.
- Partizionare i dischi più grandi in modo tale che vi sia una partizione esattamente della stessa dimensione di uno dei dischi più piccoli, nell'altro gruppo.
- Crea vdev mirror in modo tale che ogni disco abbia il suo mirror su un altro disco.
Ad esempio, si consideri un set di dischi di una nuova unità da 2 TB, un'unità da 750 GB, 2 unità da 400 GB e una da 500 GB. Il partizionamento speculare ottimale ha 2 TB di spazio utilizzabile ed è descritto nel diagramma seguente in cui ':' separa le partizioni e '|' separa i dischi:
+------------------------------------------------------------------+
| 2TB (sda1) : (sda2) : (sda3) : (sda4) |
+------------------------------------------------------------------+--+
| 750 GB (sdb) | 400 GB (sdc) | 400 GB (sdd) | 500 GB (sde1) :XX|
+---------------------------------------------------------------------+
Crea il tuo zpool come
zpool create archive mirror /dev/sda1 /dev/sdb mirror /dev/sda2 /dev/sdc mirror /dev/sda3 /dev/sdd mirror /dev/sda4 /dev/sde1
Questo crea 4 vdev con mirroring. Se uno qualsiasi dei dischi si guasta, può essere sostituito (con qualsiasi disco di dimensioni) e partizionato per ricreare le partizioni mancanti. È importante che i vdev di ZFS possano essere aggiunti a un pool ma non rimossi . Quindi, se possibile, quando si acquista una nuova unità, si desidera riorganizzare i vdev esistenti. Supponiamo che il prossimo acquisto sia stato un disco da 3 TB. La configurazione ottimale è utilizzabile da 3,5 TB, come descritto nel diagramma seguente. Questo è ora 5 coppie vdev. Ciò può essere ottenuto mediante il partizionamento appropriato e successivamente il fallimento e il ripartizionamento delle unità.
+--------------------------------------------------------------+-------------+
| 3 TB (sdf1) : (sdf2) : (sdf3) : (sdf4) | 500GB (sde) |
+--------------------------------------------------------------+-------------+-+
| 2TB (sda1) | 400GB (sdb) | 400GB (sdc) | 750GB (sdd1) : (sdd2) :X|
+------------------------------------------------------------------------------+
Il mantenimento di questa associazione di unità con mirroring potrebbe essere eseguito anche con LVM o MD RAID, con l'idea di assicurarsi che ogni unità abbia sempre un'unità o una partizione mirror. Poiché tutto è speculare, siamo liberi di danneggiare le unità e riorganizzare le partizioni quando le unità vengono aggiunte o rimosse. Utilizzando LVM o MD sarebbe possibile rimuovere le unità e ridurre l'array, se lo si desidera, a spese di strumenti di recupero meno sofisticati in ZFS rispetto a BTRFS.
Qualche commento su questa procedura? Un buon script potrebbe gestire l'allocazione e il riarrangiamento senza perdita di unità. Qualche commento su LVM vs. MD vs. ZFS? Qualche commento sulle prestazioni della risultante matrice partizionata in modo strano? La disposizione dei dati tra più partizioni sulla stessa unità causerà una ricerca eccessiva della testa e guasti precoci?
Dev di BTRFS: tutti lo vogliono e LVM o MD non sono tecnicamente necessari (e secondo me non ottimali). Rendere facile mantenere un array eterogeneo ridondante sarebbe una caratteristica killer per btrfs. È un hack su LVM / MD / ZFS così com'è. Ridurre al minimo il resliver / resync è estremamente desiderabile.
Sì, questo è ovviamente un Drobo da povero. Non si dovrebbe aver bisogno di hardware dedicato per questo ...