Cuando un disco empieza a fallar lo primero es sacar una copia completa a otro medio antes de que empeore, y trabajar después sobre esa copia. Esta receta explica cómo hacerlo con ddrescue.

Instalación

En Debian el paquete se llama gddrescue, aunque el comando es ddrescue:

$ sudo apt install gddrescue

Volcar el disco a una imagen

PRECAUCIÓN: Asegúrate de cuál es el dispositivo de origen (por ejemplo, con lsblk o dmesg) y de que el destino tiene espacio suficiente para la imagen completa.

En este ejemplo se rescata la partición /dev/sde1 a un fichero de imagen en otro disco:

$ sudo ddrescue -f -n /dev/sde1 /media/bob/BACKUP/disco.img /media/bob/BACKUP/disco.log
GNU ddrescue 1.29
Press Ctrl-C to interrupt
     ipos:  750153 MB, non-trimmed:        0 B,   current rate:  11430 kB/s
     opos:  750153 MB, non-scraped:        0 B,   average rate:  50010 kB/s
non-tried:        0 B,  bad-sector:        0 B,     error rate:       0 B/s
  rescued:  750153 MB,   bad areas:          0,       run time:      4h 10m
pct rescued:  100.00%, read errors:          0, remaining time:         n/a
                               time since last successful read:          0s
Copying non-tried blocks... Pass 1 (forwards)
Finished

Los argumentos son:

  • -f: fuerza la sobreescritura del destino. Solo es imprescindible cuando el destino es un dispositivo en lugar de un fichero.
  • -n: omite la fase de «scraping», es decir, no insiste en las zonas más dañadas. Así se rescata primero todo lo que se puede leer sin problemas, que es lo más urgente si el disco se está muriendo.
  • /dev/sde1: el dispositivo de origen.
  • disco.img: la imagen de destino.
  • disco.log: el «mapfile», donde ddrescue apunta qué zonas ha leído ya y cuáles han fallado. Permite interrumpir el proceso con Ctrl-C y retomarlo después ejecutando el mismo comando.

En este caso se rescataron los 750 GB al 100% y sin errores de lectura (bad-sector: 0 B, read errors: 0).

Reintentar las zonas dañadas

Si la primera pasada deja sectores sin leer, se puede lanzar una segunda pasada con el mismo «mapfile». ddrescue solo intentará leer lo que falta:

$ sudo ddrescue -d -r3 /dev/sde1 /media/bob/BACKUP/disco.img /media/bob/BACKUP/disco.log

-d lee directamente del dispositivo sin pasar por la caché del kernel y -r3 reintenta 3 veces cada sector defectuoso.

Acceder a los datos

Como la imagen es de una partición, se puede montar directamente, en modo solo lectura para no modificarla:

$ sudo mount -o loop,ro /media/bob/BACKUP/disco.img /mnt

Referencias



blog comments powered by Disqus