Como eu monto uma imagem de disco bruta com estrutura de partição complexa?

0

Eu tenho uma imagem de disco bruta criada por gddrescue . Eu não estou conseguindo montá-lo desde a sua estrutura de partição complexa.

Eu tentei primeiro com a opção losetup 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

O tamanho da partição informa que estou interessado em / dev / loop0p1p2.

Eu tentei criar um manual do dispositivo de loop. Se eu acertar, eu preciso de um offest de Start * Sector size (1830843506 * 512 = 937391875072) e um tamanho de sizelimit de Sectors * Sector size (1394635881 * 512 = 714053571072). Mas isso não 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.

Então eu dei kpartx uma alteração. Mas foi o mesmo:

# 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

Eu então tentei executar losetup com a opção portscan mas não tive sucesso:

# 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

Eu dei a kpartx uma chance em /dev/loop0p1 e recebi algumas mensagens de erro:

# 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

Apenas para mencionar: A montagem automática no Ubuntu 16.04 funciona bem com o disco original.

Alguém tem alguma ideia?

Estou tentando montar a imagem de disco com o Debian 8.

Como sugerido por @Kamil Maciorowski, tentei montar o arquivo de imagem diretamente com a opção offset . Este me dá um Input/output error ao listar o conteúdo:

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

Eu verifiquei novamente o deslocamento com fdisk no arquivo de imagem:

# 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
    
por jelhan 26.09.2016 / 16:05

1 resposta

2

A tabela de partição é muito simples: uma partição NTFS em offset comum.

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

O comando fdisk -lu /dev/loop0p1 lê a partição NTFS real como se fosse um disco com uma tabela de partição (embora pareça estranho para mim, você já tinha /dev/loop0p1 , kpartx foi usado mais tarde). Em muitos casos, fdisk avisa que a tabela de partição parece estranha, talvez tenha sido escolhido um dispositivo errado.

Aqui, eu acho, a "tabela de partição interna" não era estranha o suficiente para acionar o aviso. Ainda "partições" não estão em ordem, elas são de tipos incomuns, seus offsets e tamanhos não fazem sentido. Na minha opinião esta "tabela de partição interna" é inválida, tal configuração de partição seria muito estranha. Eu acho que há apenas uma partição NTFS que não deve ser tratada como um dispositivo particionado. Você pode montá-lo com o comando acima.

Note que você provavelmente não precisa de losetup . Eu acho que o seu fdisk pode ler o arquivo de imagem bem:

fdisk -lu silvio-extern.iso

Em sua saída, você pode informar o deslocamento 512*63 para usar com o comando mount (como mostrado acima), sem losetup .

    
por 26.09.2016 / 16:21