Você não pode acessar o MBR a partir do sistema de arquivos, é um setor especial, está sempre fora de qualquer partição que você criar.
Para gravar no MBR real, você precisa usar dd (no linux) ou PartCopy (no windows). Eu nunca usei o PartCopy, então não posso garantir, mas o dd funcionou para mim.
dd if=bootsector.bin of=/dev/sda bs=512 count=1
Onde sda é o nome do seu disco rígido ou dispositivo usb e o bootsector.bin é um binário simples
Observe que a opção "de" deve apontar para o próprio dispositivo e NÃO particionar nesse dispositivo, por exemplo, sda1, sda2
Você pode compilar um binário simples com nasm usando a opção -f bin
Da mesma forma, você pode testar se o bootsector está lá lendo do primeiro setor para o arquivo:
dd if=/dev/sda of=mbr_contents.bin bs=512 count=1
Abra-o com um editor hexadecimal e veja se é igual ao original ou desmonte-o.
Você também pode limpar o setor de inicialização escrevendo de zero dispositivo:
dd if=/dev/zero of=/dev/sda bs=512 count=1
Como você sabe que o sistema operacional está sendo reconhecido? Se ele acertar o seu setor de inicialização, ele não tentará carregar outro setor de inicialização, mesmo se o seu código falhar. O BIOS apenas verifica a tag 0xAA55, carrega os 512 bytes na memória e executa a CPU no modo flat real (padrão), o BIOS basicamente lhe entrega o controle. Aconteça o que acontecer, o resultado será o código do SEU funcionamento. Então, se o seu código falhar, o computador ficará lá e desperdiçará eletricidade.
Até onde eu sei, todos os drives usb são capazes de armazenar um bootloader, mas algumas placas-mãe podem ter problemas ao tentar carregar de drives usb. Eu usei um disco rígido extra para brincar, parece mais confiável.Truque de bônus: você pode achar cansativo ter que reinicializar seu computador todas as vezes, então considere usar uma máquina virtual. O VirtualBox é ótimo, mas há outros. O que é útil sobre a caixa virtual é que você pode inicializá-la a partir do disco rígido real (ou do pendrive). Você pode anexar a caixa virtual ao disco rígido real criando um sistema de arquivos virtual proxy:
VBoxManage internalcommands createrawvmdk -filename /path/to/file.vmdk
-rawdisk /dev/sda
Então você apenas usa o arquivo vmdk como um sistema de arquivos virtual regular e escreve seu gerenciador de inicialização em sda como de costume. Muito útil para testes!
Fonte: Manual de Caixa Virtual, Capítulo 9, Tópicos Avançados Seção: acesso ao disco rígido físico inteiro
Você provavelmente poderia escrever em um sistema de arquivos virtual, mas eu não encontrei uma maneira fácil de fazer isso, esses arquivos têm formatos incomuns, então você não pode simplesmente usar dd neles.
Algumas outras coisas úteis para ler no sistema operacional e nos gerenciadores de inicialização: