Um registro de inicialização do volume (VBR, do inglês volume boot record) (também conhecido como setor de inicialização do volume, registro de inicialização da partição ou setor de inicialização da partição) é um tipo de setor de inicialização introduzido pelo IBM Personal Computer. Ele pode ser encontrado em um dispositivo de armazenamento de dados particionado, como um disco rígido, ou em um dispositivo não particionado, como um disquete, e contém código de máquina para a inicialização de programas de computador (geralmente, mas não necessariamente, sistemas operacionais) armazenados em outras partes do dispositivo. Em dispositivos de armazenamento não particionados, ele é o primeiro setor do dispositivo. Em dispositivos particionados, ele é o primeiro setor de uma partição individual no dispositivo, sendo o primeiro setor de todo o dispositivo um Master Boot Record (MBR) que contém a tabela de partição.
O código nos registros de inicialização do volume é invocado diretamente pelo firmware da máquina ou indiretamente por um código no registro de inicialização mestre ou por um gerenciador de inicialização. O código no MBR e no VBR é, em essência, carregado da mesma maneira.
A invocação de um VBR por meio de um gerenciador de inicialização é conhecida como carregamento em cadeia (chain loading). Alguns sistemas de dupla inicialização, como o NTLDR (o carregador de inicialização para todas as versões dos sistemas operacionais derivados do Windows NT da Microsoft até e incluindo o Windows XP e Windows Server 2003), fazem cópias do código de inicialização que os sistemas operacionais individuais instalam no VBR de uma única partição e as armazenam em arquivos de disco, carregando o conteúdo do VBR relevante a partir do arquivo após o carregador de inicialização perguntar ao usuário qual sistema operacional inicializar. No Windows Vista, Windows Server 2008 e versões mais recentes, o NTLDR foi substituído; em vez disso, a funcionalidade do carregador de inicialização é fornecida por dois novos componentes: WINLOAD.EXE e o Gerenciador de Inicialização do Windows.
Em sistemas de arquivos como FAT12 (exceto no DOS 1.x), FAT16, FAT32, HPFS e NTFS, o VBR também contém um Bloco de Parâmetros do BIOS (BPB) que especifica a localização e o layout das principais estruturas de dados no disco para o sistema de arquivos. (Uma discussão detalhada sobre o layout do setor dos VBRs FAT, as várias versões do BPB FAT e suas entradas pode ser encontrada no artigo sobre FAT).
Detalhes técnicos
Assinatura A presença de um carregador de inicialização Compatível com IBM PC para CPUs x86 no setor de inicialização é, por convenção, indicada por uma sequência hexadecimal de dois bytes chamada assinatura do setor de inicialização ( no deslocamento fixo e em ) para tamanhos de setor de 512 bytes ou mais. Para setores de 512 bytes, a assinatura do setor de inicialização também marca o fim do setor. VBRs em setores menores e maiores também podem exibir assinaturas no final do tamanho real do setor, no entanto, a semântica aqui descrita aplica-se apenas à assinatura de 16 bits em .
Esta assinatura indica a presença de pelo menos um carregador de inicialização fictício (dummy) que é seguro para ser executado, mesmo que não seja capaz de carregar de fato um sistema operacional. Ela não indica a presença de um (ou mesmo de um determinado) sistema de arquivos ou sistema operacional, embora algumas versões antigas do DOS anteriores à 3.3 dependessem dela em seu processo para detectar mídias formatadas em FAT (versões mais novas não o fazem). O código de inicialização para outras plataformas ou CPUs não deve usar esta assinatura, pois isso pode levar a um travamento quando o BIOS passar a execução para o setor de inicialização assumindo que ele contém código executável válido. Isto implica que mídias FAT12/FAT16 para serem usadas também por versões muito antigas do DOS devem manter a assinatura mesmo que não contenham um sistema operacional ou se destinem a ser inicializáveis apenas em outras plataformas; consequentemente, elas também devem conter pelo menos um carregador compatível com x86 (fictício) (para comparação, veja exemplos de FAT no Atari ST e com MSX-DOS). No entanto, algumas mídias para outras plataformas contêm erroneamente a assinatura mesmo sem um carregador fictício compatível com x86, tornando a verificação não 100% confiável na prática.
A assinatura é testada pela maioria das BIOS de sistema desde (pelo menos) o IBM PC/AT (mas não pelo IBM PC original e algumas outras máquinas). Mais do que isso, ela também é verificada pela maioria dos carregadores de inicialização MBR antes de passar o controle para o setor de inicialização. Algumas BIOS (como a do IBM PC/AT) realizam a verificação apenas para discos rígidos / unidades removíveis, enquanto para disquetes e superdisquetes basta começar com um byte maior ou igual a e as primeiras nove palavras não conterem o mesmo valor para que o setor de inicialização seja aceito como válido, evitando assim o teste explícito de , em disquetes. Como os setores de inicialização antigos (ou seja, mídias muito antigas do CP/M-86 e do DOS) às vezes não apresentam essa assinatura, apesar do fato de poderem ser inicializados com sucesso, a verificação pode ser desativada em alguns ambientes. Isso também reflete o fato de que disquetes podem ser formatados para usar tamanhos de setor menores que 512 bytes.
Se o código do BIOS ou do MBR não detectar um setor de inicialização válido e, portanto, não puder passar a execução para o código do setor de inicialização, ele tentará o próximo dispositivo de inicialização da lista. Se todos falharem, ele normalmente exibirá uma mensagem de erro e invocará a INT 18h. Isso iniciará um software residente opcional em ROM (ROM BASIC), tentará uma inicialização remota via rede, reiniciará o sistema via INT 19h após a confirmação do usuário ou fará com que o sistema interrompa o processo de inicialização até a próxima reinicialização física.
Do deslocamento decimal 72 a 79, um PBR do NTFS contém o número de série do ID de volume UUID da partição.
Invocação O código de inicialização no VBR pode assumir que o BIOS configurou suas estruturas de dados e interrupções e inicializou o hardware. O código não deve assumir mais do que 32 KB de memória presentes para uma operação segura; se precisar de mais memória, deve consultar a INT 12h para isso, já que outro código de pré-inicialização (como, por exemplo, sobreposições de extensão do BIOS, sistemas de criptografia ou carregadores de inicialização remota) também pode estar presente em outro lugar da memória (e normalmente se esconderia do setor de inicialização reduzindo a memória relatada pela INT 12h de acordo, para que não seja sobrescrito pelas ações do MBR e do VBR). A Especificação de Inicialização do BIOS permite 64 KB de memória e recomenda explicitamente de a como espaço de memória para MBR e/ou VBR. O código de inicialização não deve assumir CPUs melhores que as originais Intel 8088 ou 8086 (usadas no PC original) e não deve fazer suposições em relação ao estado exato do hardware, ao sistema de interrupções (as interrupções podem estar ativadas ou desativadas) ou à localização e tamanho da pilha (stack). Embora o BIOS original da IBM inicialize os registradores de CPU DS, ES e SS para o segmento e mantenha a pilha inicial em SS:SP = , esta não é uma condição na qual se possa confiar, pois nem todas as BIOS e códigos MBR seguem essa convenção. Registradores não mencionados abaixo devem ser tratados como não inicializados. O acesso direto ao hardware normalmente não é permitido. Embora a Tabela de Parâmetros de Disco (DPT/FDPB) normalmente já esteja configurada em na memória, o VBR deve mover (e possivelmente corrigir) a DPT apontada pelo vetor INT 1Eh para este local (a INT 1Eh não é uma interrupção, mas um ponteiro distante para a DPT).
Algumas condições podem ser flexibilizadas em ambientes controlados; por exemplo, alguns carregadores de inicialização atuais assumem ter até 128 KB de memória para trabalhar em operação normal (sem solicitar mais), e alguns carregadores de inicialização que usam acesso LBA assumem pelo menos uma CPU Intel 80188 ou 80186.
O VBR é carregado na posição de memória 0000h:7C00h e com os seguintes registradores de CPU configurados quando o carregador de inicialização anterior (isto é, normalmente o BIOS ou MBR, mas possivelmente outro carregador de inicialização) passa a execução para ele saltando para 0000h:7C00h no modo real da CPU.
CS:IP = 0000h:7C00h (fixo) Algumas BIOS da Compaq usam erroneamente 07C0h:0000h em seu lugar. Embora isso seja resolvido para o mesmo local na memória do modo real, não é o padrão e deve ser evitado, pois o código VBR que assume certos valores de registrador ou que não foi escrito para ser relocável pode não funcionar de outra forma.
DL = unidade de inicialização (disquetes / superdisquetes: 00h = primeiro, 01h = segundo, ..., 7Eh; discos rígidos / unidades removíveis: 80h = primeiro, 81h = segundo, ..., FEh; os valores 7Fh e FFh são reservados para ROM / unidades remotas e não devem ser usados em disco). O DL é suportado pelas BIOS da IBM, bem como pela maioria das outras BIOS. A BIOS do Toshiba T1000 é conhecida por não suportar isso corretamente, e algumas BIOS antigas do Wyse 286 usam valores DL maiores ou iguais a 2 para discos rígidos. Desktops USB configurados como superdisquetes normalmente recebem uma atribuição de DL = 00h ou 01h, no entanto, algumas BIOS raras apresentam erroneamente pen drives configurados como unidades removíveis como DL = 01h também, em vez de usar DL = 80h. Tradicionalmente, apenas os valores 00h and 80h eram passados pelo BIOS durante a inicialização, e muitos setores de inicialização eram programados de forma rígida para funcionar com valores fixos de qualquer maneira. A Plug and Play BIOS Specification e a BIOS Boot Specification (BBS) permitem que outros dispositivos também se tornem inicializáveis. Esta última também recomenda que os códigos MBR e VBR usem o DL em vez de padrões internos fixados de fábrica. (Nota: Os VBRs do MS-DOS/PC DOS e OS/2 ignoram o valor DL fornecido e, em vez disso, recuperam o valor armazenado no deslocamento +19h no Bloco de Parâmetros do BIOS Estendido (EBPB) ou no deslocamento do setor +1FDh nas versões do DOS 3.2 a 3.31. Algumas versões do DR-DOS usam o DL a partir da 7.02. Os VBRs do DR-DOS 7.07 usam o DL por padrão e ignoram o valor do BPB, mas o comando SYS /O[:nnn] pode ser usado para invocar o comportamento antigo de usar o valor do BPB ou até mesmo forçar uma unidade de inicialização específica nnn a ser armazenada ali. Em volumes FAT32, o FreeDOS também tira vantagem do valor DL, enquanto em volumes FAT12/FAT16 só o faz se o valor do BPB estiver definido como FFh.) DH bit 5 = 0: dispositivo suportado através da INT 13h; caso contrário: não importa (deve ser zero). O DH é suportado por algumas BIOS da IBM. Alguns códigos MBR e VBR preservam o valor de DH.
Sistemas com suporte a BIOS Plug-and-Play ou BBS fornecerão um ponteiro para os dados PnP além do DL:
DL = unidade de inicialização (veja acima) ES:DI = aponta para a estrutura de verificação de instalação "$PnP"