Montando um arquivo de imagem de disquete antigo (formato .ima) - quão difícil pode ser?


10

Estou tentando mountacessar um arquivo de imagem de disquete no formato .ima (despejo bruto para disquete, semelhante ao .img ) no ArchLinux.

Este arquivo faz parte de um conjunto de 30. Não é inicializável, mas sim uma continuação de um conjunto. O objetivo não é manipulação para instalação ou clonagem. Estou interessado na documentação contida com outros dados no disco.

Informações do arquivo de imagem

Aqui estão algumas informações sobre este arquivo de imagem:

# file U19.IMA
U19.IMA: PC formatted floppy with no filesystem

# fdisk -lu U19.IMA
Disk U19.IMA: 1.4 MiB, 1474560 bytes, 2880 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

(parted) print
Error: /home/meh/Downloads/U19.IMA: unrecognised disk label
Model: (file)
Disk /home/meh/Downloads/U19.IMA: 1475kB
Sector size (logical/physical): 512B/512B
Partition Table: unknown
Disk Flags:

Falha na montagem

Aqui está a mensagem de erro genérica:

mount -o ro,loop U19.IMA /mnt/cd/
mount: wrong fs type, bad option, bad superblock on /dev/loop0,
missing codepage or helper program, or other error

Eu tentei muitas combinações tentando especificar um tipo com -t ou seja, ntfs, msdos, iso9660, vfat e sempre obtendo o mesmo erro. Eu pensei que talvez seja algum tipo de formato de arquivo NTFS, mas o NTFS-3G não faz muito melhor, então não, não é:

# ntfs-3g -o loop U19.IMA /mnt
NTFS signature is missing.
Failed to mount '/home/meh/Downloads/U19.IMA': Invalid argument
The device '/home/meh/Downloads/U19.IMA' doesn't seem to have a valid NTFS.
Maybe the wrong device is used? Or the whole disk instead of a
partition (e.g. /dev/sda, not /dev/sda1)? Or the other way around?

# ntfsclone -r -o file.img U19.IMA
ntfsclone v2013.1.13 (libntfs-3g)
ERROR: Input file is not an image! (invalid magic)

Alguém sugeriu talvez um Minix fs. Embora não esteja claro se posso realmente montar um sistema de arquivos com a minha configuração atual, tentei:

mount -t minix -o loop U19.IMA /mnt/cd
which gave the generic error but there was this at the bottom of the log:
VFS: Can't find a Minix filesystem V1 | V2 | V3 on device loop0.

Parece que isso não é conclusivo, pois ao especificar um tipo específico de sistema de arquivos, você terá um tipo específico de erro no log. Também tentei [fuseiso][2]:

# fuseiso U19.IMA /mnt/cd
init: wrong standard identifier in volume descriptor 0, skipping..
init: wrong standard identifier in volume descriptor 1, skipping..
init: wrong standard identifier in volume descriptor 2, skipping..
init: wrong standard identifier in volume descriptor 3, skipping..
init: wrong standard identifier in volume descriptor 4, skipping..
init: wrong standard identifier in volume descriptor 5, skipping..
init: wrong standard identifier in volume descriptor 6, skipping..
init: wrong standard identifier in volume descriptor 7, skipping..
init: wrong standard identifier in volume descriptor 8, skipping..
init: wrong standard identifier in volume descriptor 9, skipping..
init: wrong standard identifier in volume descriptor 10, skipping..
init: wrong standard identifier in volume descriptor 11, skipping..
init: wrong standard identifier in volume descriptor 12, skipping..
init: wrong standard identifier in volume descriptor 13, skipping..
init: wrong standard identifier in volume descriptor 14, skipping..
init: wrong standard identifier in volume descriptor 15, skipping..
init: wrong standard identifier in volume descriptor 16, skipping..
init: wrong standard identifier in volume descriptor 17, exiting..

Onde eu posso ver essas coisas com dmesg:

[ 5316.082629] FAT-fs (loop0): invalid media value (0xf6)
[ 5316.082644] FAT-fs (loop0): Can't find a valid FAT filesystem

Além disso, lsmod | grep loop

loop 18511 0

Não há superbloco alternativo de qualquer tipo:

