Gentoo Logo

1.  Introdução a dispositivos de bloco

Dispositivos de bloco

Iremos estudar os aspectos de manuseio de discos do Gentoo Linux e do Linux em geral, incluindo sistemas de arquivos de Linux, partições e dispositivos de bloco. Uma vez que você estiver familiar com o funcionamento de discos e sistemas de arquivos, iniciaremos o processo de configuração de partições e sistemas de arquivos para sua instalação do Gentoo Linux.

Para começar, iremos introduzir os dispositivos de bloco. O dispositivo de bloco mais famoso é provavelmente aquele que representa o primeiro disco rígido SCSI em um sistema Linux, chamado de /dev/sda.

Os dispositivos de bloco acima representam uma interface abstrata para o disco. Programas de usuário podem usar os dispositivos de bloco para interagir com seu disco sem preocupação se eles são IDE, SCSI ou outra coisa. O programa pode simplesmente classificar o espaço de armazenagem no disco como um monte de blocos de 512 bytes contíguos acessíveis aleatoriamente.

Partições

Embora seja teoricamente possível usar um disco inteiro para armazenar seu sistema Linux, isto é quase nunca feito na prática. Ao invés disso, dispositivos de bloco de discos são divididos em dispositivos de bloco menores e mais fáceis de manusear. Eles são chamados de partições.

1.  Desenhando um esquema de particionamento

Quantas e de que tamanho?

O número de partições depende muito de seu ambiente. Por exemplo, se você tem muitos usuários, você provavelmente deve ter seu /home separado para aumentar a segurança e tornar backups mais fáceis. Se você estiver instalando o Gentoo para funcionar como um servidor de e-mails, seu /var deve ser separado, uma vez que todos e-mails são gravados dentro de /var. Uma boa escolha de sistema de arquivos irá maximizar sua performance. Servidores de jogos têm uma partição /opt separada, uma vez que a maior parte de servidores de jogos são instalados lá. A razão é semelhante à do /home: segurança e backups. Você deve manter seu /usr grande: não só irá conter a maior parte das aplicações, a árvore do Portage sozinha toma em torno de 500 Mbytes, excluindo as várias fontes que são gravadas nela.

Como você pode ver, muito depende do que você quer fazer. Partições ou volumes separados têm as seguintes vantagens:

  • Você pode escolher o sistema de arquivos de melhor performance para cada partição ou volume
  • Seu sistema inteiro não irá ficar sem espaço se uma ferramenta defunta estiver continuamente escrevendo arquivos em uma partição ou volume
  • Se necessárias, verificações de sistemas de arquivos têm seu tempo reduzido, já que verificações múltiplas podem ser feitas em paralelo (embora esta vantagem seja maior com vários discos que com várias partições)
  • A segurança pode ser melhorada ao montar algumas partições ou volumes como somente-leitura, nosuid (bits de setuid são ignorados), noexec (bits executáveis são ignorados), etc...

No entanto, partições múltiplas têm uma grande desvantagem: se não forem configuradas apropriadamente, você pode acabar com um sistema com muito espaço livre em uma partição e nenhum em outra. Também existe um limite de 15 partições para SCSI e SATA.

1.  Usando o fdisk no MIPS para particionar o seu disco

Máquinas SGI: Criando um SGI Disk Label

Todos discos em um sistema SGI precisam de um SGI Disk Label, que serve uma função semelhante à das disklabels da Sun e MS-DOS -- gravar informações sobre as partições do disco. Duas partições especiais são necessárias para criar um novo SGI Disk Label:

  • SGI Volume Header (nona partição): Esta partição é importante. Ela é onde o gerenciador de inicialização irá residir e, em alguns casos, também conterá imagens de kernel.
  • SGI Volume (décima-primeira partição): Esta partição tem um propósito semelhante à terceira partição do Sun Disklabel que toma "o disco inteiro". Esta partição toma todo o disco, e não deve ser tocada. Ela não tem nenhum propósito especial fora ajudar o PROM de maneiras não documentadas (ou usadas pelo IRIX de algum jeito).

Aviso: O SGI Volume Header deve começar no cilindro 0. Se você não fizer isto não poderá carregar a partir do disco.

O exemplo seguinte é parte de uma sessão de fdisk. Leia e adapte conforme suas necessidades...

Listagem de código 1.1: Criando um SGI Disklabel

# fdisk /dev/sda

Command (m for help): x

