Questa è una "continuazione" della risposta di ewwhite:
Dovresti riscrivere i tuoi dati nello zpool espanso per riequilibrarli
Ho scritto uno script PHP ( disponibile su github ) per automatizzare questo sul mio host Ubuntu 14.04.
Basta installare lo strumento CLP PHP sudo apt-get install php5-cli
ed eseguire lo script, passando il percorso ai dati dei pool come primo argomento. Per esempio
php main.php /path/to/my/files
Idealmente, dovresti eseguire lo script due volte su tutti i dati nel pool. La prima esecuzione bilancerà l'utilizzo dell'unità, ma i singoli file verranno eccessivamente allocati alle unità aggiunte per ultime. La seconda esecuzione assicurerà che ogni file sia "equamente" distribuito tra le unità. Dico piuttosto che in modo uniforme perché sarà distribuito in modo uniforme solo se non si stanno mescolando le capacità dell'unità come sono con il mio raid 10 di coppie di dimensioni diverse (specchio da 4 TB + specchio da 3 TB + specchio da 3 TB).
Ragioni per l'utilizzo di uno script
- Devo risolvere il problema "sul posto". Ad esempio, non posso scrivere i dati su un altro sistema, eliminarli qui e riscriverli di nuovo.
- Ho riempito il mio pool di oltre il 50%, quindi non potevo semplicemente copiare l'intero filesystem in una sola volta prima di eliminare l'originale.
- Se ci sono solo alcuni file che devono funzionare bene, allora si potrebbe semplicemente eseguire lo script due volte su quei file. Tuttavia, la seconda esecuzione è efficace solo se la prima esecuzione è riuscita a bilanciare l'utilizzo delle unità.
- Ho molti dati e voglio essere in grado di vedere un'indicazione dei progressi compiuti.
Come posso sapere se viene raggiunto anche l'utilizzo dell'azionamento?
Utilizzare lo strumento iostat per un periodo di tempo (ad es. iostat -m 5
) E controllare le scritture. Se sono uguali, hai raggiunto uno spread uniforme. Non sono perfettamente nemmeno nello screenshot qui sotto perché sto eseguendo una coppia di 4 TB con 2 coppie di unità da 3 TB in RAID 10, quindi i due 4 verranno scritti su un po 'di più.
Se l'utilizzo dell'unità è "sbilanciato", iostat mostrerà qualcosa di più simile allo screenshot qui sotto in cui le nuove unità vengono scritte in modo sproporzionato. Puoi anche dire che sono le nuove unità perché le letture sono a 0 poiché non hanno dati su di esse.
Lo script non è perfetto, è solo una soluzione alternativa, ma funziona per me nel frattempo fino a quando ZFS un giorno implementerà una funzione di riequilibrio come BTRFS ha (dita incrociate).