# mkfs -n U19.IMA
mke2fs 1.42.8 (20-Jun-2013)
U19.IMA is not a block special device.
Proceed anyway? (y,n) y
Filesystem label=
OS type: Linux
Block size=1024 (log=0)
Fragment size=1024 (log=0)
Stride=0 blocks, Stripe width=0 blocks
184 inodes, 1440 blocks
72 blocks (5.00%) reserved for the super user
First data block=1
Maximum filesystem blocks=1572864
1 block group
8192 blocks per group, 8192 fragments per group
184 inodes per group

Ao contrário de muitos casos que li, parece não haver necessidade de especificar nenhum deslocamento aqui, pois não há partição criada na imagem. Nesses casos, às vezes o ddcomando é usado para transferir o conteúdo para uma imagem semelhante usando um valor de deslocamento que permite a montagem. Parece o mesmo que especificar mountdiretamente um deslocamento para o comando. Mas isso deve ser fácil, como neste outro caso em que um simples losetupé usado e o dispositivo de loop é montado. Posso vincular o arquivo .ima ao losetup, mas quando tento montar o dispositivo de loop, acabo com minha mensagem de erro inicial.

Integridade de dados

Por fim, safecopy --stage1não relata nenhum problema com os dados e a saída até o estágio 3 permanece a mesma e gera o mesmo erro:

# safecopy U19.IMA test.img --stage1
Low level device calls enabled mode: 2
Reported hw blocksize: 4096
Reported low level blocksize: 4096
File size: 1474560
Blocksize: 4096
Fault skip blocksize: 147456
Resolution: 147456
Min read attempts: 1
Head moves on read error: 0
Badblocks output: stage1.badblocks
Marker string: BaDbLoCk
Starting block: 0
Source: U19.IMA
Destination: test.img
. ;-} 100%
Done!
Recovered bad blocks: 0
Unrecoverable bad blocks (bytes): 0 (0)
Blocks (bytes) copied: 360 (1474560)

Aqui está a parte superior do arquivo e o conteúdo parece intacto:

dd if=U19.IMA | hexdump -C | head -n 10
00000000 f6 f6 f6 f6 f6 f6 f6 f6 f6 f6 f6 f6 f6 f6 f6 f6 |................|
*
00004600 34 2e 30 2e 32 20 33 38 36 75 6e 69 78 20 46 6e |4.0.2 386unix Fn|
00004610 64 20 53 65 74 20 35 20 6f 66 20 31 30 0a 00 00 |d Set 5 of 10...|
00004620 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|

"Forense"

Como uma imagem não processada consiste em uma cópia binária setor a setor da mídia de origem, o formato real do conteúdo do arquivo dependerá do sistema de arquivos do disco do qual a imagem foi criada (como uma versão do FAT). [...] Como os arquivos IMG não contêm dados adicionais além do conteúdo do disco, esses arquivos só podem ser manipulados por programas que podem detectar seus sistemas de arquivos.

Seguindo as sugestões, procedi à análise de alguns dos outros arquivos de imagem do conjunto (30):

fdisk -lu U14.IMA
Disk U14.IMA: 1.4 MiB, 1474560 bytes, 2880 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
This doesn't look like a partition table. Probably you selected the wrong device.

Device Boot Start End Blocks Id System
U14.IMA1   3840       11519      3840       0  Empty
U14.IMA2   2425393152 4850786447 1212696648 0  Empty
U14.IMA3 ? 2425393296 4850786591 1212696648 90 Unknown
U14.IMA4 ? 2425393296 4850786591 1212696648 90 Unknown

Desculpe, mas parece uma tabela de partição, mas é incomum. Inclui a propriedade id 90 :

90h     MBR, EBR    CHS, LBA    x86, 68000, 8080/Z80    Hidden, Filesystem  FreeDOS     Free FDISK  Hidden FAT16 (corresponds with 04h i.e. MS Fat16 DOS 3.0+ < 65536 sectors)

Então, tentando montar a imagem que eu recebo:

# mount -t auto U14.IMA /mnt/cd
mount: unknown filesystem type 'sysv'  <-----

Como alguém sugeriu, você precisa ter algo específico como ' System V e Coherent filesystem support ' compilado no kernel para usar algo como mount -t sysv. A cadeia sysv não é tão surpreendente, pois faz parte da mídia de instalação do sistema AT&T UNIX System V / 386 Versão 4 Versão 2.1 - uma porta suportada pela Sun até 2006 - e essas imagens acabaram em estado selvagem em 2007. Na verdade, um texto O arquivo empacotado com as imagens indica que elas são necessárias para instalação devido à natureza do setor de inicialização e ao formato em uso. Há uma indicação de que o material era originalmente em Teledisk (TD0) formato. Quero enfatizar aqui que este não é um material original. De qualquer forma, não consigo calcular os deslocamentos, como explicado na pergunta - ou não termino com números inteiros ao dividir por 512, e mesmo que tente, parece que não consigo encontrar o deslocamento adequado - dd: cannot skip to specified offset, 0 writesetc. neste momento, a resposta é sobre forense e não mais sobre um arquivo de imagem.

