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

19

Solía ddhacer una copia de seguridad de una unidad de 80 GB

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

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

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

mount: you must specify the filesystem type

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

fox@shoebox $ 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.imgo debo usar ddpara restaurar la unidad?

zorro
fuente

Respuestas:

27

Cuando usa ddon en /dev/sdblugar de /dev/sdb1o /dev/sdb2, copia todas las particiones de dicha unidad en un archivo.

Debe montar cada partición por separado.


Para montar una partición desde un archivo , primero debe averiguar en qué parte del archivo reside esa partición.

Usando su salida de file -s sdb.imgencontramos el startsectorspara cada partición:

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

Partición      Inicio sector
1 63
2 10233405
3 82750815

Para montar una única partición, donde X está 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 , deberá ejecutar:

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

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

¡Que te diviertas!


actualización: en la respuesta, supuse que el tamaño del sector para su imagen era 512, por favor vea esta pregunta sobre cómo calcular eso.

Stefan
fuente
También puede obtener los sectores de inicio en formato tabular utilizando file -l sdb.imglo publicado en la respuesta a su pregunta: unix.stackexchange.com/questions/2668/…
estudiante
@student: Solo una corrección para futuros lectores: Eso no sería fdisk -lasí file -l.
Runium
Aclaración adicional: puede obtener el número de sectores de 512 bytes agregando la opción -u a ese comando, por lo tantofdisk -u -l sdb.img
Aaron Mason el
Si su versión de filemenos habladora por defecto, trate de añadir el -kinterruptor para obtener el tipo de resultado que se muestra en la respuesta - como esto: file -k FILENAME.img.
Christian Pietsch
7

En Linux, los comandos de montaje dentro de la respuesta aceptada crearán implícitamente un dispositivo de bucle. Suponiendo que la imagen del disco completo tiene una tabla de partición correcta (que su núcleo puede entender), puede preferir usar losetup(8)directamente para ahorrarle la molestia de calcular compensaciones. Tampoco hay necesidad de herramientas adicionales kpartxcomo las sugeridas en otra respuesta . Hará básicamente lo mismo que lo siguiente:

losetup -Prf sdb.imgasociará el primer dispositivo de bucle libre ( -f) como readonly ( -r) con el archivo de imagen sdb.img. La -Popción obliga al núcleo 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, solo lectura, por supuesto, en el punto de montaje deseado.

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

Mantener todo de solo lectura es opcional, pero puede ser una buena opción para una imagen de respaldo.

actualización: la -Popción se agregó 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 gestionados por vnconfig(8)y FreeBSD tiene discos de memoria gestionados por mdconfig(8).

escrl
fuente
2

Alternativamente, puede usar 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 hacer 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

Luego puede montar, /dev/mapper/loop0p2por ejemplo, si desea la segunda partición en la imagen.

Omer Dagan
fuente