Ampliando la excelente respuesta de Mark Haferkamp, btrfs scrub
leer 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 scrub
entra. 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.