Particionamento de disco e inicialização de sistema

Os HDs (hard drives ou discos rígidos) são formados por um conjunto de discos magnéticos que armazenam dados através de operações de leituras e escritas feitas por um braço mecânico com uma cabeça magnética. Já os discos SSD (solid-state drive) não possuem qualquer componente mecânico, pelo que são consideravelmente mais rápidos, embora muito mais caros. É interessante separar o sistema operacional dos seus arquivos e fazer backups de imagem do disco, isto é, clonar o disco para posterior restauro, no caso de algum problema.

Estrutura de um disco rígido (HD). Fonte: Tricky time.

Estrutura de um disco rígido (HD). Fonte: Tricky time.

Existe uma cabeça de leitura-gravação para cada superfície do HD. Cada superfície é dividida em anéis concêntricos chamados trilhas, e uma trilha é dividida em setores, onde um setor tem, normalmente, 512 bytes. As trilhas são numeradas de fora para dentro, e um conjunto de trilhas com o mesmo raio forma o cilindro. Essa geometria básica fornece um modelo para localização do setor, chamado CHS (cylinder, head, sector).

A tecnologia de transmissão de dados pode ser paralela (PATA, também conhecido como IDE, caracterítica por usar cabos largos) ou serial (SATA, Serial AT Attachement). Existe também a SAS (Serial Attached SCSI), que utiliza o padrão SCSI (Small Computer System Interface, tecnologia criada para acelerar a taxa de transferência de dados).

hd_interfaces

Diferentes tecnologias de transferências de dados de discos rígidos para o computador. Foto: ViniRoger.

Particionar é dividir um disco rígido em múltiplas unidades lógicas (partições), funcionando como se houvesse múltiplos discos dentro do disco físico. O sistema de arquivos divide o disco rígido em blocos (pequenas áreas contíguas). O tamanho desses blocos é definido durante a criação do sistema de arquivos, e geralmente varia entre 1 e 8 kilobytes. Um bloco pode ser usado tanto para armazenar dados reais de um arquivo quanto para meta-dados usados pelo sistema de arquivos. Dentre desse meta-dados, estão os inodes.

Um inode usa um bloco no disco rígido que contém as informações sobre o arquivo o qual ele corresponde (nome, proprietário, permissões, etc.) e os ponteiros para os blocos de dados que eles realmente usam. Para arquivos realmente grandes, que ocupam mais blocos do que é possível referenciar em um único inode, existe um sistema de bloco indireto: o inode referencia uma lista de blocos que não contém dados diretamente, mas outra lista de blocos.

Comparando o disco rígido a uma biblioteca, cada partição seria uma seção da biblioteca, e os arquivos de cada partição seriam os livros. Partições diferentes também servem para instalar diferentes sistemas operacionais no mesmo computador - uma dessas partições deve estar marcada como ativa, ou seja, marcada como "bootável" para que a BIOS possa iniciar a máquina por ela. A partição estendida é um tipo especial de partição primária que não pode conter um sistema de arquivos: ao invés disso, ela contém partições lógicas.

Identificação

O diretório /dev/ tradicionalmente hospeda os chamados arquivos "especiais", destinados a representar os periféricos do sistema. O kernel detecta os "devices" e exporta as informações sobre os mesmos para o sistema de arquivos virtual Sysfs (que está montado no diretório /sys) e ao mesmo tempo, enviando um evento para o daemon do serviço udev, um gerenciador dinâmico de dispositivos.

Quando o udev é notificado pelo núcleo do aparecimento de um novo dispositivo, ele coleta várias informações do referido dispositivo consultando as entradas correspondentes em /sys/ para identificar o device conectado. Então consulta todas as regras contidas em /etc/udev/rules.d/ e /lib/udev/rules.d/ para carregar o módulo correto. Cada linha desses arquivos contém critérios de seleção, para selecionar eventos para os quais existe uma necessidade de reagir, e atribuições de variáveis, que definem a ação a ser tomada. Por fim, cria um arquivo especial no diretório /dev conforme os dispositivos aparecem ou desaparecem.

