Informática y tecnología

Etiqueta: dd

Información y barra de progreso de un comando que has lanzado previamente y que se demora demasiado tiempo

En una entrada anterior os expliqué como hacer una copia de una tarjeta micro SD dañada de una Raspberry Pi 400. El caso es que el comando de copia del estilo:

dd if=/dev/sdb of=/dev/sdc

tarda mucho tiempo en terminar. Además no ofrece información de como va el proceso y podemos llegar a pensar que se ha bloqueado.

Yo conocía el comando ‘pv’, que muestra información de como va la trasferencia de un fichero. El problema era que ya había lanzado el comando ‘dd’ y no quería detenerlo para volver a lanzarlo usando ‘pv’. Pues llevaba ya varias horas de procesamiento.

Rebuscando en la pagina de manual de Linux (comando ‘man pv‘) encontré que se podía lanzar el comando con la opción -d que indica que muestre el progreso de un descriptor de fichero de un proceso en ejecución.

Abrimos otra terminal distinta a la en que hemos lanzado el comando dd. Los comandos a ejecutar son los siguientes: (lo he hecho como root)

pv -d <PID>:<FD>
Como añadir una barra de progreso para un proceso activo.

Con el comando ‘ps’ encontramos el PID del proceso que esta tardando demasiado, en este caso el 5464. Con el comando ‘ls’ encontramos los descriptores de fichero que tiene abiertos dicho proceso. 0 es la entrada estándar, 1 la salida estándar, y 2 la salida de error estándar. El descriptor que buscamos es el 0. El comando ‘pv’ muestra el progreso de lectura del descriptor de fichero 0 del proceso 5464. Como podéis ver se muestran los Gigas copiados, cuanto lleva ejecutándose el comando, la velocidad de transferencia, la barra de progreso, el porcentaje de lo ya copiado y el tiempo estimado para acabar.

Nota: Es posible que en vuestro sistema no encontréis el comando ‘pv’. Para instalarlo:

sudo apt install pv

Recuperar sistema tras error en la tarjeta micro SD de una Raspberry Pi

Hoy os voy a contar el proceso que he seguido para recuperar el sistema operativo sin perder datos en una Raspberry pi 400.

El problema: Una Raspberry Pi 400 con una tarjeta micro SD de 128 GB. Sistema operativo (en adelante SO) instalado en la micro SD: Ubuntu 22.4 64 bits. Tras un reinicio del sistema, este no arranca. Al iniciar se nos queda en una pantalla de consola que se identifica como BusyBox.

Esto del Busybox es un mini sistema operativo que en este caso se utiliza para intentar recuperar el sistema.

Intento lo siguiente, para descubrir el nombre de las particiones:

/sbin/fdisk -l

y después intento repararla con el comando fsck

fsck <nombre_de_la_partición>

Por desgracia no es posible recuperarse del error porque me da el mensaje: «unable to set superblock flags». Es decir tengo una SD en la que no se puede escribir pero todavía se puede leer.

La tarjeta micro SD está dañada, pero no está todo perdido. Aunque, eso sí, toca comprar una tarjeta micro SD nueva de igual o mayor capacidad.

Ya con la nueva tarjeta, lo que voy a hacer ahora es hacer una copia de la tarjeta vieja y duplicarla en la tarjeta nueva. Esto puede hacerse de varias maneras pero os voy a explicar como lo hice yo.

En primer lugar necesitamos un equipo distinto y un lector USB de tarjetas SD (si el equipo no dispone de ranuras para tarjetas de memoria). Si no tenemos otro equipo podríamos usar la misma Raspberry Pi con otro SO basado en Linux y un lector de tarjetas USB para la tarjeta dañada y luego para la nueva, ya que la ranura micro SD estará ocupada por la tarjeta del sistema operativo.

En mi caso contaba con un ordenador con SO Debian y un adaptador de tarjetas SD a USB. Arranco el sistema con la tarjeta SD dañada dentro del adaptador USB. Abro una consola de comandos y ejecuto el comando:

fdisk -l

Hay que identificar el nombre del dispositivo del la tarjeta SD. En mi caso lo reconozco porque en la salida del comando pone ‘Modelo de disco: Flash Reader’. que esta identificado como ‘/dev/sdb’. Quédate con este nombre porque lo necesitaremos en el siguiente comando.

Ahora vamos a hacer la copia de la tarjeta. Si dispusiésemos de dos ranuras micro SD podríamos hacer hacer la copia directamente de una tarjeta a otra. Pero lo mas normal es que solo tengamos un adaptador de tarjetas SD a USB. La solución en mi caso es hacer la copia de la tarjeta a un disco duro y después sustituir la tarjeta dañada por la nueva en el adaptador USB y copiar el fichero a la tarjeta.

el comando para hacer la copia es ‘dd’ al que se le pasan al menos dos parámetros if que indica el fichero de entrada y of que indica el fichero de salida:

dd if=/dev/sdb of=~auxfile

Después de realizar la copia, que tardará un rato largo, sustituimos la tarjeta dañada por la nueva y ejecutamos el siguiente comando:

dd if=~auxfile of=/dev/sdb

Con esto ya habríamos hecho la copia. Sacamos la tarjeta del adaptador y la introducimos en la Raspberry Pi, y a correr.