¿Cómo funciona btrfs scrub y qué hace?

19

¿Qué hace exactamente btrfs scrub? Según la página del manual, que no está del todo clara, realiza algunas comprobaciones de errores. ¿Qué tipo de comprobación de errores? ¿Qué tan confiable es? ¿Es capaz de recuperar algunos errores? ¿Como funciona? ¿Funciona en todos los discos btrfs?

Petr
fuente
3
Contexto: BTRFS almacena sumas de comprobación, por lo que siempre puede saber si un archivo (o metadatos) está bien o si está dañado. Casi todos los demás sistemas de archivos como ext4 no tienen suma de comprobación, por lo que no le impedirán leer un archivo que ha sido dañado por un disco defectuoso (que está a punto de morir y ya ha comenzado a dañar los datos). Esta es una característica importante de protección de datos en BTRFS y hace posible el lavado.
basic6

Respuestas:

23

No sé si hace algo más, pero sé que, como mínimo, btrfs scrubrealiza la depuración de datos de disco completo. Básicamente, lee todos los datos * en el disco, vuelve a calcular su suma de comprobación y compara la suma de comprobación recalculada con la almacenada. Cuando las sumas de verificación almacenadas y recalculadas no coinciden, el sistema sabe que hay corrupción.

Una vez que se detecta corrupción, el comportamiento depende de la configuración de su disco. Por ejemplo, si tiene RAID 1 (duplicación), btrfs scrubpuede corregir los datos corruptos copiando una versión no corrupta de otro disco. Si todas las copias de algunos datos están dañadas (por ejemplo, daños en varios discos o no tener copias redundantes en primer lugar), entonces no hay mucho btrfs scrubque hacer además de advertirle.

La razón por la que esto es importante es que los discos duros son solo aproximadamente 99.999999999999% confiables en la lectura y escritura de bits. Entonces, cada pocos terabytes de E / S de datos, es probable que haya un error. Aunque los errores se pueden detectar y se detectan (y se corrigen, suponiendo que una copia redundante siga siendo válida) durante el acceso normal al disco, la depuración de disco completo de rutina puede encontrar y corregir errores antes de que se acumule lo suficiente como para que todas las copias de los mismos datos estén dañados.

* Estoy usando "datos" en lugar de "archivo" para incluir metadatos también. Btrfs almacena archivos y metadatos correspondientes (incluidas las sumas de verificación) en bloques de datos, todos los cuales son sumados y verificados btrfs scrub.

Ver también:

Mark Haferkamp
fuente
No he contado, pero estoy dispuesto a adivinar que su cifra de fiabilidad está fuera de lugar en algunos órdenes de magnitud. Los discos duros de consumo generalmente se especifican a una velocidad UBE de 10 ^ -14 bits. En otras palabras, un error de lectura irrecuperable por cada lectura de 10 ^ 14 bits. El problema es que esto es para un sector completo; obtienes el sector completo o no obtienes nada (o esa es la idea; los errores silenciosos son otra taza de té por completo). Por lo tanto, el error se amplifica por el tamaño del sector, que con las unidades de formato avanzado es de 32.768 bits. Por lo tanto, la tasa de error real es más como 10 ^ -10 a 10 ^ -11 errores de lectura.
un CVn
@ MichaelKjörling No creo que los sectores importen aquí ... Tengo registros de los últimos 29 btrfs scrubs de los dos discos duros internos de 1TB de mi computadora. La cantidad de datos ha variado entre 270 y 300 GiB (para un total de 1.35 * 10 ^ 14 a 1.49 * 10 ^ 14 bits leídos para todos los scrubs combinados). Se han encontrado 3 errores durante estos scrubs. Suponiendo que la E / S sin depuración no causó ni la rotura de bits fija, eso es solo de 2 a 2¼ veces la tasa de error esperada de unidades "99.999999999999% confiables". Incluso con solo sectores de 4096 bits, creo que su argumento esperaría que mis unidades hayan tenido miles de errores por ahora.
Mark Haferkamp
@ MichaelKjörling Hasta donde entiendo las hojas de especificaciones del fabricante (Seagate y WD), son pequeños errores y no sectores enteros los que mueren. Y la cantidad de nueves en la respuesta es incluso optimista: 100-1/10^14tiene 16 nueves y la publicación tiene solo 14 (correspondientes a 10 ^ 12).
Luc
@Luc Es bueno si la muerte del sector es menos común; los sectores moribundos significan que la unidad está (tal vez) realmente fallando y podría necesitar reemplazo. Los errores de bit solo conducen a la corrupción silenciosa de los datos, que puede ser lo suficientemente ruidosa como para restaurar desde las copias de seguridad. Nota matemática: El cálculo real es 1-10^n, que luego se convierte en porcentaje porque a los humanos no les gustan los decimales iniciales. Además, no mencioné en mi comentario anterior que las unidades están en RAID 1 (por lo tanto, los mismos datos de 270-300 GiB están en cada una de ellas), lo que corrige otro error de cálculo aparente.
Mark Haferkamp
5

