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 ensudo su
el 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
fdisk
comando (probable) como elbc
comando (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/sdx
necesario 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 dd
el 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/sdx
informar datos sobre el dispositivogrep sector
'sector' aparece dos veces en la salidatail -1
solo obtienes la última línea con 'sector' en ellacut -d' ' -f6
usando espacios entre campos solo se obtiene el sexto campo (el tamaño del sector en bytes)
La tercera línea indica dd
cuá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=progress
opción dd
provocará 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 head
comando 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.