Respuestas:
Intenta ejecutar el comando fdisk -l <img file>
. Por lo general, si los .img
archivos son discos completos de, por ejemplo, una máquina virtual KVM, técnicamente son un disco virtual.
Tengo una máquina virtual CentOS KVM que se muestra así con el file
comando:
$ file centostest.img
centostest.img: x86 boot sector; partition 1: ID=0x83, active, starthead 1, startsector 63, 208782 sectors; partition 2: ID=0x8e, starthead 0, startsector 208845, 20755980 sectors, code offset 0x48
Corriendo fdisk
con eso:
$ sudo /sbin/fdisk -lu /kvm/centostest.img
last_lba(): I don't know how to handle files with mode 81ed
You must set cylinders.
You can do this from the extra functions menu.
Disk /kvm/centostest.img: 0 MB, 0 bytes
255 heads, 63 sectors/track, 0 cylinders, total 0 sectors
Units = sectors of 1 * 512 = 512 bytes
Device Boot Start End Blocks Id System
/kvm/centostest.img1 * 63 208844 104391 83 Linux
/kvm/centostest.img2 208845 20964824 10377990 8e Linux LVM
Partition 2 has different physical/logical endings:
phys=(1023, 254, 63) logical=(1304, 254, 63)
Si desea montar una de estas particiones, puede hacerlo de la siguiente manera:
fdisk (salida del cilindro)Entonces el comando de montaje sería:
en cilindros$ mount -o loop,offset=32256 centostest.img /mnt/tmp
Para montar la otra partición (512 * 208845 = 106928640):
$ mount -o loop,offset=106928640 centostest.img /mnt/tmp
en sectores
$ mount -o loop,offset=512 centostest.img /mnt/tmp
Para montar la otra partición (512 * 14 = 7168):
$ mount -o loop,offset=7168 centostest.img /mnt/tmp
Esto solo funcionará si mount puede determinar el tipo de sistema de archivos dentro de la "partición" que está intentando montar. Es posible que deba incluir -t auto
o ser específico y decir mount
que es -t ext4
por ejemplo.
# fdisk -l gmapsupp.img Disk gmapsupp.img: 0 MB, 0 bytes 255 heads, 63 sectors/track, 0 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x00000000 Device Boot Start End Blocks Id System gmapsupp.img1 1 9 65536 0 Empty Partition 1 has different physical/logical endings: phys=(1023, 15, 8) logical=(8, 40, 32) Partition 1 does not end on cylinder boundary.
-t auto
pueda identificar el tipo de partición. Tendrás que probar otros para ver qué funciona.
W95 FAT16 (LBA)
-t vfat
no pudo montar mi primera partición.
Se usa parted
para identificar valores de desplazamiento.
root@mysystem:~/# parted myimage.img
GNU Parted 2.3
Using /root/myimage.img
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) u
Unit? [compact]? B
(parted) print
Model: (file)
Disk /root/myimage.img: 8589934592B
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Number Start End Size Type File system Flags
1 32256B 254983679B 254951424B primary ext3 boot
2 254983680B 1274918399B 1019934720B primary linux-swap(v1)
3 1274918400B 3323013119B 2048094720B primary ext3
4 3323013120B 8587192319B 5264179200B primary ext3
(parted)
Ahora tiene valores de desplazamiento y puede usarlos para montar sistemas de archivos.
# mount -o loop,offset=32256 myimage.img /mnt/disk1
# mount -o loop,offset=1274918400 myimage.img /mnt/disk2
# mount -o loop,offset=3323013120 myimage.img /mnt/disk3
Parece que @slm tiene algunas matemáticas inestables, o al menos no coincide con la fdisk -l
salida. De las revisiones parece que se agrega elu
parámetro a fdisk cambió de cilindros a sectores. No sé, pero no hace nada en la mía ya que el valor predeterminado debería ser sectores.
En mi imagen:
$ fdisk -l bone-debian-7.5-2015-01-14-beaglebone.img
Disk bone-debian-7.5-2015-01-14-beaglebone.img: 3.7 GiB, 3965190144 bytes, 7744512 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x00000000
Device Boot Start End Blocks Id System
bone-debian-7.5-2015-01-14-beaglebone.img1 * 2048 198655 98304 e W95 FAT16 (LBA)
bone-debian-7.5-2015-01-14-beaglebone.img2 198656 3481599 1641472 83 Linux
$ sudo mount -t vfat -o loop,offset=1048576,ro bone-debian-7.5-2015-01-14-beaglebone.img /mnt
Dónde
offset = Block size from 'Units' x Fdisk 'Start' column
En mi ejemplo, fdisk dice comenzar en 2048 * 512 tamaño de bloque = 1048576.
Una versión moderna del file
comando informa al sector de inicio de una manera mucho más conveniente que fdisk o parted:
file $img
Armbian_jw.img: DOS/MBR boot sector; partition 1 : ID=0x83, start-CHS (0x40,0,1), end-CHS (0x3ff,3,32), startsector 8192, 2883584 sectors
Esta salida de una línea se puede escribir así:
startsector=$(file $img | sed -n -e 's/.* startsector *\([0-9]*\),.*/\1/p')
offset=$(expr $startsector '*' 512)
echo $offset
4194304
sudo mount -o loop,offset=$offset $img /mnt
losetup -P
automatización
Los siguientes scripts montan automáticamente todas las particiones de una imagen.
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"
)
Probado en Ubuntu 16.04.
# mount -t auto -o ro,loop,offset=512 gmapsupp.img /mnt/iso/
\mount: you must specify the filesystem type