Gostaria de escrever manualmente a tabela de partição do MBR (master boot record): o primeiro setor de uma unidade.
Os bytes 2 a 4 exigem que se descubra o endereço CHS (setor da cabeça do cilindro). Mas estou usando um pendrive e, no que me diz respeito, eles não possuem cilindros, cabeçotes ou setores físicos (exceto que os setores podem ser determinados por conjuntos de 512 bytes).
Assim, parei ao escrever a tabela de partições. O endereço LBA de qualquer setor é incrivelmente fácil de obter (o endereço LBA também é exigido na entrada da tabela de partição). Mas não tenho ideia de como renderizar o CHS em uma unidade desprovida de cilindros e cabeçotes.
Então, se alguém pudesse esclarecer como seria essa conversão ou melhor, me dar um recurso sobre como o BIOS interpreta o MBR, eu ficaria grato.
Obrigado.
Preencha-o com 0xFFFF.
Todo sistema moderno, tanto SO quanto BIOS, é compatível com LBA; ele ignorará o campo C/H/S e usará endereços de setor linear.
(E além disso, os discos conectados por USB devem falar SCSI – não ATA – e o SCSI só suporta solicitações LBA de qualquer maneira.)
Como a maioria das partições são maiores do que o campo C/H/S pode expressar (e é ignorado por literalmente tudo), a prática usual é preencher o valor máximo possível.
Para você, os HDDs reais também não – eles apenas criam alguns valores para o bem dos sistemas antigos, mas nada disso corresponde à estrutura física, que está completamente oculta do exterior. Mesmo que eles tenham fisicamente cabeçotes e coisas assim, eles são projetados para serem usados apenas com endereços LBA lineares (e têm ordens de magnitude a mais de cilindros e setores que podem caber no campo C/H/S de qualquer maneira).
Portanto, não importa em que tipo de disco a tabela de partição MBR vai, quase sempre é suficiente preencher valores de espaço reservado.
(Depois, há HDDs SMR que nem sequer possuem uma correspondência 1:1 de LBAs e setores físicos – eles possuem uma tabela de mapeamento como os SSDs...)