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.