Expert command (m for help): m
Command action
   b   move beginning of data in a partition
   c   change number of cylinders
   d   print the raw data in the partition table
   e   list extended partitions
   f   fix partition order
   g   create an IRIX (SGI) partition table
   h   change number of heads
   m   print this menu
   p   print the partition table
   q   quit without saving changes
   r   return to main menu
   s   change number of sectors/track
   v   verify the partition table
   w   write table to disk and exit

Expert command (m for help): g
Building a new SGI disklabel. Changes will remain in memory only,
until you decide to write them. After that, of course, the previous
content will be unrecoverably lost.

Expert command (m for help): r

Command (m for help): p

Disk /dev/sda (SGI disk label): 64 heads, 32 sectors, 17482 cylinders
Units = cylinders of 2048 * 512 bytes

----- partitions -----
Pt#     Device  Info     Start       End   Sectors  Id  System
 9:  /dev/sda1               0         4     10240   0  SGI volhdr
11:  /dev/sda2               0     17481  35803136   6  SGI volume
----- Bootinfo -----
Bootfile: /unix
----- Directory Entries -----

Command (m for help):

Nota: Se seu disco não tiver um SGI Disklabel existente, então o fdisk não irá permitir a criação de uma label nova. Existem dois jeitos de contornar o problema. Um é criar uma disklabel da Sun ou do MS-DOS, salvar as mudanças em disco, e reiniciar o fdisk. O segundo é sobre-escrever a tabela de partições com dados de zero com o seguinte comando: dd if=/dev/zero of=/dev/sda bs=512 count=1.

Deixando o cabeçalho de volume SGI do tamanho correto

Importante: Este passo é normalmente necessário, devido a um bug no fdisk. Por algum motivo, o cabeçalho de volume não é criado corretamente, e o resultado final é que começa e termina no cilindro 0. Isto impede que múltiplas partições sejam criadas. Pra contornar o problema... continue lendo.

Agora que uma Disklabel de SGI foi criada, as partições podem ser definidas. No exemplo acima, já existem duas partições definidas para você, Elas são as partições especiais mencionadas acima e não devem normalmente ser alteradas. No entanto, para instalar o Gentoo, nós iremos carregar um gerenciador de inicialização e possivelmente imagens de kernel (dependendo do tipo de sistema) diretamente no cabeçalho de volume. O cabeçalho de volume pode ter até oito imagens de qualquer tamanho, com cada imagem permitindo nomes de oito caracteres.

O processo de tornar o cabeçalho de volume maior não é exatamente simples; existe um pouco de manha. Não é possível simplesmente apagar e re-adicionar o volume por causa de um comportamento estranho do fdisk. No exemplo fornecido abaixo, nós iremos criar um cabeçalho de volume de 50 MB junto com uma partição de /boot de 50MB. O esquema real de seu disco pode variar, mas isto é apenas para propósitos ilustrativos.

Listagem de código 1.1: Redimensionando o cabeçalho de volume SGI corretamente

Command (m for help): n
Partition number (1-16): 1
First cylinder (5-8682, default 5): 51
 Last cylinder (51-8682, default 8682): 101

(Note como o fdisk só permite que a primeira partição seja recriada começando )
(com um cilindro mínimo 5? Se você tentasse apagar & recriar o cabeçalho  )
(de volume deste jeito, você teria encontrado o mesmo problema. Em nosso      )
(exemplo, nós queremos que /boot tenha 50MB, então começamos no cilindro 51 (o)
(cabeçalho de volume precisa começar no cilindro 0, lembra?) e colocamos seu  )
(cilindro final como 101, o que dá mais ou menos 50 MB (+/- 1-5MB).           )

Command (m for help): d
Partition number (1-16): 9

(Apagar a nova partição (cabeçalho de volume SGI))

Command (m for help): n
Partition number (1-16): 9
First cylinder (0-50, default 0): 0
 Last cylinder (0-50, default 50): 50

(Re-criar a nova partição, terminando bem antes da primeira)

Se você não tiver certeza de como usar o fdisk leia abaixo as instruções de particionamento para Cobalts. Os conceitos são exatamente iguais -- apenas lembre-se de deixar as partições de cabeçalho de volume e disco inteiro sozinhas.

Uma vez feito isso, você pode criar o resto de suas partições como desejar. Depois que todas suas partições estiverem prontas, certifique-se de mudar a ID de sua partição de swap para 82, que é Linux Swap. Por padrão, será 83, Linux Native.