Todo este processo acontece em Hotplug (dispositivos instalados com o sistema em uso) e em Coldplug (dispositivos são conectados com a máquina desligada e o sistema os detecta quando em uso). O udev cria, em adição ao /dev/sd*, ligações simbólicas com um nome fixo, que permitem identificar o modelo e o serial number de um disco rígido, armazenadas em /dev/disk/by-id. O log fica armazenado em "/var/log/daemon.log".

Cada partição tem a sua própria identificação (C:, D:, etc, no Windows ou hda, hda1, hda2, hdb, etc, no Linux), composta no Linux por: sigla que identifica o tipo do dispositivo (hd=ide, sd=SCSI ou SATA, xt=XT, fd=disquete), letra que identifica dispositivo (a=primeiro, b=segundo, etc...) e número que identifica o número da partição do dispositivo. Cada partição é formatada com um determinado sistema de arquivos, como o NTFS (Windows), HFS (Mac OS) ou Ext4 (Unix). O Linux também necessita de uma partição dedicada à chamada memória virtual (swap) - ela permite que o kernel do Linux libere um pouco de armazenamento quando falta memória suficiente (RAM), realocando na partição swap do disco rígido as partes da memória RAM inativas por algum tempo. As partições primárias são numeradas de 1 a 4 e as partições lógicas de 5 até 16. Em um disco contendo duas partições primárias, uma partição estendida e 3 partições lógicas, o esquema seria o seguinte:

  • /dev/hda1 (Primária)
  • /dev/hda2 (Primária)
  • /dev/hda3 (Estendida)
  • /dev/hda5 (Lógica)
  • /dev/hda6 (Lógica)
  • /dev/hda7 (Lógica)

Na instalação do sistema operacional aparece a opção de particionamento de disco. Além de particionar o disco todo como uma só partição, um dos possíveis modos é separar uns 10 a 20 GB para o sistema raiz (/), swap (cujo tamanho recomendado é do dobro da memória Ram, mas que não é muito usada por computadores que tenham 2 Gb ou mais de memória Ram) e o restante para o sistema (/home).

Para analisar e particionar o disco após a instalação, um programa muito indicado é "parted" (ou "gparted", que é o modo gráfico em gnome - clique no link para ver um tutorial do GParted). Existem diferentes sistemas de arquivos, sendo os principais:

  • FAT32 (File Allocation Table ou Tabela de Alocação de Arquivos) - Criado em 1996 pela Microsoft para substituir o FAT16 usado pelo MS-DOS, muito utilizado em pendrives por ter compatibilidade entre Windows e Linux. Não possui recursos de segurança, correndo o risco de corromper os dados, e não suporta arquivos maiores que 4 GB.
  • NTFS (New Technology File System) - sistema de arquivos padrão para o Windows NT e possui uma estrutura que armazena as localizações de todos os arquivos e diretórios.
  • Ext4 - sistema de arquivos do Linux desenvolvido para ser o sucessor do Ext3 a partir de 2006. Possui alocação tardia (delayed allocation), marcas temporais com maior resolução (nanossegundos), journaling (que consiste em gravar um registro (ou log ou journal) de transações antes de escrever as alterações no disco para recuperar o sistema em caso de falha como um desligamento não programado) e suporte para tamanhos maiores de volumes e arquivos.

MBR e GPT

MBR (Master Boot Record) ou GPT (Guid Partition Table) são modelos de particionamento de disco que definem as estruturas das partições.

