Tabela de partição independente do tamanho do setor

4

O enredo

Eu tenho um disco WD10JPVT 1Tb dentro de um IcyBox IB-290StUS-B Gabinete USB / esata.

  • Quando eu conecto o disco via USB, recebo um tamanho de setor 512 lógico / 512 físico.
  • Quando conecto o disco pela porta esata nativa do computador, obtenho um tamanho de setor físico lógico / 4k de 512.
  • Quando eu conecto o disco por meio de um porta esata AKE Oculto USB 3.0 + eSATA II ExpressCard 54mm , recebo um tamanho de setor físico de 4k lógico / 4k.

O problema

O problema é que em uma tabela de partições MBR, o início e o fim das partições são expressos como um número de setores (lógicos). Isso significa que se eu particionar o disco quando ele estiver conectado via porta esata da expresscard e, em seguida, conectá-lo em uma porta USB ou na porta esata nativa, as partições terão um deslocamento errado e tamanho errado, e vice-versa. p>

fdisk output

Os comandos fdisk abaixo são executados usando o Ubuntu 11.04 (natty) e fornecem os mesmos resultados com o XUbuntu 12.04 para o USB e esata no expresscard, mas não posso testar o esata nativo, pois é isso que eu inicio o Ubuntu 12.04 .

Conectado via USB:

> sudo fdisk -l /dev/sdb
Disk /dev/sdb: 1000.2 GB, 1000204886016 bytes
255 heads, 63 sectors/track, 121601 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000c2664

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1       15201   122095104    7  HPFS/NTFS

Conectado pela porta esata nativa do computador:

> sudo fdisk -l /dev/sdb
Disk /dev/sdb: 1000.2 GB, 1000204886016 bytes
255 heads, 63 sectors/track, 121601 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk identifier: 0x000c2664

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1       15201   122095104    7  HPFS/NTFS

Conectado via porta esata do cartão expresso:

> sudo fdisk -l /dev/sdb
Disk /dev/sdb: 1000.2 GB, 1000204886016 bytes
255 heads, 63 sectors/track, 15200 cylinders
Units = cylinders of 16065 * 4096 = 65802240 bytes
Sector size (logical/physical): 4096 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk identifier: 0x000c2664

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1       15201   976760832    7  HPFS/NTFS

Soluções?

  • Existe uma maneira de armazenar o tamanho do setor "real" (4k) dentro de uma tabela de partições MBR?
  • O uso de uma tabela de partição GPT pode ter funcionado, mas o cabeçalho da GPT é armazenado no setor 1 do disco… e o tamanho do setor varia, portanto, a menos que haja uma maneira de armazenar o cabeçalho da GPT em uma posição fixa medida em bytes, é inútil.
  • Formatando o drive raw sem qualquer partição funciona, mas no ubuntu 11.04 eu tenho que montar manualmente o disco (/ dev / sdb), já que o Hal tenta montar as partições inexistentes (/ dev / sdb1, / dev / sdb2 ,…), Apesar do fato de detectar o rótulo do sistema de arquivos corretamente.
  • Eu posso criar manualmente duas partições sobrepostas, uma que trabalha com setores 4k, e uma que trabalha com 512 setores, e toda vez que eu conecto o disco uma partição será inválida e a outra será usada, mas isso é feio e frágil.
por Georges Dupéron 13.10.2012 / 23:55

1 resposta

2

Você fez uma análise muito profunda dos formatos de disco, tanto do MBR quanto do GPT, e parece que você atingiu um problema que era impensado nesses padrões, a de um formato que é independente do tamanho do setor lógico.

O problema é que o disco USB tem tamanho de setor interno de 4K, mas pretende diferentes tamanhos de setor (lógico e físico) de acordo com a porta à qual está conectado. Na prática, também pretende diferentes configurações de cilindro / setor, embora esse mapeamento seja pelo menos consistente.

A alteração desse comportamento exigirá:

  1. Alterações no firmware do disco
  2. Alterando o protocolo usado na porta, significando alterações no driver de disco usado para o disco USB

Ambas as opções me parecem impossíveis de fazer você mesmo. Eu não encontrei no Western Digital site quaisquer atualizações de firmware para o seu disco, e eu não procurei melhores drivers de disco (em parte porque eu não sei exatamente o que procurar, mas mesmo se soubesse que não seria muito otimista).

A mesma pergunta foi feita no post seguinte, datado de junho de 2012,
Como eu forçaria o Debian a usar o tamanho do setor físico em um disco rígido?

Esta é a resposta aceita desanimadora (que cita um artigo de julho de 2011):

According to an interview with a Western Digital representative published on http://www.techarp.com/showarticle.aspx?artno=734 there is no option to disable 512e emulation on current Advanced Format drives.

[...] will Western Digital offer firmware upgrades that would convert current Advanced Format drives running in emulation mode, to the native format?

Unfortunately, no. Current Advanced Format drives cannot be converted to run in the native format through a firmware upgrade

Espero que alguém encontre uma resposta melhor, mas minha própria resposta tende a ser negativa. Eu não aconselho tentar fabricar um formato GPT / MBR não padrão, não se você deseja manter seus dados seguros.

    
por 13.05.2013 / 18:01