Hice una imagen de todo mi disco con
dd if=/dev/sda of=/media/external_media/sda.img
Ahora el problema es que me gustaría montar un sistema de archivos ext4 que estaba en ese disco pero
mount -t ext4 -o loop /media/external_media/sda.img /media/sda_image
Obviamente da un error de superbloque ya que la imagen contiene todo el disco (MBR, otras particiones), no solo la partición que necesito. Así que supongo que debería encontrar una manera de hacer que la imagen del disco aparezca en la /dev/
carpeta...
¿Alguien sabe cómo hacer eso?
PD: siempre puedo dd
hacer una copia de seguridad de la imagen en el disco original, pero eso sería muy inconveniente (actualicé el sistema operativo y me gustaría mantenerlo como está)
Respuesta1
Obtener el diseño de partición de la imagen.
$ sudo fdisk -lu sda.img
...
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
...
Device Boot Start End Blocks Id System
sda.img1 * 56 6400000 3199972+ c W95 FAT32 (LBA)
Calcule el desplazamiento desde el inicio de la imagen hasta el inicio de la partición
Tamaño del sector*Comenzar= (en el caso) 512 * 56 =28672
Móntelo en /dev/loop0 usando el desplazamiento
sudo losetup -o 28672 /dev/loop0 sda.img
Ahora la partición reside en/dev/bucle0. Puedefsckmontarlo, etc.
sudo fsck -fv /dev/loop0
sudo mount /dev/loop0 /mnt
Desmontar
sudo umount /mnt
sudo losetup -d /dev/loop0
Respuesta2
Actualización para Ubuntu 16.04:Con lo nuevo losetup
esto ahora es más fácil:
sudo losetup -Pf disk_image.raw
Consulte el resto de la respuesta para versiones anteriores de Ubuntu.
Una solución fácil es usarkpartx: descubrirá el diseño de la partición y asignará cada una a un dispositivo de bloque. Después de eso lo único que tienes que hacer es montar el que quieras.
Abra Terminal, ubique la imagen del disco e ingrese este comando:
$ sudo kpartx -av disk_image.raw
add map loop0p1 (252:2): 0 3082240 linear /dev/loop0 2048
add map loop0p2 (252:3): 0 17887232 linear /dev/loop0 3084288
Esta creado loop0p1
y loop0p2
bajo /dev/mapper
. En el resultado puede ver los tamaños de las particiones, lo que le ayuda a identificarlas. Puedes montar el que quieras con:
$ sudo mount /dev/mapper/loop0p2 /mnt
Alternativamente, Nautilus detecta el dispositivo de bloque y puede montarlo desde la barra lateral:
Cuando haya terminado, desmonte lo que montó y elimine la asignación del dispositivo:
$ sudo umount /mnt
$ sudo kpartx -d disk_image.raw
Respuesta3
Editar: funciona conutilidad-linux >=2.21. Al momento de escribir este artículo, Ubuntu viene con la versión2.20solo
Dehombre perdido:
-P, --partscan
force kernel to scan partition table on newly created loop device
así que solo corre
$ sudo losetup -f --show -P /path/to/image.img
para crear nodos de dispositivo para cada partición de la imagen de su disco en el primer dispositivo de bucle no utilizado e imprimirlo en la salida estándar. Si usa /dev/loop0
un dispositivo, al menos podrá /dev/loop0p1
montarlo como de costumbre.
Respuesta4
losetup -P
automatización
losetup -P
es el mejor método a partir de Ubuntu 16.04 como se menciona enhttps://askubuntu.com/a/496576/52975, aquí hay funciones para automatizar si hay más. Uso:
$ los my.img
/dev/loop0
/mnt/loop0p1
/mnt/loop0p2
$ ls /mnt/loop0p1
/whatever
/files
/youhave
/there
$ sudo losetup -l
NAME SIZELIMIT OFFSET AUTOCLEAR RO BACK-FILE DIO
/dev/loop1 0 0 0 0 /full/path/to/my.img
$ # Cleanup.
$ losd 0
$ ls /mnt/loop0p1
$ ls /dev | grep loop0
loop0
Fuente:
los() (
img="$1"
dev="$(sudo losetup --show -f -P "$img")"
echo "$dev"
for part in "$dev"?*; do
if [ "$part" = "${dev}p*" ]; then
part="${dev}"
fi
dst="/mnt/$(basename "$part")"
echo "$dst"
sudo mkdir -p "$dst"
sudo mount "$part" "$dst"
done
)
losd() (
dev="/dev/loop$1"
for part in "$dev"?*; do
if [ "$part" = "${dev}p*" ]; then
part="${dev}"
fi
dst="/mnt/$(basename "$part")"
sudo umount "$dst"
done
sudo losetup -d "$dev"
)
configuración del módulo de bucle max_part
Este es un método decente antes del 16.04.
loop
es un módulo del kernel, integrado en el kernel de Ubuntu 14.04.
Si lo configura correctamente, Linux divide automáticamente los dispositivos por usted.
cat /sys/module/loop/parameters/max_part
dice cuántas particiones loop
pueden generar los dispositivos.
Está 0
predeterminado en Ubuntu 14.04, por lo que no se produce ninguna división automática.
Para cambiarlo, podemos agregar:
options loop max_part=31
a un archivo en /etc/modprobe
, o:
GRUB_CMDLINE_LINUX="loop.max_part=31"
hasta /etc/default/grub
y luego sudo update-grub
.
También se explica cómo configurar un parámetro de módulo en:¿Cómo agregar parámetros del módulo del kernel?
Después de reiniciar, cuando lo hagas:
sudo losetup -f --show my.img
monta la imagen en un /dev/loopX
dispositivo y monta automáticamente las particiones en /dev/loopXpY
los dispositivos.
Este es el método más conveniente si está dispuesto a reiniciar.
Ver también
- https://unix.stackexchange.com/questions/9099/reading-a-filesystem-from-a-whole-disk-image
- https://superuser.com/questions/117136/how-can-i-mount-a-partition-from-dd-created-image-of-a-block-device-eg-hdd-u
- Montar una partición única a partir de la imagen de todo el disco (dispositivo)
- https://stackoverflow.com/questions/1419489/loopback-mounting-individual-partitions-from-within-a-file-that-contains-a-parti