O MBR é o modo mais antigo (desde os tempos do MS-DOS) e é largamente compatível com vários HDs, mantendo a informação sobre como as partições lógicas estão organizadas no disco em um único local. Ele ocupa os primeiros 512 bytes do primeiro disco rígido, e é a primeira coisa carregada pela BIOS para entregar o controle a um programa capaz de inicializar o sistema operacional desejado. Em geral, um carregador de inicialização fica instalado dentro do MBR, removendo seu conteúdo prévio. Como o MBR usa 32 bits para guardar informações da partições, cada partição apenas pode ter um tamanho máximo de 2 TB e 4 partições primárias (para ultrapassar esse limite, usa-se a partição estendida, que é uma partição primária que serve de repositório para outras partições). No caso de sistemas Linux, na MBR é instalado o GRUB ou o LILO, dependendo da sua distribuição - o Lilo não utiliza a partição /boot, como o grub1 e grub2.

Já a estrutura GPT possui um limite bem maior (256 TB e 128 partições primárias) e outros benefícios, como melhor estrutura/organização ao nível das partições, mecanismos para detecção da dados e partições corrompidas e um cabeçalho secundário (Secondary GPT Header) que funciona como backup da tabela de partições. Deve-se criar uma partição específica para o grub arrancar (com flag de bios_grup, por exemplo).

Boot

A palavra "boot" deriva do inglês booting que, por sua vez, deriva do termo bootstrapping (de boot straps ou cadarço). O termo faz alusão às histórias sobre o Barão de Münchhausen, que, segundo a lenda, era capaz de se erguer do pântano (para não se molhar) puxando pelos cadarços das próprias botas. Ou seja, o termo procura dar a imagem de um processo aparentemente impossível pelo qual o sistema se ergue (ou se coloca em funcionamento) por seus próprios esforços. A solução para o paradoxo está na utilização de um pequeno programa, chamado sistema de iniciação, carregador, boot loader ou bootstrap. Este programa não tem a completa funcionalidade de um sistema operacional, mas é especialmente construído para que seja capaz de carregar um outro programa para permitir a iniciação do sistema operacional.

BIOS e UEFI

O BIOS que reside na read only memory (ROM) é executada a partir de um endereço de memória particular no qual o contador de programa da CPU é inicializado pelo evento de ligar a energia. O BIOS (Basic Input/Output System ou Sistema Básico de Entrada/Saída) é um programa de computador pré-gravado em memória permanente (firmware) executado por um computador quando ligado. Ele é responsável pelo suporte básico de acesso ao hardware, bem como por iniciar o carregamento do sistema operacional. Quando o computador é ligado, o BIOS opera na seguinte sequência:

  1. Verifica as informações armazenadas em uma memória RAM localizada em um chip fabricado com tecnologia CMOS que armazena informações relativas a configuração de hardware;
  2. POST (Power-On Self-Test ou Autoteste de Partida), que são os diagnósticos e testes realizados nos componentes físicos (disco rígido, processador, etc). Os problemas são comunicados ao usuário por uma combinação de sons (bipes) numa determinada sequência que identifica o problema e se possível, exibidos na tela.
  3. Ativação de outros BIOS possivelmente presentes em dispositivos instalados no computador (ex. discos SCSI e placas de vídeo);
  4. Os dados, armazenados numa forma compactada, são transferidos para a memória e descompactados;
  5. Leitura dos dispositivos de armazenamento - se há um sistema operacional instalado no dispositivo, em seu primeiro setor (o Master Boot Record) estão as informações necessárias para o BIOS encontrá-la (este setor não deve exceder 512 bytes).

A tela de inicialização/arranque do BIOS geralmente indica que tecla(s) pressionar para entrar em sua tela de configuração. As teclas populares são F1, F2, F10, Esc, Ins, e Del - se a tela está escondida por uma imagem, você pode pressionar algumas teclas como a Esc para o desativar. Para saber qual tecla apertar para acessar o BIOS do seu computador, clique no link para ver uma lista dos principais fabricantes. Na configuração do BIOS, é possível definir configurações básicas, como a ordem de inicialização dos dispositivos - por exemplo, é possível carregar um CD para instalação de sistema operacional novo ou diretamente do CD (live-CD), definir data e hora ou verificar quais componentes da placa-mãe estão habilitados e funcionando adequadamente.

