Eu posso reproduzir seu problema e explicá-lo. E consertar, eu acho.
breve explicação
Por alguma razão, o primeiro setor do seu disco, quando interpretado como MBR, contém uma tabela de partições semi-válida. Qualquer sistema operacional não tem motivos para supor que seja superfloppy.
Longa explicação
MBR vs VBR
A maioria dos discos que usamos foram particionados. Neste caso, os primeiros 512 bytes do disco são Master Boot Record (MBR) . Mesmo em Tabela de Partição GUID (GPT) , os primeiros 512 bytes formam algum tipo de MBR por motivos legados. O importante é: todo sistema operacional moderno espera encontrar o MBR no início do disco.
Superfloppy é um disco que foi tratado como uma partição ao criar um sistema de arquivos. Neste caso, os primeiros 512 bytes contêm Volume Boot Record (VBR) , como o começo de uma partição normalmente faria.
Alguns sistemas de arquivos utilizam o VBR para manter seus metadados importantes, NTFS é um deles. Tanto o MBR quanto o VBR podem conter código de bootstrap. Em dispositivos não inicializáveis, esse "código" pode ser trivial, protetor ou mesmo insano. Não há um padrão claro, é por isso que você não pode dizer com certeza se o seu setor de 512 bytes é MBR ou VBR ou qualquer outra coisa.
No caso geral, a melhor coisa que você pode fazer é verificar se o fragmento apropriado se parece com uma tabela de partição sã do MBR. Eu acho que isso é o que os sistemas operacionais fazem. Infelizmente, é possível ter um VBR que passe neste teste.
O problema
Vamos comparar um layout MBR básico (de aqui ) com o layout NTFS VBR (de here ):
MBR │ byte offset │ NTFS VBR
│ hex / dec │
───────────┼─────────────┼─────────────
│ 0x000 / 000 │ mainly NTFS
bootstrap │ … │ metadata
code ├─────────────┼─────────────
│ 0x054 / 084 │
│ … │ bootstrap
───────────┼─────────────┤ code
partition │ 0x1BE / 446 │
table │ … │
───────────┼─────────────┼─────────────
0x55 │ 0x1FE / 510 │ 0x55
0xAA │ 0x1FF / 511 │ 0xAA
───────────┴─────────────┴─────────────
Eu peguei meu pendrive e criei o superfloppa NTFS com mkntfs -F -f /dev/sdc
. A ferramenta substituiu todo o primeiro setor, incluindo a área do código de bootstrap. O Windows ou outro SO pode assumir por algum tempo que é o MBR e verificar sua área de tabela de partição. Isso é o que vai acontecer:
#fdisk -l /dev/sdc
Disk /dev/sdc: 31.5 GB, 31466323968 bytes
64 heads, 32 sectors/track, 30008 cylinders, total 61457664 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
Disk identifier: 0x2052474d
This doesn't look like a partition table
Probably you selected the wrong device.
Device Boot Start End Blocks Id System
/dev/sdc1 ? 6579571 1924427647 958924038+ 70 DiskSecure Multi-Boot
/dev/sdc2 ? 1953251627 3771827541 909287957+ 43 Unknown
/dev/sdc3 ? 225735265 225735274 5 72 Unknown
/dev/sdc4 2642411520 2642463409 25945 0 Empty
Partition table entries are not in disk order
Como você pode ver, o fdisk
é capaz de dizer que "isto não se parece com uma tabela de partição". O Windows dirá basicamente a mesma coisa, então ele assumirá que o setor é VBR, encontre a assinatura NTFS, finalmente monte. Na verdade, o antigo Windows XP não teve nenhum problema com isso. Também o meu Kubuntu relatou em dmesg
:
sdc: unknown partition table
mas o KDE se ofereceu para montá-lo como superfloppy.
Observe que qualquer ferramenta que detecta a tabela de partições lê, na verdade, um fragmento de código de inicialização do VBR. Este código não é necessário para o NTFS funcionar. Eu verifiquei com hexdump
que o fragmento não é um código executável; parece um conjunto de mensagens de texto que será exibido se eu tentar inicializar a partir desse dispositivo, por exemplo:
Press Ctrl+Alt+Del to restart
Isso significa que posso criar uma tabela de partições semi-válida e ela só irá manipular as mensagens de texto que eu provavelmente nunca veria de qualquer maneira.
Bem, eu fiz exatamente isso, com fdisk
criei uma tabela de partições que parece válida. É claro que aponta para "partições" sem sistemas de arquivos, porque o único sistema de arquivos ainda é o NTFS no superfloppy.
No Windows XP, a unidade se comporta quase como sua unidade. Quase, porque recebi a carta atribuída à primeira partição. Meu sistema de arquivos NTFS real (superfloppy) é novo e vazio, o seu não é. Um de seus setores é interpretado como VBR para a primeira partição falsa. Nossos setores certamente contêm dados diferentes, talvez esse seja o motivo. No entanto, acredito que acabei de resolver seu mistério.
Parece que alguém estava prestes a particionar seu superfloppy e mudou de idéia entre fdisk
e mkfs
.
A correção
No meu caso, foi o suficiente para escrever zeros na tabela de partições:
dd if=/dev/zero of=/dev/sdc bs=1 seek=446 count=64
Se eu quiser restaurar todo o fragmento "bootstrap code" do meu superfloppy, posso copiá-lo de outra partição NTFS criada por mkntfs
:
fallocate -l 2MiB tmp.ntfs
mkntfs -F -f tmp.ntfs
dd if=tmp.ntfs of=/dev/sdc bs=1 skip=84 seek=84 count=426
rm tmp.ntfs