¿Hay alguna forma en que se pueda solicitar a ZFS que redistribuya un sistema de archivos dado sobre todos los discos en su zpool?
Estoy pensando en un escenario en el que tengo un volumen ZFS de tamaño fijo que se exporta como LUN sobre FC. El zpool actual es pequeño, solo dos discos duplicados de 1TB, y el zvol es de 750GB en total. Si tuviera que expandir repentinamente el tamaño del zpool a, digamos, 12 discos de 1TB, creo que el zvol aún estaría efectivamente 'alojado' solo en los dos primeros cabezales.
Dado que más husos = más IOPS, ¿qué método podría usar para 'redistribuir' el zvol sobre los 12 husos para aprovecharlos?
zfs send | zfs recv
No hay ninguna razón para que zvol se almacene solo en los dispositivos iniciales. Si amplía el grupo, ZFS abarcará los datos actualizados en todos los dispositivos subyacentes disponibles. No hay particiones fijas con ZFS.
fuente
Esta es una "continuación" de la respuesta de ewwhite:
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.ejphp 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
¿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).
fuente
Bueno, esto es un truco, pero dado que ha detenido la máquina usando el zvol, podría enviar el sistema de archivos a un archivo local en localhost llamado bar.zvol, y luego volver a recibir el sistema de archivos. Eso debería reequilibrar los datos por usted.
fuente
La mejor solución que encontré fue duplicar la mitad de sus datos en el grupo expandido y luego eliminar los datos duplicados originales.
fuente