Agora que suas partições foram criadas, você pode continuar com Criando sistemas de arquivos.

Máquinas Cobalt: Particionando seu disco

Em máquinas Cobalt, o BOOTROM espera ver um MBR de MS-DOS, então o particionamento do drive é relativamente simples -- na verdade, é feito da mesma maneira que você faria em uma máquina Intel x86. Todavia, existem algumas coisas que você deve ter em mente.

  • O firmware do Cobalt irá esperar que /dev/hda1 seja uma partição de Linux formatada com EXT2 Revision 0. Partições EXT2 Revision 1 NÃO IRÃO FUNCIONAR! (O BOOTROM do Cobalt só entende EXT2r0)
  • A partição dita acima deve conter uma imagem ELF gzip-ada, vmlinux.gz na raiz da partição, que carrega como o kernel

Por este motivo, eu recomendo criar uma partição /boot de ~20MB /boot formatada com EXT2r0 na qual você pode instalar o CoLo & seus kernéis. Isto permite que você rode um sistema de arquivos moderno (EXT3 ou ReiserFS) para seu sistema de arquivos raiz.

Irei presumir que você criou /dev/hda1 para montar mais tarde como uma partição /boot. Se você quiser que esta seja a partição /, você precisará lembrar-se das expectativas do PROM.

Continuando... Para criar as partições você digita fdisk /dev/hda no prompt. Os comandos principais de que você precisa saber são os seguintes:

  • o: Apagar antiga tabela de partições, iniciando com uma tabela de partições MS-DOS vazia
  • n: Nova partição
  • t: Mudar tipo de partição
    • Use tipo 82 para swap de Linux, 83 para sistema de arquivos de Linux
  • d: Apagar uma partição
  • p: Mostrar (print) tabela de partições
  • q: Sair -- deixando a antiga tabela de partições como está.
  • w: Sair -- escrevendo a tabela de partições no processo.

Listagem de código 1.1: Particionando o disco

# fdisk /dev/hda

The number of cylinders for this disk is set to 19870.
There is nothing wrong with that, but this is larger than 1024,
and could in certain setups cause problems with:
1) software that runs at boot time (e.g., old versions of LILO)
2) booting and partitioning software from other OSs
   (e.g., DOS FDISK, OS/2 FDISK)

(Inicie limpando quaisquer partições existentes)
Command (m for help): o
Building a new DOS disklabel. Changes will remain in memory only,
until you decide to write them. After that, of course, the previous
content won't be recoverable.


The number of cylinders for this disk is set to 19870.
There is nothing wrong with that, but this is larger than 1024,
and could in certain setups cause problems with:
1) software that runs at boot time (e.g., old versions of LILO)
2) booting and partitioning software from other OSs
   (e.g., DOS FDISK, OS/2 FDISK)
Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)

(Você pode agora verificar que a tabela de partições está vazia usando o comando 'p')

Command (m for help): p

Disk /dev/hda: 10.2 GB, 10254827520 bytes
16 heads, 63 sectors/track, 19870 cylinders
Units = cylinders of 1008 * 512 = 516096 bytes

   Device Boot      Start         End      Blocks   Id  System

(Crie a partição /boot)

Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 1

(Simplesmente aperte ENTER aqui para aceitar o padrão)

First cylinder (1-19870, default 1):
Last cylinder or +size or +sizeM or +sizeK (1-19870, default 19870): +20M

(e agora se apertarmos 'p' novamente, nós devemos ver a nova partição)
Command (m for help): p

Disk /dev/hda: 10.2 GB, 10254827520 bytes
16 heads, 63 sectors/track, 19870 cylinders
Units = cylinders of 1008 * 512 = 516096 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/hda1               1          40       20128+  83  Linux

(O resto, prefiro colocar em uma partição estendida, então irei criá-la)

Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
e
Partition number (1-4): 2

(Novamente, tudo bem com o padrão, só aperte ENTER.)

First cylinder (41-19870, default 41):
Using default value 41

(Nós devemos usar o disco inteiro aqui, então aperte ENTER novamente)
Last cylinder or +size or +sizeM or +sizeK (41-19870, default 19870):
Using default value 19870

(Agora, a partição / -- eu uso partições separadas para /usr, /var,
etc... então / pode ser pequena. Ajuste de acordo com sua preferência.)

Command (m for help): n
Command action
   l   logical (5 or over)
   p   primary partition (1-4)