Ampliando la excelente respuesta de Mark Haferkamp, btrfs scrubleer todos los datos en lugar de todos los archivos es una propiedad crítica y en realidad es lo que lo hace tan útil. Recuerde, btrfs tiene soporte RAID incorporado. Supongamos que tiene un sistema de archivos btrfs que abarca dos unidades que ha configurado para usar RAID1. En este caso, cuando escribe en un archivo, esa escritura se replica en ambos discos. (Se vuelve más complicado con un ejemplo más complejo, pero para este caso simple, esto es siempre lo que sucede). Sin embargo, cuando lee de ese archivo, la lectura golpeará solo un disco (porque es un desperdicio leer el archivo dos veces a menos que la primera copia sea inutilizable por alguna razón).

Ahora supongamos que su segundo disco btrfs se está degradando y está comenzando a dañar los datos en su sistema de archivos. Cuando lea bloques de este disco, btrfs notará que la suma de comprobación no coincide y restaurará el bloque en banda desde una copia válida conocida: la copia en la primera unidad. Devolverá los datos a la aplicación que llama read()(o lo que sea) como si nada hubiera pasado.

Pero, ¿qué pasa si btrfs no decide leer desde el segundo disco? Recuerde, hay dos copias, por lo que puede leer desde el primer o el segundo disco. Si se lee desde el primer disco, no notará nada malo. La única vez que notará que algo anda mal es cuando el primer disco también se degrada. Ahora está realmente manguera, ya que es demasiado tarde para recuperar los datos: la copia del segundo disco se ha dañado por un tiempo y la primera copia (que es lo que habría utilizado para restaurar el segundo disco) ahora también está corrupta.

Aquí es donde btrfs scrubentra. Lee todos los datos , no todos los archivos. Esto incluye metadatos, pero también copias secundarias de archivos que normalmente no estarían en la ruta de lectura. Cuando lee estas copias secundarias, eso crea una oportunidad para que la corrección de errores en banda de btrfs se active y restaure los datos de una copia redundante.

Strugee
fuente
2
¿Está seguro de que en RAID1 la lectura se realiza solo desde 1 disco? Al menos con mdadm RAID, este no debería ser el caso. La lectura debe realizarse en paralelo desde ambos discos, pero de datos diferentes, lo que significa que debe ser el doble de rápido que la lectura desde un disco. El aumento del rendimiento de lectura es una de las principales características de RAID 1.
Petr
@Petr sí, tienes razón. Los bloques individuales solo se leen desde un disco.
Strugee
@Petr: Para elaborar, - en condiciones normales de uso, ni MDADM ni BTRFS leen ambas copias de los mismos datos de ambos discos. Solo leen una copia. - MDADM es capaz de equilibrar la carga y distribuir la lectura entre copias para obtener el doble de velocidad de lectura. (porque todas las copias A van al disco 1, y todas las copias B van al disco 2. Como mdadm usará exactamente 2 discos). - BTRFS tiene más dificultades. (porque las copias A y B irán a los 2 discos (de 2 o más discos) que tengan más espacio libre en este momento, es decir: las 2 copias se distribuirán aleatoriamente entre todos los discos presentes)
DrYak
y con respecto a la seguridad: - tanto MDADM como BTRFS intentarán la otra copia en caso de problemas. - para MDADM, el único problema que puede detectar es "el disco no responde" (porque no tiene una idea real de los archivos almacenados anteriormente) - para BTRFS, además, puede detectar la corrupción de datos silenciosos (porque los datos son suma de verificación, y así la capa RAID de BTRFS sabe si se puede confiar en una copia o si debe buscar otra copia)
DrYak
Por último, pero no menos importante con respecto a RAID5 / 6: - en MDADM simplemente funciona . (Pero no detectará corrupciones silenciosas): en BTRFS, la corrupción silenciosa por ahora no se maneja (porque es más fácil obtener otra copia (en RAID1) en lugar de hacer el cálculo de Codificación de borrado para adivinar qué miembro de la banda está dañado y debe reconstruirse a partir de los datos / paridad restantes). En otras palabras: a partir de hoy (agosto de 2017) no use RAID5 / 6 de btrfs.
DrYak