¿Cómo obtener una imagen de una tarjeta SD solo con las particiones reales y no con el espacio vacío detrás de ellas?

¿Cómo obtener una imagen de una tarjeta SD solo con las particiones reales y no con el espacio vacío detrás de ellas?

Tengo una tarjeta SD de 16 GB (específicamente una tarjeta SD Mobian de arranque para un PinePhone) con dos particiones, con un total de 6 GB. El espacio restante no está asignado. ¿Cómo puedo obtener una imagen de 6 GB de la tarjeta SD?

Respuesta1

Es posible, con un comando ligeramente frágil, copiar la primera sección de una unidad a un archivo de imagen según lo solicitado. Sin embargo, hay algunas cosas a tener en cuenta:

  • Como se necesita acceso directo a los archivos del dispositivo desde la línea de comando, todo el comando debe ejecutarse como root(como en sudo suel comando antes de usar la solución).
  • La tabla de particiones de respaldo, si es una tabla de particiones GPT,voluntadNOser copiado.
  • El "truco" depende de que la tabla de particiones esté completa: se menciona el espacio no asignadorealmente esno asignada, no una partición que simplemente no deseas copiar.
  • El tabique, o tabiques, se recogen en la parte frontal. Si tienen un espacio, ese espacio se copiará.
  • Depende de que su sistema tenga instalados tanto el fdiskcomando (probable) como el bccomando (posible). Ambos son estándar y se pueden instalar desde su repositorio predeterminado si es necesario.
  • El archivo de imagen será propiedad de root, por lo que tendrás que acceder a chownél si necesitas que el usuario tenga acceso completo.

Aquí está el comando completo, dividido en líneas para que sea más fácil de leer.

dd if=/dev/sdx of=Mobian.img\
    bs="$(fdisk -l /dev/sdx | grep sectors | tail -1 | cut -d' ' -f6)"\
    count="$(echo "$(fdisk -o end -l /dev/sdx | tail -1) + 1"|bc)"\
    status=progress

El desglose:

En primer lugar, es /dev/sdxnecesario cambiarlo para reflejar el nombre correcto del dispositivo, a menos que tenga otros 23 discos previamente conectados.

La primera línea es el comando esperado dd, con el nombre del dispositivo y el nombre del archivo configurados según sus necesidades actuales.

La segunda línea establece el tamaño del bloque para ddel tamaño del sector de la tarjeta SD. Es casi seguro que son 512 bytes. Si está 100% seguro de que es 512, puede reemplazar la línea con bs=512. Si desea estar seguro y mantener el comando utilizable en cualquier dispositivo en el futuro, guarde el material adicional allí. La operación es:

  • fdisk -l /dev/sdxinformar datos sobre el dispositivo
  • grep sector'sector' aparece dos veces en la salida
  • tail -1solo obtienes la última línea con 'sector' en ella
  • cut -d' ' -f6usando espacios entre campos solo se obtiene el sexto campo (el tamaño del sector en bytes)

La tercera línea indica ddcuántos 'bloques' de tamaño bs=copiar. Nuevamente, si sabe exactamente cuál es ese número, úselo en lugar del comando. Para "prepararlo para el futuro", he mantenido el comando completo, nuevamente:

- `fdisk -o end -l /dev/sdx` list the partition information about the device, and only output the ending sector ID of each `-o end`
- `tail -1` it don't matter how many there are, we only need the last sector of the last partion.
- `echo "... + 1" | bc` add one to the last sector ID. Uses the `bc` command, which is in integers unless told otherwise. Sectors are numbered from zero, to to copy sector #10 we have to copy 10 + 1 sectors (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10)

La cuarta línea es por valor de entretenimiento. Una buena tarjeta, clase de velocidad 10, tardará casi 4 minutos en leer 6 Gigas de datos. la status=progressopción ddprovocará actualizaciones en el terminal a medida que "progrese". De lo contrario, solo tendrás un terminal esperando el comando para finalizar, lo que parecerá una eternidad.

Final: si está seguro de que lo que está copiando es estándar, con particiones alineadas correctamente y exactamente 6 GiB, puede usar el comando simple de:

dd if=/dev/sdx of=Mobian.img bs=1048576 count=6145 status=progress

Por supuesto, una vez que crean una nueva imagen y usted cambia a esa, todas las apuestas se cancelan con la versión corta. La parte superior original seguirá funcionando. También funcionará para otras 'imágenes' que quizás necesites copiar más adelante.

Prima:

Si por alguna razón no te gusta dd, puedes usar los mismos pasos de recopilación de números y aplicar el headcomando en su lugar:

head -c $(\echo "\
    "$(fdisk -l /dev/sdx | grep sectors | tail -1 | cut -d' ' -f6)" *\
    ("$(fdisk -o end -l /dev/sdx | tail -1)" + 1)" | bc)\
    /dev/sdx > Mobian.img

Como una sola línea:

head -c $(\echo " "$(fdisk -l /dev/sdx | grep sectors | tail -1 | cut -d' ' -f6)" * ("$(fdisk -o end -l /dev/sdx | tail -1)" + 1)" | bc) /dev/sdx > Mobian.img'

Respuesta2

Puede utilizar el comando dd de Linux. Tiene la opción de leer ambas particiones individualmente y concatenarlas posteriormente o hacer algunos cálculos para determinar el último sector de la segunda partición. Luego ejecutaría el comando dd usando los parámetros bs (tamaño de bloque) y count (número de bloques) para que la copia finalice al final de la segunda partición.

información relacionada