l
First cylinder (41-19870, default 41):<Aperte ENTER>
Using default value 41
Last cylinder or +size or +sizeM or +sizeK (41-19870, default 19870): +500M

(... e semelhante para quaisquer outras partições ...)

(Por fim, a partição de swap. Eu recomendo pelo menos 250MB de swap,
de preferência 1GB)

Command (m for help): n
Command action
   l   logical (5 or over)
   p   primary partition (1-4)
l
First cylinder (17294-19870, default 17294): <Aperte ENTER>
Using default value 17294
Last cylinder or +size or +sizeM or +sizeK (1011-19870, default 19870): <Aperte ENTER>
Using default value 19870

(Agora, se nós verificarmos nossa tabela de partições, tudo deve estar pronto para embarcação
fora uma coisa...)

Command (m for help): p

Disk /dev/hda: 10.2 GB, 10254827520 bytes
16 heads, 63 sectors/track, 19870 cylinders
Units = cylinders of 1008 * 512 = 516096 bytes

Device Boot      Start         End      Blocks      ID  System
/dev/hda1               1          21       10552+  83  Linux
/dev/hda2              22       19870    10003896    5  Extended
/dev/hda5              22        1037      512032+  83  Linux
/dev/hda6            1038        5101     2048224+  83  Linux
/dev/hda7            5102        9165     2048224+  83  Linux
/dev/hda8            9166       13229     2048224+  83  Linux
/dev/hda9           13230       17293     2048224+  83  Linux
/dev/hda10          17294       19870     1298776+  83  Linux

