Esta es una "continuación" de la respuesta de ewwhite:
Debería reescribir sus datos en el zpool expandido para reequilibrarlo
Escribí un script PHP ( disponible en github ) para automatizar esto en mi host Ubuntu 14.04.
Uno solo necesita instalar la herramienta CLI de PHP con sudo apt-get install php5-cli
y ejecutar el script, pasando la ruta a los datos de sus grupos como primer argumento. P.ej
php main.php /path/to/my/files
Idealmente, debe ejecutar el script dos veces en todos los datos del grupo. La primera ejecución equilibrará la utilización de la unidad, pero los archivos individuales se asignarán en exceso a las unidades que se agregaron en último lugar. La segunda ejecución asegurará que cada archivo esté "bastante" distribuido entre las unidades. Digo bastante en lugar de hacerlo de manera uniforme porque solo se distribuirá de manera uniforme si no está mezclando las capacidades de la unidad, ya que estoy con mi raid 10 de pares de diferentes tamaños (espejo de 4 TB + espejo de 3 TB + espejo de 3 TB).
Razones para usar un script
- Tengo que solucionar el problema "en el lugar". Por ejemplo, no puedo escribir los datos en otro sistema, eliminarlos aquí y volver a escribirlos.
- Llené mi grupo más del 50%, por lo que no podía simplemente copiar todo el sistema de archivos a la vez antes de eliminar el original.
- Si solo hay ciertos archivos que necesitan funcionar bien, entonces uno podría ejecutar el script dos veces sobre esos archivos. Sin embargo, la segunda ejecución solo es efectiva si la primera ejecución logró equilibrar la utilización de las unidades.
- Tengo muchos datos y quiero poder ver una indicación del progreso realizado.
¿Cómo puedo saber si se logra incluso la utilización de la unidad?
Use la herramienta iostat durante un período de tiempo (por ejemplo iostat -m 5
) y verifique las escrituras. Si son lo mismo, entonces ha logrado una distribución uniforme. No están perfectamente igualados en la captura de pantalla a continuación porque estoy ejecutando un par de 4 TB con 2 pares de unidades de 3 TB en RAID 10, por lo que los dos 4 se escribirán un poco más.
Si la utilización de su unidad está "desequilibrada", iostat mostrará algo más parecido a la captura de pantalla a continuación donde se escriben las nuevas unidades de manera desproporcionada. También puede decir que son las nuevas unidades porque las lecturas están en 0 ya que no tienen datos sobre ellas.
El script no es perfecto, solo es una solución, pero me funciona mientras tanto hasta que ZFS algún día implemente una función de reequilibrio como BTRFS (dedos cruzados).