O Windows não monta o superfloppy USB NTFS

3

Eu tenho um disco rígido externo USB da Transcend Storejet. Este não é um SSD, mas um disco mecânico com placas rotativas. Eu tenho formatado o disco inteiro, sem particionamento, como NTFS. Eu usei a ferramenta mkntfs no Linux.

Quando conectado a uma máquina Linux, o sistema vê uma unidade com duas partições ( /dev/sdc /dev/sdc1 /dev/sdc2 ). No entanto, como eu sei que é um disco sem partição, eu posso montar o dispositivo inteiro ( mount -t ntfs /dev/sdc /mnt ) e funciona sem problemas.

Quando conectado a uma máquina com Windows XP, o sistema vê um disco com duas partições não formatadas e não atribui uma letra de unidade ao disco inteiro nem a nenhuma das partições.

Alguém saberia como obter o MS Windows para montar meu disco como um superfloppy NTFS?

Já tentei remover antigos pontos de montagem USB e dispositivos residuais usando o 'DriveCleanup'. Isso não ajudou.

A propósito, eu também tenho um SSD USB Kingston externo, também formatado como superfloppy NTFS, sem particionamento. No entanto, este é reconhecido e montado normalmente pelo MS Windows.

    
por taaatiti 01.04.2016 / 19:29

1 resposta

3

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
    
por 15.11.2016 / 23:54