A atualização do BIOS pode resolver problemas de funcionamento de periféricos, ou mesmo erros da versão anterior do BIOS, através da alteração três programas que estão dentro da memória ROM (BIOS, POST, Setup). Os principais fabricantes deste firmware são: American Megatrends (AMI), Award, General Software, Insyde Software, e Phoenix Technologies. Existem modelos que podem ser acessados remotamente via rede com interface web.

O UEFI é o padrão criado pela Intel para substituir o BIOS. O Unified Extensible Firmware Interface (em portugês, Interface Unificada de Firmware Extensível) é uma especificação que define uma interface de software entre o sistema operacional e o firmware da plataforma. A velocidade de boot de uma máquina com tecnologia UEFI, independente do Sistema Operacional utilizado, é bem maior que de uma máquina que utiliza a BIOS. Suportam diagnósticos locais e remotos e reparação de computadores, mesmo sem outro sistema operacional. Um Gerenciador de boot EFI é também usado para selecionar e carregar o sistema operacional, removendo a necessidade de um mecanismo de boot loader (o boot loader do sistema operacional é uma aplicação EFI).

A Microsoft acreditava que conseguiria estagnar o avanço de Sistemas Operacionais abertos com esta implementação, já que ela dificulta a utilização de dual-boot, porém ela não contava com um simples e crucial detalhe: a Comunidade. Houve alguns relatos de problemas de inicialização do Instalador do Debian em modo UEFI em sistemas amd64. Hoje já é possível, apesar de muito trabalhoso ainda, instalar uma distribuição Linux em um PC com tecnologia UEFI, graças ao carregador de boot GRUB-EFI (que nada mais é que o GRUB2 modificado para sistemas UEFI) e ao eLILO, que pode ser usado em qualquer distribuição Linux. A maioria dos computadores que possuem UEFI oferecem Legacy Boot (carregamento do sistema pelo modo tradicional; usando a BIOS não o UEFI Mode). Como uma alternativa no momento, você pode desligar o UEFI e instalar utilizando Legacy BIOS ou Fallback mode.

GRUB

Depois de fazer seu trabalho, o BIOS carrega o sistema operacional, lendo o primeiro setor do disco rígido o "Master Boot Record" ou MBR. Nele é gravado o gerenciador de boot, que é o responsável pelo carregamento do sistema. É a presença dele que permite que você instale mais de um sistema operacional no mesmo micro e possa escolher entre eles na hora do boot. No Linux, o gerenciador mais usado é o GRUB (GRand Unified Bootloader), com uma pequena participação de LILO (LInux LOader,arregador de inicialização mais antigo) e SYSLINUX, enquanto no Windows é usado o NTLDR. O GRUB 2 substituiu o GRUB que passou a se chamar GRUB Legacy. Já o Yaboot é o carregador de boot usado por computadores Macintosh antigos que usam processadores PowerPC.

O GRUB armazena as correspondências entre as sequências dos discos rígidos que ele detecta no arquivo "/boot/grub/device.map". Se encontrar erros lá, corrija elas manualmente e execute grub-install novamente. Seu arquivo de configuração é "/boot/grub/grub.cfg" ou "/etc/grub.d".

A tela de escolha do SO geralmente tem uma opção "default". Para alterá-la, você deverá editar o arquivo "/boot/grub/grub.cfg" como superusuário: procure pela linha set default="0" e troque por set default="4" (caso o sistema operacional escolhido esteja nessa posição, contando a partir do zero). Após salvar o arquivo, execute o comando "update-grub".

O gerenciador tem a função de carregar o kernel e, a partir dele, todo o restante do sistema. Inicialmente, o kernel é um arquivo compactado e somente-leitura, o arquivo "/boot/vmlinuz". Ele é descompactado em uma área reservada da memória RAM e roda a partir daí, aproveitando o fato de que a memória RAM é muito mais rápida que o HD. Para ter uma ideia melhor de como é a inicialização do sistema no Linux e no Debian/Linux, clique nos respectivos links.