Emulação de SO de origem histórica de imagem rápida com qemu

AT&T UNIX System V Release 4 Versão 2.1

                          LABEL             Version         X of X
  AT&T UNIX SVR4.0 2.1 --------------------------------------------------

  U01.IMA                 Maintanace Disk1  2.1             2 of 2
  U02.IMA                 Remote Terminal   2.1             1 of 1
                          Package
  U03.IMA                 BSD Comp. Pkg.    2.1             1 of 2
  U04.IMA                 BSD Comp. Pkg.    2.1             2 of 2
  U05.IMA                 Networking Supp.  2.1             1 of 1
                          Util. Pkg.
  U06.IMA                 Xenix Comp. Pkg   2.1             1 of 1
  U07.IMA                 FACE Pkg.         2.1             1 of 1
  U08.IMA                 FMLI Pkg.         2.1             1 of 1
  U09.IMA                 Editing Utils.    2.1             1 of 1
  U10.IMA                 OA&M Basic & Ext. 2.1             1 of 3
  U11.IMA                 OA&M Basic & Ext. 2.1             2 of 3
  U12.IMA                 OA&M Basic & Ext. 2.1             3 of 3
  U13.IMA                 Foundation Set    2.1             1 of 10
                          Base System Pkg.
                          2 User System
  U14.IMA                 Base              2.1a            1 of 10
  U15.IMA                 Base              2.1             2 of 10
  U16.IMA                 Base              2.1a            2 of 10
  U17.IMA                 Base              2.1             3 of 10
  U18.IMA                 Base              2.1             4 of 10
  U19.IMA                 Base              2.1             5 of 10
  U20.IMA                 Base              2.1             6 of 10
  U21.IMA                 Base              2.1             7 of 10
  U22.IMA                 Base              2.1             8 of 10
  U23.IMA                 Base              2.1             10 of 10
  U24.IMA                 Maintanance 1     2.1             1 of 2
  U25.IMA                 Base              2.1             9 of 10
  U26.IMA                 Printer Pkg       2.1             3 of 3
  U27.IMA                 Printer Pkg       2.1             2 of 3
  U28.IMA                 Printer Pkg       2.1             1 of 3
  U29.IMA                 16 to unlimited   2.1             1 of 1
                          User License
  U30.IMA                 2 to 16 User      2.1             1 of 1
                          License

Como foi sugerido, eu instalei a partir de uma imagem anterior no conjunto. Envolve usar qemu como explicado aqui, basicamente começando com a imagem 14 (primeiro e losetup /dev/loop0 U14.IMAdepois simples qemu-system-x86_64 -m 256 -hda test.img -fda /dev/loop0 -boot a), pois o U19 não é inicializável. O que é legal aqui é que você não precisa montar / desmontar imagens no próprio sistema operacional, basta usar ctrl-alt-2ou 1 com qemu para acessar ou sair do monitor e usar list blockspara ver o que está montado e change floppy0 imagenamenessa interface para alterar a imagem ou seja, durante a instalação, por exemplo.

Eu tive que fornecer o U19.IMA (disco 5) durante a instalação (para um log textual da instalação, veja isso - um destaque é a referência ao MS-DOS!), E eu terminei com isso, isto é, um AT&T UNIX Sys instalado corretamente Sistema operacional V 386, então isso confirma que U19.IMA é uma imagem de disco em funcionamento:

insira a descrição da imagem aqui

Por padrão, o / dev / fd é montado em / dev / fd e também há acesso por disquete através de um dispositivo de bloco (/ dev / dsk / f0) e bruto (/ dev / dsk / f0). Mudar o diretório para o disquete mostra apenas os arquivos numerados de 1 a 23 (acho que é apenas a estrutura do dispositivo de caracteres). Você também pode catos dispositivos brutos e de bloco e ver os dados do disquete, mas é o mais próximo possível.

