Con zfs, si tiene copies=2
y luego pierde una unidad que contiene algunas de esas copias, ¿cómo le dice al sistema que debe hacer una nueva copia de los bloques de datos para los archivos afectados? ¿O zfs simplemente comienza a agregar bloques de datos para las copias adicionales tan pronto como se entera de bloques de datos incorrectos?
¿Scrub hará esto?
(v0.6.0.56-rc8, ZFS pool versión 28, sistema de archivos ZFS versión 5, Ubuntu 11.10)
For a device to be replaced, the pool must be in the ONLINE state. The device must be part of a redundant configuration, or it must be healthy (in the ONLINE state).
Supongo que copias = 2 o 3 no se considera una configuración redundante.copies=1
y lo ha mejoradocopies=2
, es probable que luego desee volver a cargar / resubrir, lo que creará estas instancias. Pero @jilliagre es correcto: los bloques ídem no constituyen una configuración redundante. NO hay garantía de que los bloques se establezcan en otro dispositivo, incluso si tiene varios dispositivos en un grupo.Encontré esta pregunta realmente intrigante, y después de pasar una hora revisando la documentación, me sumergí en el código. Esto es lo que encontré.
Primero, algo de terminología. Los bloques ídem (que son lo que son estas copias, a diferencia de los espejos) se crean automáticamente en una escritura, pero pueden o no estar en el mismo dispositivo virtual (vdev) que la copia original. Por otro lado, los bloques reflejados siempre se reflejan en otro dispositivo virtual.
Sin embargo, el código se refiere a ambos tipos de bloques como hijos. Verá aquí que los bloques ídem son solo hijos con
io_vd == NULL
(esto está en la función de escritura). Para un bloque reflejado,io_vd
se establecería en el dispositivo virtual correspondiente (su segundo disco, por ejemplo).Con eso en mente, cuando llega a la parte de lectura , trata a todos los niños (ya sean espejo o bloques idénticos) como potencialmente inseguros si no contiene el esperado
good_copies
, y los reescribe según sea necesario . Por lo tanto, parece que la respuesta a su pregunta es: sí, los reescribirá cuando tenga al menos una buena copia, y cualquiera de los siguientes:¡Uf! Tal vez alguien pueda señalar fallas, pero disfruté aprendiendo sobre ZFS a través de este pequeño ejercicio, ¡y espero que esto ayude!
fuente
@jlliagre y otros que parecen pensar que el zpool completo muere si uno de los discos (vdevs) muere pero el grupo no es redundante (espejo / raidz). Esto no es verdad; un multidisco piscina será siempre sobrevivir a un fallo de disco único completa, incluso si no es un espejo o raidz.
Los metadatos de ZFS siempre se copian al menos 2 veces, por lo que la falla total de un disco completo (o cualquier parte del mismo) no eliminará el sistema de archivos. Además, muchos archivos, especialmente los más pequeños, no se distribuirán en todos los discos y, por lo tanto, no necesariamente se verán afectados por la falla del disco. El OP pregunta sobre el caso de un grupo de discos múltiples que utiliza bloques ídem (copias de datos del usuario> 1). Aquí, una sola falla completa del disco
nuncadebería dar como resultado ninguna pérdida de datos.ZFS siempre intentará colocar bloques ídem lejos del bloque original, y para grupos con múltiples vdevs, esto siempre significa en otro vdev (una excepción podría ser donde un vdev es> 50% del grupo, lo cual sería muy inusual) . Los metadatos del sistema de archivos también siempre se copian +1 o +2 veces más que el nivel ídem, por lo que siempre sobrevivirá a la falla del disco. Además, si tiene un grupo de más de tres discos, debería poder perder hasta la mitad de ellos sin pérdida de datos; ZFS almacena los bloques ídem en el siguiente disco, por lo que siempre que nunca pierda dos discos adyacentes, nunca tendrá pérdida de datos. (falla de tres discos adyacentes para ídem = 2).Cuando hay suficientes copias de datos para acceder a un archivo (ya sea que esas copias sean de bloques ídem, espejo o raidz), todas las copias faltantes de datos se reparan cuando se accede al archivo. Este es el propósito del exfoliante; lea todos los datos y corrija los que sean malos haciendo uso de copias redundantes. Por lo tanto, para responder directamente a la pregunta de OP, solo necesita hacer un fregado después de reemplazar la unidad fallida, y todas las copias se restaurarán.
Como siempre, puede experimentar fácilmente con los conceptos creando grupos cuyos vdevs para el almacén de respaldo son simplemente archivos dispersos comunes. Al eliminar o corromper los archivos vdev, puede simular cualquier tipo de falla y puede verificar la integridad del grupo, los sistemas de archivos y los datos en el camino.
EDITAR: después de experimentar, parece que zfs fallará en el grupo si falla un disco en un grupo no redundante multidisco con copias> = 2. La corrupción de datos paritales en uno o más discos debe poder sobrevivir y debe ser reparada por un exfoliante.
fuente