dd falla: qué hacer al respecto

dd falla: qué hacer al respecto

Me he ddbloqueado después de correr unas horas. Normalmente con un mensaje como

Input/output error
68424+1 records in
68424+1 records out
342124883968 bytes (342 GB) copied, 5114.68 s, 66.9 MB/s

¿Hay algo que pueda hacer al respecto? ¿Hay alguna forma de utilizar la salida? ¿O reiniciar donde lo dejó?

¿Hay alguna razón para pensar que se debe a que se está utilizando la partición de la que se realiza la copia de seguridad?

Siempre falla alrededor del 70-80%, a menudo cuando la partición debería usarse menos.

Dado que este proceso lleva tanto tiempo, es difícil probar cosas diferentes.

Salgo a una imagen. Probablemente podría usar una partición, pero LVM está involucrado:

sudo lvmdiskscan
/dev/centos/swap [       3.89 GiB] 
/dev/sda1        [     500.00 MiB] 
/dev/centos/root [      50.00 GiB] 
/dev/sda2        [     465.27 GiB] LVM physical volume
/dev/centos/home [     411.38 GiB] 
/dev/sdb1        [     931.51 GiB] 
3 disks
2 partitions
0 LVM physical volume whole disks
1 LVM physical volume


dd conv=sync,noerror if=/dev/centos/home bs=2000000   of=/run/media/ob/X_1T_Media1GHD-PCTU3/c/sd9e22_cel.image
dd: error reading '/dev/centos/home': Input/output error
171062+1 records in
171063+0 records out
342126000000 bytes (342 GB) copied, 4625.3 s, 74.0 MB/s
220856+2 records in
220858+0 records out
441716000000 bytes (442 GB) copied, 6138.1 s, 72.0 MB/s

Mañana de viernes ddrescue --sector-size=2048 --cluster-size=$((256*512)) --sparse --verbose /dev/centos/home /run/media/ob/X_1T_Media1GHD-PCTU3/c/sd7c_dd.image /run/media/ob/X_1T_Media1GHD-PCTU3/c/sd7c_dd.map

GNU ddrescue 1.18.1 About to copy 441714 MBytes from /dev/centos/home to /run/media/ob/X_1T_Media1GHD-PCTU3/c/sd7c_dd.image Starting positions: infile = 0 B, outfile = 0 B Copy block size: 131072 sectors Initial skip size: 32 sectors Sector size: 2048 Bytes

Press Ctrl-C to interrupt rescued: 441714 MB, errsize: 8192 B, current rate: 0 B/s ipos: 342124 MB, errors: 1, average rate: 60675 kB/s opos: 342124 MB, run time: 2.02 h, successful read: 9 s ago Finished

Pero extundelete sd7c_dd.image --restore-directory /home/ob/p -o /tmp/tt extundelete: Bad magic number in super-block when trying to open filesystem sd7c_dd.image

/dev/mapper/centos-home on /home type xfs (rw,relatime,attr2,inode64,noquota) 

Respuesta1

Nunca debes ejecutar dden un sistema de archivos montado, porque eso puede dañar la imagen, especialmente. si quieres hacer una copia de seguridad. Es posible que desee utilizar taren su lugar.

Si está seguro de que el dispositivo estánoEn caso contrario, puede utilizar las banderas seek(para buscar N bloques en el archivo de salida) y skip=N(para omitir N bloques de la entrada). En un sistema Linux, puede utilizar el dmesgcomando para obtener el registro del kernel actual.

Si no está seguro de si el dispositivo desde el que desea copiar puede estar fallando, le recomendaría utilizar ddrescuepara obtener una imagen del dispositivo. Esa herramienta no cancela los errores de lectura y registra las posiciones de los bloques que no pudo leer correctamente.

Respuesta2

Si está intentando copiar una imagen de una partición que está en uso, se está preparando para una caída realmente grave. Copiar una partición como esta requiere que no se escriba nada en ella. En absoluto.

Si puede desactivar la partición, puede usar ddrescue, que está diseñado para leer discos y particiones con sectores defectuosos. Una invocación típica para extraer /dev/sda1el archivo de imagen /media/sda1.imgsería así:

ddrescue --sector-size=2048 --cluster-size=$((64*512)) --sparse --verbose /dev/sda1 /media/sda1.img /media/sda1.map

Los tamaños de sector y clúster configurados ddrescuepara leer unidades de 64 MB. Es posible que quieras intentar aumentar esto a 128 MB o incluso 256 MB, pero ten en cuenta que esto no necesariamente aumentará el rendimiento.

En su caso particular, su partición de origen es en realidad un volumen LVM, por lo que esto es de gran ayuda: puede tomar una instantánea de la partición para hacer una copia de seguridad. En este ejemplo lo he llamado home-snap.

lvcreate --snapshot --name home-snap --size 1G /dev/centos/home
ddrescue --sector-size=2048 --cluster-size=$((64*512)) --sparse --verbose /dev/centos/home-snap /run/media/ob/X_1T_Media1GHD-PCTU3/c/sd9e22_cel.image /run/media/ob/X_1T_Media1GHD-PCTU3/c/sd9e22_cel.map
lvremove -y /dev/centos/home-snap

Respuesta3

Si el dispositivo es más grande que los 342 GB que copió, lo más probable es que tenga un sector defectuoso en este disco.

Puedes usar seeky skipcon valores idénticos para reanudar.

dd <your previous options here ...> seek=68424 skip=68424 conv=notrunc

68424Lo más probable es que vuelva a producir el mismo error de E/S, por lo que tendrás que aumentarlo. No dijiste qué tamaño de bloque usaste (y soy demasiado vago para hacer los cálculos), para omitir regiones de error más pequeñas es posible que prefieras un tamaño de bloque más pequeño (entonces tienes que adaptarte seeky skipen consecuencia).

no usar conv=noerror,corrompe las cosas. Si encuentra más errores, utilice ddrescue, es una herramienta que maneja los errores de lectura mejor que ddél.

información relacionada