Notei que, nesse sistema operacional, você não instala coisas de disquetes iniciando algum script de um diretório nelas, como faz com arquivos binários descomprimidos, por exemplo - aqui você usa pkgadd -d diskette1(certamente que a última palavra é um apelido, mas eu encontrou uma referência à opção -d no material SCO para pkgadd (1M)e geralmente aparece frequentemente no Unix comercial (Oracle, HP share pkgadd (1M)). A emissão do comando inicia uma rotina na qual você fornece disquetes e não tem controle, exceto dizendo "não" depois que a rotina descobrir o que está na unidade. No caso de discos que iniciam uma sequência de instalação (U03, U05 etc.), isso instalará e solicitará o próximo disquete etc. até a instalação do pacote estar concluída. Se você colocar um disquete que não é o início de um conjunto, ele não encontrará basicamente nada, mas informará que talvez você precise usar o installpkgcomando.

Vou instalar uma unidade de disquete física no meu equipamento para acessar os dados nesse arquivo de imagem?


Apenas um palpite: poderia ser um sistema de arquivos Minix. Você provavelmente precisará recompilar seu kernel para suportá-lo. A instalação de uma unidade de disquete física não ajuda. Qual é o tamanho do arquivo de imagem? Se o seu arquivo é apenas uma imagem bruta, ele definitivamente não contém nenhum dos sistemas de arquivos (atuais / modernos) que você tentou. Parece que não é inicializável em sistemas i386.
Jofel

@jofel O arquivo tem 1475k de tamanho. Se eu tentar montá-lo dessa maneira mount -t minix -o loop U19.IMA /mnt/cde obtiver o erro genérico, mas isso ocorrer no dmesg, VFS: Can't find a Minix filesystem V1 | V2 | V3 on device loop0.isso é alguma indicação de que o kernel já o possui ou que não posso confiar nisso ?. De qualquer forma, vou investigar o que você disse. Sei que não é inicializável, mas quero acessar o conteúdo. Obrigado.

A saída de filesugere que não há sistema de arquivos na imagem. Tem certeza de que seus dados estão realmente lá? Parece que você está tentando montar uma imagem de uma unidade bruta sem partições e sem sistema de arquivos.
terdon

@terdon É exatamente isso que eu quero fazer. Isso é uma lógica falhar? Este é um conjunto de instalação. Eu esperava encontrar "arquivos", incluindo documentação. Não consigo acessar isso fora da instalação da coisa toda?

2
Se for um disco de instalação, pode ser que apenas o primeiro disco contenha um sistema de arquivos / seja inicializável. Os outros discos podem conter apenas dados em um formato personalizado sem sobrecarga do sistema de arquivos.
Jofel

Respostas:


4

Se você não conseguir montar a imagem, em alguns casos ainda poderá "transmitir" alguns de seus dados cpio.

Depois de verificar se a imagem é:

  • Uma imagem usando um sistema de arquivos suportado e uma partição -> mount
  • Uma imagem usando um sistema de arquivos suportado e mais de uma partição -> mount with offsetou use ddpara extrair uma partição com deslocamento e monte apenas essa partição ou use algo comokpartx
  • Uma imagem que não utiliza um sistema de arquivos suportado ou sem nenhum sistema de arquivos -> suporte ao kernel e investigação adicional ...

Você pode usar os utilitários hexdumpe stringspara tentar analisar o cabeçalho e extrair cadeias de texto da imagem e obter mais informações sobre o arquivo de imagem e sua estrutura.


Algo capturou meu interesse em fazê-lo:

@(#)/usr/bin/echo.sl 1.1 4.0 10/01/90 16865 AT&T-SF

Há uma linha como esta para cada binário na imagem, para que você saiba um pouco o que está lá. Além disso, nesse caso, quando você analisa de perto como o processo de instalação ocorre na plataforma original installpkg, você descobre que:

O mecanismo básico para transferir software de um disquete para o disco rígido do UNIX System V / 386 é o cpio.

Basicamente, os dados são extraídos com cpiopara / usr / tmp / install e uma série de arquivos é incluída com isso (uma instalação, ascii, arquivo, nome e tamanho). Acontece aqui que este comando:

cat U19.IMA | cpio -imdv

gera erros numéricos malformados para começar, mas cria uma pasta / usr / bin com o conteúdo da imagem! O que treu estava procurando está lá:

#file tr
tr: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), stripped.

Tentar cpioem primeiro lugar não pode doer!


Apenas tome cuidado com a opção -d e cpio. Eu me lembro que isso tentou extrair diretamente para o meu drive raiz!
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.