(Veja como o #10, nossa partição de swap ainda é do tipo 83?)

Command (m for help): t
Partition number (1-10): 10
Hex code (type L to list codes): 82
Changed system type of partition 10 to 82 (Linux swap)

(Isto deve consertar o problema... só para verificar...)

Command (m for help): p

Disk /dev/hda: 10.2 GB, 10254827520 bytes
16 heads, 63 sectors/track, 19870 cylinders
Units = cylinders of 1008 * 512 = 516096 bytes

Device Boot      Start         End      Blocks      ID  System
/dev/hda1               1          21       10552+  83  Linux
/dev/hda2              22       19870    10003896    5  Extended
/dev/hda5              22        1037      512032+  83  Linux
/dev/hda6            1038        5101     2048224+  83  Linux
/dev/hda7            5102        9165     2048224+  83  Linux
/dev/hda8            9166       13229     2048224+  83  Linux
/dev/hda9           13230       17293     2048224+  83  Linux
/dev/hda10          17294       19870     1298776+  82  Linux Swap

(Agora, nós escrevemos a nova tabela de partições.)

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.

#

E isso é tudo que há para fazer. Você deve seguir agora para o próximo estágio: Criando sistemas de arquivos.

1.  Criando sistemas de arquivos

Introdução

Agora que suas partições foram criadas, está na hora de colocar um sistema de arquivos nelas. Se você não se importa em escolher o sistema de arquivos e está contente com o que usamos como padrão neste manual, continue com Aplicando um sistema de arquivos a uma partição. Caso contrário, leia mais para aprender sobre os sistemas de arquivos disponíveis...

Sistemas de arquivos?

Vários sistemas de arquivos estão disponíveis. ReiserFS, EXT2 e EXT3 estão estáveis nas arquiteturas MIPS, os outros são experimentais.

O ext2 é o sistema mais testado e fiel ao Linux, mas não tem jornal de meta-dados, o que significa que verificações rotineiras de sistemas de arquivo ext2 podem levar bastante tempo. Existe agora uma razoável seleção de sistemas de arquivos de nova geração com jornal que podem ter sua consistência verificada rapidamente e que são geralmente preferíveis aos seus respectivos sistemas sem jornal. Sistemas de arquivo com jornal previnem longas esperas quando você carrega seu sistema e seu sistema de arquivos está em um estado inconsistente.

O ext3 é a versão com jornal do sistema de arquivos ext2, fornecendo jornal de meta-dados para recuperação rápida, fora outros modos de jornal aprimorados como dados completos e dados ordenados. O ext3 é um sistema de arquivos muito bom e confiável. Tem uma opção adicional de catalogar hashed b-trees que permite alta performance em quase todas situações. Você pode ativar este catálogo adicionando -O dir_index ao comando mke2fs. Para resumir, o ext3 é um excelente sistema de arquivos.

O ReiserFS é sistema de arquivos baseado em B*-trees que tem uma performance em geral muito boa e muito superior a tanto o ext2 quanto o ext3 na hora de lidar com arquivos pequenos (de menos de 4k), freqüentemente com um fator de 10x-15x. O ReiserFS também escala extremamente bem e tem jornal de meta-dados. A partir do kernel 2.4.18+, o ReiserFS está sólido e pronto para ser usado tanto como um sistema de arquivos genérico quanto para casos extremos como a criação de sistemas de arquivos enormes, uso de muitos arquivos pequenos, arquivos muito grandes e diretórios contendo dezenas de milhares de arquivos.

O XFS é um sistema de arquivos com jornal de meta-dados que vem com um robusto conjunto de funções e é otimizado para escalabilidade. Só recomendamos usar este sistema de arquivos em sistemas rodando Linux com equipamento SCSI de ponta e/ou armazenamento em canais de fibra e fonte de energia sem interrupção. Pelo fato de o XFS criar cachês agressivamente de dados em uso na memória RAM, programas mal desenhados (que não tomam precauções na hora de escrever os arquivos em disco, e existem muitos deles) podem perder uma grande quantidade de dados se o sistema for desligado sem aviso.

O JFS é o sistema de arquivos com jornal de alta performance da IBM. Recentemente tornou-se pronto para uso em produção e não há experiência suficiente para comentar a favor ou contra sua estabilidade geral neste ponto.

Aplicando um sistema de arquivos a uma partição

Para criar um sistema de arquivos em uma partição ou volume, existem ferramentas disponíveis para cada sistema de arquivos possível:

Sistema de arquivos Comando de criação
ext2 mke2fs
ext3 mke2fs -j
reiserfs mkreiserfs
xfs mkfs.xfs
jfs mkfs.jfs

Por exemplo, para ter a partição de inicialização (boot) (/dev/sda1 em nosso exemplo) em ext2 e a partição de root (/dev/sda3 em nosso exemplo) em ext3 (como em nosso exemplo), você faria:

Listagem de código 1.1: Aplicando um sistema de arquivos a uma partição

# mke2fs /dev/sda1
# mke2fs -j /dev/sda3

Agora crie os sistemas de arquivos em suas partições recém-criadas (ou volumes lógicos).

Aviso: Se você estiver instalando em um servidor Cobalt, lembre-se de que /dev/hda1 DEVE ser do tipo EXT2 revision 0; Qualquer outro (como EXT2 revision 1, EXT3, ReiserFS, XFS, JFS e outros) NÃO IRÁ FUNCIONAR! Você pode formatar a partição usando o comando: mke2fs -r 0 /dev/hda1.

Aviso: Também, saiba que o arcboot não é capaz de ler outros sistemas de arquivos fora EXT2, EXT3 e ISO9660 (versões recentes). Por este motivo, /boot em máquinas SGI devem também residir em uma partição EXT2 ou EXT3.

Ativando a partição de swap

mkswap é o comando usado para criar e inicializar partições de swap:

Listagem de código 1.1: Criando uma assinatura de swap

# mkswap /dev/sda2

Para ativar a partição de swap, use swapon:

Listagem de código 1.1: Ativando a partição de swap

# swapon /dev/sda2

Crie e ative o swap com os comandos mencionados acima.

1.  Montando

Agora que suas partições foram iniciadas e possuem um sistema de arquivos, está na hora de montá-las. Use o comando mount. Não se esqueça de criar os diretórios necessários de montagem para cada partição que você criou. Como exemplo montamos a partição raiz (root) e de inicialização (boot):

Listagem de código 1.1: Montando partições

# mount /dev/sda3 /mnt/gentoo
# mkdir /mnt/gentoo/boot
# mount /dev/sda1 /mnt/gentoo/boot

Nota: Se você quiser que seu /tmp resida em uma partição separada, certifique-se de mudar suas permissões depois de montá-la: chmod 1777 /mnt/gentoo/tmp. O mesmo vale para /var/tmp.

Agora iremos montar o sistema de arquivos proc (uma interface virtual com o kernel) em /proc. Porém, primeiro iremos colocar nossos arquivos nas partições.

Continue com (Instalando os arquivos de instalação do Gentoo).

Atualizado 2 de outubro de 2005

A versão original deste documento foi atualizada em 17 de outubro de 2011

Donate to support our development efforts.

Copyright 2001-2012 Gentoo Foundation, Inc. Questions, Comments? Contact us.