![dd falla: qué hacer al respecto](https://rvso.com/image/89177/dd%20falla%3A%20qu%C3%A9%20hacer%20al%20respecto.png)
Me he dd
bloqueado 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 dd
en 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 tar
en 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 dmesg
comando 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 ddrescue
para 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/sda1
el archivo de imagen /media/sda1.img
serí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 ddrescue
para 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 seek
y skip
con valores idénticos para reanudar.
dd <your previous options here ...> seek=68424 skip=68424 conv=notrunc
68424
Lo 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 seek
y skip
en 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.