Solo los datos recién escritos (adjuntos) se dividen entre todos los vdevs actualmente activos, no hay una operación de reequilibrio explícita en ZFS.
Dos posibles soluciones:
- Espere hasta que todos los datos antiguos se vuelvan a escribir (debido a CoW, esto puede llevar mucho tiempo, en el peor de los casos, el doble del tiempo que llevaría escribir el disco por completo).
- Elimine todos los datos y escríbalos de nuevo (zfs send/recv es útil para sacar todos los datos del grupo y recuperarlos sin perder nada). Esto no tiene que hacerse todo de una vez, y se puede hacer en el mismo grupo.
Para ser más precisos, elegiría la segunda solución y transferiría cada sistema de archivos por separado en los momentos en que la carga del sistema sea baja (por ejemplo, por la noche):
- Tomar una instantánea (
zfs snapshot -r
) de un sistema de archivos de tamaño decente (y sistemas de archivos descendientes, recursivamente) - Usar
zfs send | zfs recv
con las opciones adecuadas para enviar la instantánea a un sistema de archivos temporal recién creado (puede estar en el mismo grupo si el espacio lo permite); este sistema de archivos debe estar en la misma ubicación en la jerarquía que el anterior - Después de realizar la copia (puede llevar algo de tiempo, porque los discos tienen que leer y escribir),
zfs destroy
la instantánea anterior y el sistema de archivos anterior zfs rename
el sistema temporal al nombre antiguo- Verifique y cambie los puntos de montaje con
zfs mount
, reorganizando la situación anterior para su sistema de archivos reemplazado - Repita hasta que se muevan todos los sistemas de archivos
posible tercera solución (como lo menciona SirMaster en esta publicación del foro de FreeNAS):
- agregar disco(s) nuevo(s) a zpool
- copie muchos archivos a otro nuevo directorio /mnt/pool/temp/
- eliminar archivos originales:
rm -rf original/
- renombrar directorio atrás:
mv temp/ original/
Esto funciona porque ZFS colocará escrituras proporcionalmente en cualquier vdev que tenga más espacio libre, en este caso, las unidades nuevas que estaban vacías. (a partir de la versión 0.7, zfs favorecerá las unidades más rápidas para las escrituras, pero supongamos que sus 2 unidades nuevas tienen el mismo o mayor rendimiento que las unidades originales)
Probablemente sea más lento que zfs send | zfs recv
, pero más simple porque no tiene que crear/destruir instantáneas.
Puedes ejecutar zpool list -v
antes y después para ver la utilización de cada vdev.
Además, encontré un script php que realiza el procedimiento de copiar/eliminar/renombrar archivo por archivo. Esto se vinculó en una respuesta de una pregunta similar (pero zvol) unos años antes. (no probé este script personalmente)