Migración de disco en línea ZFS

Migración de disco en línea ZFS

Me pregunto si ZFS puede manejar lo siguiente. Digamos que tengo FreeBSD instalado en un zpool con dos discos físicos de 500 GB en una configuración reflejada. Estos forman la partición raíz, por lo que en realidad sólo se utiliza un máximo de 20 GB.

Más tarde querría reemplazar los discos físicos con dos SSD pequeños en una configuración reflejada. ¿Hay alguna manera de hacer esto en línea? Mi idea era agregar estos discos al zpool como espejos adicionales, esperar a que finalice la restauración y luego quitar las unidades antiguas. El problema es que estos nuevos discos serían más pequeños que los originales.

Una idea que tuve es simplemente particionar las unidades de 500 GB, de modo que ZFS solo obtenga, digamos, 30 GB de espacio en cada disco físico y el resto se desperdicie. De esta forma los SSD tendrían más espacio, por lo que no llegaría a un problema de contracción. El problema es que de esta manera necesito estimar de antemano el tamaño de los futuros discos de reemplazo. Hay alguna manera de evitar esto?

Respuesta1

Tiene razón en que si vdev es el disco completo, cuando cambie a SSD tendrían que tener al menos ese tamaño, no puede "reducirse" a discos más pequeños (por supuesto, puede crecer a discos más grandes). También tiene razón en que puede usar particiones para que los vdev sean más pequeños que los futuros SSD, y tendría que adivinar qué tan grandes serán esos SSD.

Alternativamente, si el servidor puede acomodar los 4 discos al mismo tiempo, incluso por un corto período de tiempo, puede crear el zpool de la forma que desee ahora y luego usar enviar/recibir para transferir los datos a los nuevos SSD. Esto requiere que todos los dispositivos estén conectados al mismo tiempo. Una pequeña advertencia: la operación de envío/recepción solo puede enviar desde una instantánea, por lo que no puede duplicar un disco "en vivo" y necesitará hacer adaptaciones para esto (el tiempo de inactividad puede ser bastante corto si se agrega un poco de complejidad).

Aún más complicado, es posible almacenar el "envío" en un archivo intermedio en otro disco en algún lugar y luego "recibirlo" desde allí. Por lo tanto, solo necesita 3 discos en el servidor en cualquier momento. Y lo que es más complicado aún, los 4 discos podrían estar en servidores diferentes y el envío/recepción se puede canalizar a través de ssh o incluso netcat.

Respuesta2

No se me ocurre ninguna forma obvia de hacer esto.

Por ahora, dado que tiene que particionar los discos raíz de todos modos (para agregar código de arranque), y no parece algo que deba suceder con frecuencia, sugeriría simplemente crear una partición pequeña (<20 GB) para el grupo raíz. Si necesita espacio adicional, puede crear una segunda piscina con el espacio sobrante. Cuando se trata de colocar los SSD, simplemente particionelos, agregue el código de arranque, 'zfs adjuntar' al grupo raíz, luego 'zfs separar' los originales (o 'zfs reemplazar' en lugar de 'zfs adjuntar' y 'zfs separar' ).

información relacionada