¿Cómo puedo montar una imagen de disco sin formato con una estructura de partición compleja?

0

Tengo una imagen de disco cruda creada por gddrescue . Estoy fallando en montarlo ya que es una estructura de partición compleja.

Probé primero con losetup Opción portscan.

# losetup -Pf --show -v silvio-extern.iso 
/dev/loop0

# fdisk -lu /dev/loop0

Disk /dev/loop0: 298,1 GiB, 320072933376 bytes, 625142448 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: 0x88c8fbd4

Device       Boot Start       End   Sectors   Size Id Type
/dev/loop0p1         63 625137344 625137282 298,1G  7 HPFS/NTFS/exFAT

# fdisk -lu /dev/loop0p1 

Disk /dev/loop0p1: 298,1 GiB, 320070288384 bytes, 625137282 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: 0x444c544e

Device         Boot      Start        End    Sectors  Size Id Type
/dev/loop0p1p1 ?    1768778098 1776409558    7631461  3,7G 6b unknown
/dev/loop0p1p2 ?    1830843506 3225479386 1394635881  665G 75 PC/IX
/dev/loop0p1p3 ?    1718906437 1718909009       2573  1,3M 41 PPC PReP Boot
/dev/loop0p1p4      2827157504 2827210421      52918 25,9M  0 Empty

Partition table entries are not in disk order.

# fdisk -lu /dev/loop0p1p2
fdisk: cannot open /dev/loop0p1p2: No such file or directory

El tamaño de la partición me dice que estoy interesado en / dev / loop0p1p2.

Intenté crear un manual de dispositivo de bucle. Si lo hago bien, necesito una versión de Start * Sector size (1830843506 * 512 = 937391875072) y un sizelimit de Sectors * Sector size (1394635881 * 512 = 714053571072). Pero no funciona:

# losetup -o 937391875072 --sizelimit 714053571072 --show -v -f /dev/loop0p1
/dev/loop1

# fdisk -lu /dev/loop1
fdisk: cannot open /dev/loop1: Inappropriate ioctl for device

# mount /dev/loop1 content/
mount: /dev/loop1 is write-protected, mounting read-only
mount: wrong fs type, bad option, bad superblock on /dev/loop1,
       missing codepage or helper program, or other error

       In some cases useful info is found in syslog - try
       dmesg | tail or so.

Así que di kpartx un cambio. Pero fue lo mismo:

# kpartx -av silvio-extern.iso 
add map loop0p1 (253:2): 0 625137282 linear /dev/loop0 63

# fdisk -lu /dev/loop0p1

Disk /dev/loop0p1: 298.1 GiB, 320070288384 bytes, 625137282 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: 0x444c544e

Device         Boot      Start        End    Sectors  Size Id Type
/dev/loop0p1p1 ?    1768778098 1776409558    7631461  3.7G 6b unknown
/dev/loop0p1p2 ?    1830843506 3225479386 1394635881  665G 75 PC/IX
/dev/loop0p1p3 ?    1718906437 1718909009       2573  1.3M 41 PPC PReP Boot
/dev/loop0p1p4      2827157504 2827210421      52918 25.9M  0 Empty

Partition table entries are not in disk order.

# fdisk -lu /dev/loop0p1p2
fdisk: cannot open /dev/loop0p1p2: No such file or directory

Entonces traté de correr losetup con la opción portscan pero no tuvo éxito:

# losetup -Pf --show -v /dev/loop0p1 
/dev/loop1

# fdisk -lu /dev/loop1

Disk /dev/loop1: 298.1 GiB, 320070288384 bytes, 625137282 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: 0x444c544e

Device       Boot      Start        End    Sectors  Size Id Type
/dev/loop1p1 ?    1768778098 1776409558    7631461  3.7G 6b unknown
/dev/loop1p2 ?    1830843506 3225479386 1394635881  665G 75 PC/IX
/dev/loop1p3 ?    1718906437 1718909009       2573  1.3M 41 PPC PReP Boot
/dev/loop1p4      2827157504 2827210421      52918 25.9M  0 Empty

Partition table entries are not in disk order.

# fdisk -lu /dev/loop1p2
fdisk: cannot open /dev/loop1p2: No such file or directory

Di kpartx un intento de /dev/loop0p1 y obtuve algunos mensajes de error:

# kpartx -av /dev/loop0p1 
device-mapper: reload ioctl on loop0p1p1 failed: Invalid argument
create/reload failed on loop0p1p1
add map loop0p1p1 (0:0): 0 7631461 linear /dev/loop0p1 1768778098
device-mapper: reload ioctl on loop0p1p2 failed: Invalid argument
create/reload failed on loop0p1p2
add map loop0p1p2 (0:0): 0 1394635881 linear /dev/loop0p1 1830843506
device-mapper: reload ioctl on loop0p1p3 failed: Invalid argument
create/reload failed on loop0p1p3
add map loop0p1p3 (0:0): 0 2573 linear /dev/loop0p1 1718906437
device-mapper: reload ioctl on loop0p1p4 failed: Invalid argument
create/reload failed on loop0p1p4
add map loop0p1p4 (0:0): 0 52918 linear /dev/loop0p1 2827157504

Solo por mencionar: el montaje automático en Ubuntu 16.04 funciona bien con el disco original.

¿Alguien tiene alguna idea?

Estoy tratando de montar la imagen de disco con Debian 8.


Según lo sugerido por @Kamil Maciorowski, he intentado montar el archivo de imagen directamente con offset opción. Este me da un Input/output error al listar contenido:

# mount -o offset=$((512*63)) silvio-extern.iso content/
# ls -l content/
ls: reading directory content/: Input/output error
total 0

He comprobado doble compensación con fdisk contra archivo de imagen:

# fdisk -lu silvio-extern.iso 

Disk silvio-extern.iso: 298.1 GiB, 320072933376 bytes, 625142448 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: 0x88c8fbd4

Device             Boot Start       End   Sectors   Size Id Type
silvio-extern.iso1         63 625137344 625137282 298.1G  7 HPFS/NTFS/exFAT
jelhan
fuente
1
¿Por qué habría particiones anidadas?
Daniel B
@DanielB No tengo idea. No he creado ni he usado ese disco. Acabo de recibirlo después de que se rompió. Kamil Maciorowski incluyó una posible razón por lo tanto en su respuesta.
jelhan

Respuestas:

2

La tabla de particiones es muy simple: una partición NTFS en un desplazamiento común.

sudo mount -o offset=$((512*63)) silvio-extern.iso /path/to/mountpoint

El comando fdisk -lu /dev/loop0p1 lee la partición NTFS real como si fuera un disco con una tabla de particiones (aunque me parece extraño que ya tuvieras /dev/loop0p1, kpartx fue utilizado más tarde). En muchos casos fdisk advierte que la tabla de particiones parece rara, tal vez se eligió un dispositivo incorrecto.

Aquí, supongo, la "tabla de partición interna" no era lo suficientemente extraña como para activar la advertencia. Las "particiones" aún no están en orden, son de tipos poco comunes, sus compensaciones y tamaños no tienen sentido. En mi opinión, esta "tabla de partición interna" no es válida, tal configuración de partición sería muy extraña. Creo que solo hay una partición NTFS que no debería tratarse como un dispositivo particionado. Puedes montarlo con el comando anterior.


Tenga en cuenta que probablemente no necesita losetup. Creo que su fdisk Puede leer el archivo de imagen muy bien:

fdisk -lu silvio-extern.iso

Desde su salida se puede distinguir el offset. 512*63 para usar con el mount comando (como se muestra arriba), sin losetup en absoluto.

Kamil Maciorowski
fuente
También traté de eso, pero estoy recibiendo una Input/output error al intentar listar el contenido del directorio donde he montado el archivo de imagen con desplazamiento. He añadido más información a la pregunta.
jelhan
@Jelhan El montaje en sí mismo es exitoso, todavía creo que esto es lo correcto. Este error puede indicar un problema con el sistema de archivos NTFS o, supongo, con su dispositivo físico (donde se encuentra la imagen). Hay algo interesante en dmesg ( dmesg | tail -n 20 ) justo después del error?
Kamil Maciorowski
@jelhan Parece que algo no está bien con el sistema de archivos NTFS. Puede considerar montar en modo de solo lectura para evitar más daños. En tu caso esto será mount -o ro,offset=…
Kamil Maciorowski
Así que tal vez la imagen creada por gddrescue está corrupta. No tengo tiempo para crear otro. Aceptará tu respuesta.
jelhan