it-swarm-es.tech

¿Cómo se monta un `img` creado con / bin / dd de un disco duro?

Usé dd para hacer una copia de seguridad de una unidad 80GB

dd if=/dev/sdb of=~/sdb.img

Ahora necesito acceder a algunos archivos en esa unidad, pero no quiero copiar el ".img" de nuevo en la unidad.

mount ~/sdb.img /mnt/sdb tampoco funciona. Vuelve :

mount: you must specify the filesystem type

Intenté encontrar el tipo de sistema de archivos con file -s

[email protected] $ file -s sdb.img
sdb.img: x86 boot sector; partition 1: ID=0x12, starthead 1, startsector 63, 10233342 sectors; partition 2: ID=0xc, active, starthead 0, startsector 10233405, 72517410 sectors; partition 3: ID=0xc, starthead 0, startsector 82750815, 73545570 sectors, code offset 0xc0

¿Es posible montar sdb.img, ¿o debo usar dd para restaurar la unidad?

19
fox

Cuando usa dd en /dev/sdb en vez de /dev/sdb1 o /dev/sdb2, copia todas las particiones de dicha unidad en una archivo.

Debe montar cada partición por separado.


Para montar una partición de un archivo , primero debe averiguar dónde en el archivo que reside la partición.

Usando su salida de file -s sdb.img encontramos el startsectors para cada partición:

sdb.img: sector de arranque x86; partición 1 : ID = 0x12, starthead 1, startsector 63 , 10233342 sectores; partición 2 : ID = 0xc, activo, cabeza inicial 0, sector inicial 10233405 , 72517410 sectores; partición 3 : ID = 0xc, starthead 0, startsector 82750815 , 73545570 sectores, compensación de código 0xc0

Partición Sector de inicio
1 63
2 10233405
3 82750815

Para montar una sola partición, donde X es el sector de inicio de esa partición, ejecute:

mount ~/sdb.img /mnt/sdb -o offset=$((X*512))

Entonces, para montar la segunda partición , tendrá que ejecutar:

mount ~/sdb.img /mnt/sdb2 -o offset=$((10233405*512))

nota al margen: asegúrese de que /mnt/sdb2 existe antes de ejecutar esto.

¡Que te diviertas!


actualización: En la respuesta, asumí que el tamaño del sector para su imagen era 512, consulte esta pregunta sobre cómo calcular eso.

27
Stefan

En Linux, los comandos de montaje dentro de respuesta aceptada crearán implícitamente un dispositivo de bucle. Suponiendo que la imagen del disco completo tiene una tabla de particiones correcta (que su kernel es capaz de entender), es posible que prefiera usar losetup(8) directamente para ahorrarle la molestia de calcular compensaciones. Además, no hay necesidad de herramientas adicionales como kpartx como se sugiere en otro respuesta . Hará básicamente lo mismo que lo siguiente:

losetup -Prf sdb.img Asociará el primer dispositivo de bucle libre (-f) Como de solo lectura (-r) Con el archivo de imagen sdb.img. La opción -P Fuerza al kernel a escanear la tabla de particiones de este dispositivo de bucle y creará dispositivos de bucle para cada partición.

Entonces puede obtener algo como:

$ lsblk
NAME      MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
loop0       7:0    0 167.7G  1 loop
├─loop0p1 259:0    0   500M  1 loop
└─loop0p2 259:1    0 167.2G  1 loop
...

Ahora puede montar cada partición, de solo lectura, por supuesto, en un punto de montaje deseado.

$ mount -r /dev/loop0p1 /tmp/backup_sdb1

Mantener todo en modo de solo lectura es opcional, pero puede ser bueno para una imagen de respaldo.

actualización: Se agregó la opción -P con util-linux-2.21 en 2012. Por lo tanto, no estaba disponible en el momento en que se escribió la respuesta aceptada. También tenga en cuenta que esta y las otras respuestas son específicas de Linux. OpenBSD y NetBSD tienen discos vnode administrados por vnconfig(8) y FreeBSD tiene discos de memoria administrados por mdconfig(8) .

7
escrl

Alternativamente, puede utilizar una buena herramienta llamada kpartx. Desde la página del manual:

kpartx: crea mapas de dispositivos a partir de tablas de particiones

Esto significa que puede crear un "pseudo dispositivo", con particiones de dispositivo, directamente desde el archivo img:

$ kpartx -av sdb.img
add map loop0p1 (254:2): 0 2048 linear /dev/loop0 0
add map loop0p2 (254:3): 0 31162 linear /dev/loop0 2048
$ lsblk
.
.
.
loop0                     7:0    0  16.2M  0 loop
├─loop0p1               254:2    0     1M  0 part
└─loop0p2               254:3    0  15.2M  0 part

Entonces puedes montar /dev/mapper/loop0p2 por ejemplo, si desea la segunda partición en la imagen.

2
Omer Dagan