dd copy emmc para copia de seguridad y uso en otros dispositivos: obtiene un error de entrada / salida

1

Estoy tratando de hacer una copia de seguridad de mi sistema que se ejecuta en la memoria emmc en mi dispositivo integrado. El problema es que sigo recibiendo errores de entrada / salida cuando lo intento. Lo he intentado en 4M, 1M y 64K, pero todavía los obtengo. ¿esto es normal?

dd if=/dev/nbd1 conv=sync,noerror bs=64K |
   gzip -c  >
      /mnt/usbdrive/backup_image.img.gz
    
pregunta wegunterjr

2 respuestas

2
dd if=/dev/nbd1 …

/dev/ndbX es una red N B D . No está realizando una copia de seguridad de su EMMC, sino algo que ha montado a través de la red; Estoy casi seguro de que eso no es lo que quieres hacer.

Supongo que esto significa que ejecutas un demonio NBD en el dispositivo integrado, y montaste el volumen compartido en tu PC. Ese es un posible enfoque, pero en realidad solo iría por ncat aquí; correr

ncat -l … > backup_image.img

en tu PC, y

ncat … < /dev/mmblk0

en su sistema integrado (asumiendo que mmblk0 es su EMMC).

Nota: muchos sistemas integrados no ejecutan dispositivos flash autoadministrados que ofrecen una interfaz de dispositivo de bloque, como MMC / tarjetas SD / unidades flash USB / SATA SSD, pero sin IC sin flash. Estos son NO bloquean dispositivos (pero MTDs) y no Ofrecer un método de acceso contiguo. Copia de seguridad de estos como diseño físico a un archivo por lo tanto (lógicamente) no es posible. Copia de seguridad de los contenidos es.

Si intentas exportar tu MTD utilizando un demonio NBD, las cosas irán muy mal.

    
respondido por el Marcus Müller
0

Casi has llegado, pero el tamaño de bloque es solo una parte de la ecuación.

El problema aquí es que el nbd generalmente no tiene idea de qué tan grande es, por lo que usar dd como muestra el ejemplo intentará marcharse desde el final del dispositivo y producir un error de E / S. En los dispositivos de Sistemas Tecnológicos que usan sdctl, un nbd generalmente apunta a un eMMC local, SD u otro recurso de almacenamiento local.

Una cosa que puede hacer para confirmar esto es que lo que sucedió en el hardware de TS es ejecutar un par de comandos de diagnóstico con sdctl. Probablemente veas algo como esto:

# sdctl --stats
...
nbd_seek_past_eof_errs=3
...
# sdctl --dmesg
...
Jan  1 01:38:57 Access beyond EOF, sec=3776488, len=256, req=0
Jan  1 01:38:57 Access beyond EOF, sec=3776744, len=256, req=0
Jan  1 01:38:57 Access beyond EOF, sec=3776504, len=8, req=0

La forma de evitar el error de E / S (pasado el EOF) es dar siempre a su dd una restricción cuando se trata de controladores de almacenamiento que utilizan nbd, como:

dd if=/dev/nbd1 of=/my/backup.dd bs=1M count=1024 conv=fsync

Al proporcionar un recuento de los bloques que desea leer, puede evitar caerse del borde de sus medios. Blocksize y count pueden ser casi cualquier cosa, siempre y cuando bs * count < = tamaño real del medio.

    
respondido por el Nerf42

Lea otras preguntas en las etiquetas