O gerenciador de boot utiliza os primeiros 446 bytes do MBR. Os 66 bytes restantes são usados para armazenar a tabela de partições, que guarda informações sobre onde cada partição começa e termina. Programas de particionamento nada mais fazem do que alterar as informações na tabela de partições. Quando ela é perdida ou danificada, todas as partições desaparecem e você precisa ir atrás de um programa de recuperação de dados.

O Windows não reconhece sistemas diferentes dele. Devido a isso, no ato de sua instalação, ele sobrescreve a MBR do disco apontando ele como o único sistema operacional da máquina, e caso exista outro sistema operacional (como o Linux), não será mais acessível. Para este caso, em específico para usuários do Grub, pode-se recorrer ao Super Grub Disk, um utilitário capaz de recuperar o Grub e, consequentemente, reconhecer o Linux novamente no processo de inicialização do computador. Basta apenas que o usuário aponte o arquivo de inicialização do Windows (boot.ini, localizado no diretório c:\ do Windows) e reinicie o computador. Para outros casos de recuperação de boot, você pode baixar uma imagem, gravar no CD e utilizá-lo na inicialização do computador para acessar qualquer sistema operacional instalado (veja tutorial e download da imagem no link Super Grub2 Disk).

Arquivo fstab

No Linux, o arquivo "/etc/fstab" permite configurar o sistema para montar partições, cdroms, etc. Para entender seu conteúdo, veja o seguinte exemplo com a indicação do que cada coluna representa:

# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# <file system> <mount point>   <type><options>       <dump>  <pass>
UUID=e188...    /               ext4    errors=remount-ro 0       1
UUID=4901...    /home           ext4    defaults          0       2
/dev/sda1       /storage        ext4    defaults          0       2
/dev/sdb        /home           ext4    _netdev           0       0
UUID=229f...    none            swap    sw                0       0
/dev/cdrom      /media/cdrom    auto    ro,noauto,user,exec   0   0
  1. Corresponde ao hardware que queremos montar;
  2. Significa o diretório onde que queremos montar o hardware;
  3. Refere-se ao sistema de arquivos da unidade (ext4, auto = automático, etc)
  4. Possui várias opções: ro (read-only) e rw (read and write), auto e noauto (se o dispositivo será montado automaticamente na inicialização ou só manualmente), exec e noexec (permite ou não executar binários), user e nouser (permite ou não que os usuários normais montem o dispositivo), sync e async (entrada e saída para o sistema de arquivos síncrona ou assíncrona). A opção "defaults" corresponde a "rw,exec,auto,nouser,async";
  5. Tem um número que pode ser 1 ou 0, indicando se a unidade será checada pela análise de sistema de arquivos do Linux rotineiramente ou não, respectivamente;
  6. É apenas a ordem em que será verificado o sistema de arquivos (1 para o primeiro, 2 para a segunda unidade, etc).

Use o comando "blkid /dev/sdX" para descobrir a UUID (Identificador Único Universal) do dispositivo para definir a primeira coluna - evite utilizar o "/dev/sdX", pois quando o sistema reiniciar, o dispositivo pode ser montado com outra identificação de disco (a, b, c, ...). Para obter a UUID por partição, use "ls -l /dev/disk/by-uuid/".

Veja mais sobre como ver se o seu HD está com algum defeito no post Verificando a saúde do HD e como utilizar mais de um disco rígido de modo a tornar a gravação de dados mais rápida e/ou mais segura no post discos em RAID. Veja como editar o GRUB no post Esqueceu a senha de root?

ps: o verbo "inicializar" não existe, é um neologismo (palavra inventada), mas tornou-se um "jargão" utilizado na informática. O correto é "iniciação".

Compartilhe o link desse texto, mas se for copiar algum trecho, cite a fonte. Valorize nosso trabalho.
Mais informações na licença de uso do site.

5 Pingbacks/Trackbacks