[OpenBSD]

[Índice da FAQ] [Seção 13 - Multimídia] [Seção 15 - Pacotes e Portes]

14 - Configuração dos Discos


Conteúdo


14.1 - Uso do disklabel(8) do OpenBSD

O que é disklabel(8)?

Para começar, leia a página de manual do disklabel(8).

Os detalhes da configuração de discos no OpenBSD varia um pouco entre as plataformas. Para i386, amd64, macppc, zaurus e armish, a configuração do disco é feita em dois estágios. Primeiro, a fatia do OpenBSD no disco rígido é definida usando o fdisk(8), então a fatia é subdividida em partições do OpenBSD usando o disklabel(8).

Todas as plataformas do OpenBSD, entretanto, usam o disklabel(8) para o gerenciamento completo das partições do OpenBSD. As plataformas que também usam o fdisk(8) colocam todas as partições disklabel(8) em uma única partição fdisk.

Os labels contêm certas informações sobre o seu disco, como a geometria do disco e informações sobre os sistemas de arquivos no disco. Eles também contém informações sobre o próprio disco, como a velocidade de rotação, "interleave", etc., que estão presentes por razões históricas, e frequentemente estão incorretas. Não se preocupe com isso. O disklabel então é usado pelo programa de bootstrap para acessar o disco e saber quais sistemas de arquivos estão contidos no disco. Você pode ler informações amplas a respeito do disklabel na página de manual disklabel(5).

Em algumas plataformas, o disklabel ajuda a superar limitações da arquitetura no particionamento do disco. Por exemplo, no i386, você pode ter 4 partições primárias, mas com o disklabel(8), você usa uma dessas partições 'primárias' para guardar *todas* as suas partições do OpenBSD (por exemplo, 'swap', '/', '/usr', '/var', etc.), e você ainda terá mais 3 partições disponíveis para outros sistemas operacionais.

disklabel(8) durante a instalação do OpenBSD

Uma parte importante na instalação do OpenBSD é a criação inicial dos labels. Durante a instalação, você usa o disklabel(8) para criar partições separadas. Como parte do processo de instalação, você pode definir seus pontos de montagem a partir do disklabel(8), mas você pode mudar mais tarde durante a instalação ou também após a instalação.

Não existe um jeito "certo" de criar um label em um disco, mas existem muitos jeitos errados. Antes de tentar criar um label no seu disco, veja esta discussão sobre particionamento e tamanho da partição.

Para um exemplo de uso do disklabel(8) durante a instalação, veja a parte Configuração dos discos do Guia de instalação.

Uso do disklabel(8) após a instalação

Após instalar, um dos usos mais comuns do disklabel(8) é para verificar o layout do seu disco. O seguinte comando mostra a você o disklabel atual sem modificá-lo:

# disklabel wd0 <-- Disco que você quer ver
# Inside MBR partition 3: type A6 start 63 size 29880837
# /dev/rwd0c:
type: ESDI
disk: ESDI/IDE disk
label: Maxtor 51536H2  
flags:
bytes/sector: 512
sectors/track: 63
tracks/cylinder: 16
sectors/cylinder: 1008
cylinders: 16383
total sectors: 29888820
rpm: 3600
interleave: 1
trackskew: 0
cylinderskew: 0
headswitch: 0           # microseconds
track-to-track seek: 0  # microseconds
drivedata: 0 

16 partitions:
#             size        offset  fstype [fsize bsize  cpg]
  a:        614817            63  4.2BSD   2048 16384  328 # Cyl     0*-   609 
  b:        409248        614880    swap                   # Cyl   610 -  1015 
  c:      29888820             0  unused      0     0      # Cyl     0 - 29651*
  d:       6291936       1024128  4.2BSD   2048 16384  328 # Cyl  1016 -  7257 
  e:        409248       7316064  4.2BSD   2048 16384  328 # Cyl  7258 -  7663 
  f:       1024128       9822960  4.2BSD   2048 16384  328 # Cyl  9745 - 10760 
  h:       2097648       7725312  4.2BSD   2048 16384  328 # Cyl  7664 -  9744 

Note como esse disco tem somente uma parte do espaço em disco alocada no momento. Disklabel oferece dois modos diferentes para a edição, um modo de comandos (utilizado na instalação do OpenBSD) e um editor completo, como o vi(1). Você pode achar o modo de comandos mais fácil, já que ele o guia através de todas as etapas e fornece uma ajuda integrada, mas o modo de editor em tela cheia possui uma utilidade definida, também.

Vamos adicionar uma partição ao sistema acima.

Aviso: Em qualquer momento que você manipula o seu disklabel, você está colocando em risco todos os dados no seu disco rígido. Tenha certeza que você possui um backup dos dados antes de editar um disklabel existente!

Nós usaremos o modo de comandos integrado, que é executado usando a opção "-E" do disklabel(8).

# disklabel -E wd0
...
> a k
offset: [10847088] 
size: [19033812] 2g
Rounding to nearest cylinder: 4194288
FS type: [4.2BSD] 
> p m
device: /dev/rwd0c
type: ESDI
disk: ESDI/IDE disk
label: Maxtor 51536H2  
bytes/sector: 512
sectors/track: 63
tracks/cylinder: 16
sectors/cylinder: 1008
cylinders: 16383
total bytes: 14594.2M
free bytes: 7245.9M
rpm: 3600

16 partitions:
#             size        offset  fstype [fsize bsize  cpg]
  a:        300.2M          0.0M  4.2BSD   2048 16384  328 # Cyl     0*-   609 
  b:        199.8M        300.2M    swap                   # Cyl   610 -  1015 
  c:      14594.2M          0.0M  unused      0     0      # Cyl     0 - 29651*
  d:       3072.2M        500.1M  4.2BSD   2048 16384  328 # Cyl  1016 -  7257 
  e:        199.8M       3572.3M  4.2BSD   2048 16384  328 # Cyl  7258 -  7663 
  f:        500.1M       4796.4M  4.2BSD   2048 16384  328 # Cyl  9745 - 10760 
  h:       1024.2M       3772.1M  4.2BSD   2048 16384  328 # Cyl  7664 -  9744 
  k:       2048.0M       5296.4M  4.2BSD   2048 16384   16 # Cyl 10761 - 14921 
> q
Write new label?: [y] 
Nesse caso, o disklabel(8) calculou um bom ponto de partida para a partição. Em muitos casos, ele é capaz de fazer isso, mas se você tem "buracos" no disklabel (ou seja, você excluiu uma partição, ou você apenas gosta de tornar a sua vida complicada), você pode precisar ter que sentar com um papel e uma caneta para calcular um offset correto. Note que, embora o disklabel(8) faça algumas verificações de sanidade, é possível fazer coisas muito erradas aqui. Seja cuidadoso, entenda o significado dos valores que você está utilizando.

Na maioria das plataformas do OpenBSD, existem dezesseis partições disponíveis, marcadas de "a" até "p". (alguns sistemas "especializados" podem ter somente oito). Todo disklabel deve ter uma partição 'c', com um "fstype" de valor "unused", que cobre todo o disco físico. Se o seu disklabel não é assim, ele precisa ser consertado; a opção "D" (a seguir) pode ajudar. Nunca tente usar a partição "c" para nenhuma outra coisa além de acessar os setores brutos do disco; não tente criar um sistema de arquivos em "c". No dispositivo de inicialização, "a" é reservado para a partição raiz, e "b" é a partição de swap, mas somente o dispositivo de inicialização faz essas distinções. Outros dispositivos podem usar todas as quinze partições, exceto "c", como sistemas de arquivos.

Truques e dicas sobre disklabel

14.2 - Uso do fdisk(8)

Antes de começar, leia a página de manual do fdisk(8).

O fdisk(8) é usado em algumas plataformas (i386, amd64, macppc, zaurus e armish) para criar uma partição reconhecida pela ROM de inicialização do sistema, onde as partições disklabel do OpenBSD possam ser colocadas. Outras plataformas não precisam ou não usam o fdisk(8). O fdisk(8) também pode ser usado para manipulações do MBR ("Master Boot Record"), que pode afetar todos os sistemas operacionais em um computador. Ao contrário de alguns programas do tipo fdisk em alguns outros sistemas operacionais, o fdisk do OpenBSD assume que você sabe o que você quer fazer, e te ajuda a fazer o que você precisa fazer, tornando-o uma ferramenta poderosa para se ter em mãos. Ele também ajuda você a fazer coisas que você não deve ou não tem intenção de fazer, então ele precisa ser usado com cuidado.

Normalmente, somente uma partição fdisk do OpenBSD é colocada em um disco. Aquela partição é subdividida pelo disklabel em partições de sistemas de arquivos do OpenBSD.

Para ver sua tabela de partição usando fdisk, use:

# fdisk sd0

Que nos mostra uma saída similar a esta:

Disk: sd0       geometry: 553/255/63 [8883945 Sectors]
Offset: 0       Signature: 0xAA55
         Starting       Ending       LBA Info:
 #: id    C   H  S -    C   H  S [       start:      size   ]
------------------------------------------------------------------------
*0: A6    3   0  1 -  552 254 63 [       48195:     8835750 ] OpenBSD     
 1: 12    0   1  1 -    2 254 63 [          63:       48132 ] Compaq Diag.
 2: 00    0   0  0 -    0   0  0 [           0:           0 ] unused      
 3: 00    0   0  0 -    0   0  0 [           0:           0 ] unused      

Neste exemplo, nós estamos visualizando a saída do fdisk do primeiro drive SCSI. Nós podemos ver a partição OpenBSD (A6) e seu tamanho. O * indica que a partição OpenBSD é uma partição inicializável.

No exemplo anterior nós apenas visualizamos nossa informação. E se quisermos editar a nossa tabela de partições? Bem, para fazer isso nós usamos o sinalizador -e. Isso nos leva a um prompt de linha de comando para interagir com o fdisk.

# fdisk -e wd0
Enter 'help' for information
fdisk: 1> help
        help            Command help list
        manual          Show entire OpenBSD man page for fdisk
        reinit          Re-initialize loaded MBR (to defaults)
        setpid          Set the identifier of a given table entry
        disk            Edit current drive stats
        edit            Edit given table entry
        flag            Flag given table entry as bootable
        update          Update machine code in loaded MBR
        select          Select extended partition table entry MBR
        swap            Swap two partition entries
        print           Print loaded MBR partition table
        write           Write loaded MBR to disk
        exit            Exit edit of current MBR, without saving changes
        quit            Quit edit of current MBR, saving current changes
        abort           Abort program without saving current changes
fdisk: 1> 

Esta é uma visão geral dos comandos que você pode usar quando escolhe o sinalizador -e.

Truques e dicas sobre fdisk

14.3 - Adição de discos extras no OpenBSD

Após instalar CORRETAMENTE o disco, você precisa usar o fdisk(8) (somente para i386) e o disklabel(8) para configurar o disco no OpenBSD.

Para os usuários do i386, comece com o fdisk. As outras arquiteturas podem ignorar esta etapa. No exemplo a seguir, nós estamos adicionando um terceiro drive SCSI no sistema.

# fdisk -i sd2
Isso inicializa a tabela de partições "real" do disco para uso exclusivo pelo OpenBSD. Em seguida, você precisa criar um disklabel para ele. Isso parecerá confuso.
# disklabel -e sd2

(a tela fica vazia e seu $EDITOR aparece)
type: SCSI
...bla...
sectors/track: 63
total sectors: 6185088
...bla...
16 partitions:
#        size   offset    fstype   [fsize bsize   cpg]
  c:  6185088        0    unused        0     0         # (Cyl.    0 - 6135)
  d:  1405080       63    4.2BSD     1024  8192    16   # (Cyl.    0*- 1393*)
  e:  4779945  1405143    4.2BSD     1024  8192    16   # (Cyl. 1393*- 6135)
Primeiro, ignore a partição 'c', ela sempre está ali e é para que programas como o disklabel funcionem! O Fstype para o OpenBSD é 4.2BSD. O número total de setores ("total sectors") é o tamanho total do disco. Digamos que ele é um disco de 3 gigabytes; três gigabytes em termos do fabricante do disco são 3000 megabytes. Então divida 6185088 por 3000 (use o bc(1)). Você obtém 2061. Então, para decidir o tamanho para as partições a, d, e, f, g, ... simplesmente multiplique X por 2061, a fim de conseguir X megabytes de espaço para aquela partição. O offset para a sua primeira partição deve ser o mesmo que o valor relatado na saída do disklabel como "sectors/track". Para nós, esse valor é 63. O offset de cada partição seguinte deve ser uma combinação do tamanho de cada partição e o offset de cada partição (exceto a partição 'c', já que ela não entra nessa equação.)

Ou, se você quer apenas uma partição no disco, a fim de usar o espaço para armazenamento Web ou um diretório pessoal ou outra coisa, apenas pegue o tamanho total do disco e subtraia o valor de "sectors/track" dele. 6185088-63 = 6185025. Sua partição é:

    d:  6185025       63    4.2BSD     1024  8192    16 
Se tudo isso lhe aparenta ser inutilmente complexo, você pode simplesmente usar disklabel -E para pegar o mesmo modo de particionamento que você usou no seu disco de instalação! Lá você pode simplesmente usar "96M" para especificar "96 megabytes", ou 96G para 96 gigabytes.

Muita coisa foi feita. Mas você ainda não terminou. Você agora precisa criar um sistema de arquivos no disco usando o newfs(8).

# newfs sd2d 

Ou outro nome que o seu disco foi nomeado pelo esquema de numeração de discos do OpenBSD. (Olhe a saída do dmesg(8) para ver como o seu disco foi nomeado pelo OpenBSD.)

Agora determine onde você vai montar a nova partição que você criou. Digamos que você queira colocá-la em /u. Primeiro, crie o diretório /u. Depois monte-a.

# mount /dev/sd2d /u

Enfim, adicione-a no /etc/fstab(5).

/dev/sd2d /u ffs rw 1 1

O que acontece se você precisa migrar um diretório existente, como o /usr/local? Você deve montar o novo drive em /mnt e usar cpio -pdum para copiar /usr/local para o diretório /mnt. Edite o arquivo /etc/fstab(5) para mostrar que a partição /usr/local agora está em /dev/sd2d (sua partição recém-formatada). Exemplo:

/dev/sd2d /usr/local ffs rw 1 1

Reinicialize em modo usuário único com boot -s, mova o /usr/local para /usr/local-backup (ou se você se sente bem, remova-o) e crie um diretório /usr/local vazio. Então reinicialize o sistema, e, pronto, os arquivos estão lá!

14.4 - Como a swap é controlada?

14.4.1 - Sobre a swap

Historicamente, todos os tipos de regras têm sido propostas para guiar administradores na questão sobre quanta memória swap usar em suas máquinas. O problema, naturalmente, é que existem poucas aplicações "normais".

Um uso não óbvio da swap é ser um local onde o kernel pode fazer uma descarga de uma cópia daquilo que estava no núcleo, em um evento de pânico do sistema, para uma análise posterior. Para isso funcionar, você deve ter uma partição swap (e não um arquivo de swap) tão grande quanto a sua memória RAM. Por padrão, o sistema salva uma cópia dessa descarga em /var/crash na reinicialização; assim, se você deseja ser capaz de fazer isso automaticamente, você precisa de espaço livre suficiente em /var. No entanto, você pode também carregar o sistema em modo usuário único e usar o savecore(8) para fazer a descarga em algum outro lugar.

Muitos tipos de sistemas podem ser configurados apropriadamente sem nenhuma swap. Por exemplo, firewalls não devem fazer swap em uma operação normal. Máquinas com armazenamento flash geralmente não devem fazer swap. Se o seu firewall é baseado em flash, você pode se beneficiar (levemente) por não alocar uma partição swap, embora na maioria dos outros casos, uma partição swap não vai causar nenhum dano; a maioria dos discos possuem espaço mais do que suficiente para alocar uma pequena área para a swap.

Existem todos os tipos de dicas sobre otimizar a swap (em que lugar do disco colocá-la, discos separados, etc.), mas se você se achar em uma situação onde otimizar a swap é um problema, você provavelmente precisa de mais memória RAM. Geralmente, a melhor otimização para a swap é não precisar dela.

No OpenBSD, a swap é gerenciada pelo programa swapctl(8), que adiciona, remove, lista e prioriza os dispositivos e arquivos de swap.

14.4.2 - Fazendo swap em uma partição

No OpenBSD, a partição 'b' do drive de inicialização é usada por padrão e automaticamente para a swap. Nenhuma configuração é necessária para isso funcionar. Se você não deseja usar swap no disco de inicialização, não defina uma partição "b". Se você deseja usar a swap em outras partições ou em outros discos, você precisa definir essas partições no /etc/fstab, com linhas parecidas com estas:

/dev/sd3b none swap sw 0 0
/dev/sd3d none swap sw 0 0

14.4.3 - Fazendo swap em um arquivo

(Nota: se você está tentando fazer swap em um arquivo porque está recebendo erros do tipo "virtual memory exhausted", você deve tentar aumentar os limites dos processos com o unlimit(1) para o csh, ou com o ulimit(1) para o sh.)

Algumas vezes, seu palpite inicial sobre quanta swap você precisa prova estar errada, e você tem que adicionar um espaço swap, ocasionalmente, durante um momento de pressão (como em: "Geez, na velocidade em que isto está queimando swap, estaremos em uma situação difícil em cinco minutos"). Se você se encontrar nessa posição, adicionar um espaço swap como um arquivo em um sistema de arquivos existente pode ser uma correção rápida.

O arquivo não pode residir em um sistema de arquivos que possui SoftUpdates ativado (isso está desabilitado por padrão). Para começar, você pode ver o quanto de swap você possui atualmente, e o quanto você está usando, com o utilitário swapctl(8). Você pode fazer isso usando o comando:

$ swapctl -l
Device      512-blocks     Used    Avail Capacity  Priority
swap_device      65520        8    65512     0%    0

Isso mostra os dispositivos que estão sendo usados para swap e suas estatísticas atuais. No exemplo acima, existe somente um dispositivo, chamado "swap_device". Essa é a área pré-definida no disco que é usada para swap (mostrada como a partição b na visualização de disklabels). Como você pode ver no exemplo acima, aquele dispositivo não está tendo muito uso naquele momento, mas para os propósitos desse documento, vamos agir como se um espaço extra de 32 MB seja necessário.

O primeiro passo para configurar um arquivo como dispositivo swap é criar o arquivo. O melhor jeito de se fazer isso é com o utilitário dd(1). Este é um exemplo da criação do arquivo /var/swap, que possui 32M de tamanho.

$ sudo dd if=/dev/zero of=/var/swap bs=1k count=32768
32768+0 records in
32768+0 records out
33554432 bytes transferred in 20 secs (1677721 bytes/sec)

Após isso ser feito, nós podemos ativar o swap naquele dispositivo. Use o seguinte comando para ativar o swap neste dispositivo

$ sudo chmod 600 /var/swap
$ sudo swapctl -a /var/swap

Agora nós precisamos verificar para ver se ele foi adicionado corretamente na lista de dispositivos de swap.

$ swapctl -l
Device      512-blocks     Used    Avail Capacity  Priority
swap_device      65520        8    65512     0%    0
/var/swap        65536        0    65536     0%    0
Total           131056        8   131048     0%

Agora que o arquivo está configurado e o swap está sendo feito, você precisa adicionar uma linha no seu arquivo /etc/fstab, assim aquele arquivo é configurado na próxima inicialização. Se esta linha não é adicionada, você não terá este dispositivo swap configurado.

$ cat /etc/fstab
/dev/wd0a / ffs rw 1 1
/var/swap /var/swap swap sw 0 0

14.5 - Soft Updates

Os "Soft Updates" são baseados em uma ideia proposta por Greg Ganger e Yale Patt, e desenvolvida para o FreeBSD por Kirk McKusick. Os SoftUpdates impõem um ordenamento parcial nas operações no cache de buffer, o que permite que o requerimento para gravação assíncrona de entradas de diretório seja removido do código FFS. Assim, um aumento de desempenho é observado na gravação no disco.

A ativação dos soft updates precisa ser feita com uma opção em tempo de montagem. Ao montar uma partição com o utilitário mount(8), você pode especificar que deseja ativar os soft updates naquela partição. A seguir, uma entrada de exemplo em /etc/fstab(5) que possui uma partição, sd0a, que nós desejamos que seja montada com soft updates.

/dev/sd0a / ffs rw,softdep 1 1

Nota para usuários sparc: Não ative os soft updates em máquinas sun4 ou sun4c. Essas arquiteturas suportam somente uma pequena quantidade de memória do kernel e não podem usar essa funcionalidade. No entanto, em máquinas sun4m não existe nenhum problema.

14.6 - Como é o processo de inicialização do OpenBSD/i386?

O processo de inicialização do OpenBSD/i386 não é trivial, e entender como ele funciona pode ser útil para descobrir algum problema quando as coisas não funcionam. Existem quatro partes fundamentais do processo de inicialização:
  1. Master Boot Record (MBR): O "Master Boot Record" (Registro de Inicialização Mestre) é o primeiro setor (512 bytes) físico do disco. Ele contém a tabela de partições primárias e um pequeno programa para carregar o PBR ("Partition Boot Record", ou Registro de Inicialização de Partição). Note que em alguns ambientes, o termo "MBR" é usado para se referir somente à porção de código desse primeiro bloco no disco, em vez de todo o primeiro bloco (incluindo a tabela de partições). É primordial entender o significado de "inicializar o MBR" -- na terminologia do OpenBSD, isso envolve reescrever o setor MBR inteiro, e não apenas o código, como é feito em alguns sistemas. Você utilizará isso raramente. Para fazer, use a opção "-u" do comando fdisk(8) ("fdisk -u wd0").

    Embora o OpenBSD inclua um MBR, você não é obrigado a usá-lo, já que praticamente qualquer MBR pode inicializar o OpenBSD. O MBR é manipulado pelo programa fdisk(8), que é usado na edição da tabela de partições, e também para instalar o código MBR no disco.

    O MBR do OpenBSD se anuncia com a mensagem:

    Using drive 0, partition 3.
    
    mostrando o disco e a partição de onde ele espera carregar o PBR. Em adição ao óbvio, ele também mostra um ponto ("."), que indica que esta máquina é capaz de usar a conversão LBA para inicializar. Se a máquina é incapaz de usar a conversão LBA, o ponto será trocado por um ponto-e-vírgula (";"), indicando a conversão CHS:
    Using drive 0, partition 3;
    
    Note que o ponto ou o ponto-e-vírgula pode ser usado como um indicador do "novo" MBR do OpenBSD, introduzido a partir da versão 3.5.
  2. Partition Boot Record (PBR): O "Partition Boot Record" (Registro de Inicialização de Partição), também chamado de PBR ou biosboot(8) (depois do nome do arquivo contendo o código), é o primeiro setor físico da partição OpenBSD do disco. O PBR é o "first-stage boot loader" (carregador de inicialização de primeiro estágio) do OpenBSD. Ele é carregado pelo código MBR, e tem a função de carregar o "second-stage boot loader" (carregador de inicialização de segundo estágio) boot(8). Como o MBR, o PBR é uma seção pequena de código e dados, com um total de 512 bytes. Não é o suficiente para abrigar uma aplicação com um sistema de arquivos completo, então no lugar de um PBR localizado em /boot no disco, a localização /boot, acessível pelo BIOS, é codificada fisicamente no PBR, no momento da instalação.

    O PBR é instalado pelo installboot(8), que é descrito em mais detalhes neste documento. O PBR se anuncia com a mensagem:

    Loading...
    
    mostrando um ponto para cada bloco de sistema de arquivos que ele tenta carregar. Novamente, o PBR mostra se ele está usando LBA ou CHS para carregar; se ele está usando a conversão CHS, ele mostra uma mensagem com um ponto-e-vírgula:
    Loading;...
    
    O antigo biosboot(8) (anterior à versão 3.5) mostrava a mensagem "reading boot...".
  3. Second Stage Boot Loader, /boot: /boot é carregado pelo PBR, e tem a função de acessar o sistema de arquivos do OpenBSD pelo BIOS da máquina, a fim de localizar e carregar o verdadeiro kernel. boot(8) também permite passar várias opções e informações para o kernel.

    boot(8) é um programa interativo. Depois de carregar, ele tenta localizar e ler o arquivo /etc/boot.conf; se ele existir (ele não está presente em uma instalação padrão), processa os comandos contidos nele. A menos que seja instruído de forma diferente pelo /etc/boot.conf, ele mostra ao usuário o prompt:

    probing: pc0 com0 com1 apm mem[636k 190M a20=on]
    disk: fd0 hd0+
    >> OpenBSD/i386 BOOT 3.02
    boot>
    
    Por padrão, o usuário tem cinco segundos para digitar um comando, mas se nenhum é fornecido antes do tempo expirar, ele começa seu comportamento padrão: carregar o kernel, bsd, da partição raiz do primeiro disco rígido. O "second-stage boot loader" (carregador de inicialização de segundo estágio) detecta (e examina) o hardware do seu sistema através do BIOS (o kernel do OpenBSD ainda não está carregado). Acima, você pode ver algumas coisas que ele procurou e encontrou: O caractere '+', que aparece depois do "hd0", significa que o BIOS indicou ao /boot que esse disco pode ser acessado por LBA. Ao fazer uma primeira instalação, você verá algumas vezes um '*' depois de um disco rígido -- isso significa que o disco não aparenta possuir um label OpenBSD válido.
  4. Kernel: /bsd: Esse é o objetivo do processo de inicialização, ter o kernel OpenBSD carregado na memória RAM e funcionando corretamente. Uma vez que o kernel está carregado, o OpenBSD acessa diretamente o hardware, sem passar pelo BIOS.
Assim, o começo do processo de inicialização se parece com isto:
Using drive 0, partition 3.                      <- MBR
Loading....                                      <- PBR
probing: pc0 com0 com1 apm mem[636k 190M a20=on] <- /boot
disk: fd0 hd0+
>> OpenBSD/i386 BOOT 3.02
boot>
booting hd0a:/bsd 4464500+838332 [58+204240+181750]=0x56cfd0
entry point at 0x100120

[ using 386464 bytes of bsd ELF symbol table ]
Copyright (c) 1982, 1986, 1989, 1991, 1993       <- Kernel
        The Regents of the University of California.  All rights reserved.
Copyright (c) 1995-2008 OpenBSD.  All rights reserved.  http://www.OpenBSD.org

OpenBSD 4.6 (GENERIC.MP) #89: Thu Jul  9 21:32:39 MDT 2009
    deraadt@i386.openbsd.org:/usr/src/sys/arch/i386/compile/GENERIC.MP
   ...

O que pode estar errado

Como o PBR é muito pequeno, seu leque de mensagens de erro é limitado, e um pouco complexo. As mensagens mais comuns são: Outras mensagens de erro são explicadas em detalhes na página de manual do biosboot(8).

Para mais informações sobre o processo de inicialização da plataforma i386, veja:

14.7 - Quais são os problemas em relação a discos de grande capacidade no OpenBSD?

O OpenBSD suporta os sistemas de arquivos FFS e FFS2 (também conhecidos como UFS e UFS2). O FFS é o sistema de arquivos histórico do OpenBSD, e a partir do OpenBSD 4.3 foi introduzido o novo FFS2. Antes de olhar os limites de cada sistema, nós precisamos olhar em alguns limites de sistema mais gerais.

Naturalmente, a habilidade do sistema de arquivos e as habilidades de um hardware em particular são duas coisas diferentes. Um disco rígido IDE de 250G pode ter problemas em interfaces (com uma capacidade máxima de 137G) antigas (embora, na maioria das vezes, eles funcionam bem), alguns adaptadores SCSI muito antigos aparentam ter problemas com drives modernos, e alguns BIOS antigos travam ao encontrar um disco rígido com um tamanho moderno. Você precisa respeitar as habilidades do seu hardware.

Tamanho da partição e limitações de alocação

Infelizmente, a habilidade completa do SO não está disponível até que o SO esteja carregado na memória. O processo de inicialização tem que utilizar (e, assim, ele é limitado pela) a ROM de inicialização do sistema.

Por essa razão, o arquivo /bsd (o kernel) inteiro precisa estar localizado dentro da área endereçável, no disco, pela ROM de inicialização. Isso significa que em alguns sistemas i386 antigos, a partição raiz precisa estar completamente dentro dos primeiros 504M, mas os computadores mais novos podem ter limites de 2G, 8G, 32G, 128G ou maiores. É importante notar que muitos computadores, relativamente novos, que suportam drives com capacidade maior que 128G, atualmente possuem limitações no BIOS para inicialização somente a partir de dentro dos primeiros 128G. Você pode usar esses sistemas com drives grandes, mas sua partição raiz precisa estar dentro do espaço suportado pela ROM de inicialização.

Note que é possível instalar um drive de 40G em um 486 antigo, carregar o OpenBSD a partir de uma grande partição, e achar que você violou com sucesso a regra acima. No entanto, ela pode voltar para assombrar você de um modo desagradável:

Por que? Porque quando você copiou o novo arquivo /bsd, ele não sobrescreveu o antigo, ele foi realocado em um novo local no disco, provavelmente fora da faixa de 504M que o BIOS suporta. O carregador de inicialização foi incapaz de encontrar o arquivo /bsd, e o sistema travou.

Para fazer o OpenBSD inicializar, os carregadores de inicialização (biosboot(8) e /boot, no caso das plataformas i386 e amd64) e o kernel (/bsd) precisam estar dentro da faixa suportada pela ROM de inicialização, e dentro de suas próprias habilidades. Para manter tudo seguro, a regra é simples:

a partição raiz, inteira, precisa estar dentro do espaço endereçável pelo BIOS do computador (ou a ROM de inicialização).

Alguns usuários de sistemas diferentes do i386 acham que estão imunes a isso; no entanto, a maioria das plataformas têm alguma espécie de limitação na ROM de inicialização em relação ao tamanho do disco. Procurar qual é o limite, no entanto, pode ser difícil.

Essa é outra boa razão para particionar o seu disco rígido em vez de usar uma grande partição.

Tempo do fsck(8) e requerimentos de memória

Outra consideração sobre sistemas de arquivos grandes é o tempo e a memória requerida para verificar o sistema de arquivos com o fsck(8) depois de um travamento ou queda de energia. Ninguém deve colocar um sistema de arquivos de 120G em um sistema com 32M de RAM e esperar que ele execute o fsck(8) com sucesso após um travamento. Uma regra simples a ser aplicada é que o sistema deve ter no mínimo 1M de memória disponível para cada 1G de espaço em disco, para executar a verificação do disco corretamente. Swap pode ser usada aqui, mas com um desempenho muito ruim; tão ruim que chega a ser inaceitável, exceto em casos especiais.

O tempo necessário para verificar o drive com o fsck pode se tornar um problema quando o sistema de arquivos cresce, mas você somente precisa verificar o espaço em disco que está atualmente alocado para os sistemas de arquivos montados. Essa é outra razão para NÃO alocar todo o seu espaço em disco apenas porque existe espaço. Manter sistemas de arquivos montados como RO ("Read-Only", apenas para leitura), ou não montados, ajuda a mantê-los sem a necessidade de serem verificados com o fsck(8) após um tropeção no cabo de alimentação.

Não se esqueça que se você tem múltiplos discos no sistema, todos eles podem acabar sendo verificados com o fsck(8) após um travamento na mesma hora, então eles podem precisar de mais RAM do que um disco único.

No momento em que alguém usar algo maior que um sistema de arquivos de 1TB com o tamanho padrão de fragmento e bloco, o fsck precisa de 1GB de RAM para funcionar, que é o limite de aplicação no OpenBSD. Fragmentos e/ou blocos grandes reduzem o número de nós-i, e permitem sistemas de arquivos de grande capacidade.

FFS vs. FFS2

Usando FFS, o OpenBSD suporta um sistema de arquivos individual de até 231-1, ou 2.147.483.647 setores, e como cada setor tem 512 bytes, essa é uma quantidade menor que 1T. Com o FFS2, é possível ter sistemas de arquivos muito maiores, embora outros limites serão alcançados antes que os limites do sistema de arquivos sejam alcançados.

Os kernels de inicialização/instalação somente suportam o FFS, e não o FFS2, então as partições principais do sistema (/, /usr, /var, /tmp) não devem ser FFS2, ou problemas severos de manutenção podem surgir (de qualquer forma, não deve existir uma razão para essas partições serem grandes). Por essa razão, partições muito grandes devem somente ser usadas como partições que "não sejam do sistema", por exemplo, /home, /var/www/, /bigarray, etc.

Antes de fazer atualizações de versão, você deve marcar as partições FFS2 como "noauto", para mantê-las seguras de uma manipulação incorreta pelo kernel de instalação (que não suporta partições FFS2).

Note que nem todos os controladores e drivers suportam discos de grande capacidade. Por exemplo, ami(4) tem um limite de 2TB por volume lógico. Muitos ainda não foram testados; por exemplo, durante a escrita deste documento, não existem drives IDE ou SATA, disponíveis para testes, com mais de 1TB, então nós ainda não podemos ter certeza de que tudo funciona perfeitamente.

14.8 - Instalação dos blocos de inicialização ("Bootblocks") - específico para i386/amd64

Versões modernas do OpenBSD (3.5 e posteriores) possuem um carregador de inicialização muito robusto, que é mais indiferente às geometrias do drive do que o antigo carregador de inicialização era; no entanto, eles são sensíveis em relação a onde o arquivo /boot se encontra no disco. Se você fizer algo que mova o boot(8) para um novo lugar no disco (na verdade, um novo nó-i), você "quebra" o seu sistema, fazendo com que ele não inicialize corretamente. Para corrigir o seu bloco de inicialização, coloque um disquete de inicialização no seu drive (ou use um CD-ROM inicializável), e, no prompt de inicialização, digite "b hd0a:/bsd" para forçá-lo a inicializar a partir do primeiro disco rígido (e não o disquete). Sua máquina deve carregar normalmente. Você agora precisa reinstalar o carregador de inicialização de primeiro estágio (biosboot(8)) baseando-se na posição do arquivo /boot, usando o programa installboot(8).

No nosso exemplo, nós assumimos que seu disco de inicialização é sd0 (se for IDE, ele deve ser wd0, etc.):

# cd /usr/mdec; ./installboot /boot biosboot sd0

Se uma nova versão dos blocos de inicialização é requerida, você precisa compilá-los. Para fazer isso, use os comandos:

# cd /sys/arch/i386/stand/
# make && make install 
# cd /usr/mdec; cp ./boot /boot
# ./installboot /boot biosboot sd0 (ou qualquer outro nome de
dispositivo designado para o seu disco rígido)

14.9 - Se preparando para um desastre: Backup em fita e Restauração

Introdução:

Se você planeja executar o que possa ser chamado de servidor de produção, é recomendado possuir alguma forma de backup no caso de um dos seus discos rígidos falhar.

Esta documentação ajuda você na utilização dos utilitários padrão dump(8)/restore(8), fornecidos com o OpenBSD. Um utilitário de backup mais avançado, chamado "Amanda", para backup de múltiplos servidores em um drive de fita, está disponível através de pacotes. Na maioria dos ambientes, dump(8)/restore(8) é o suficiente. No entanto, se você tem a necessidade de fazer backup de várias máquinas, pode ser útil procurar a documentação sobre Amanda.

Os exemplos de dispositivos, neste documento, são para uma configuração que usa discos SCSI e fita. Em um ambiente de produção, discos SCSI são recomendados no lugar de IDE, devido ao modo como eles controlam blocos defeituosos. Isso não significa que esta informação não tem uso se você está usando um disco IDE ou outro tipo de drive de fita; os nomes dos dispositivos são ligeiramente diferentes. Por exemplo, sd0a é wd0a em um sistema baseado em IDE.

Fazendo backup em uma fita:

Fazer backup em uma fita requer que você saiba onde seus sistemas de arquivos estão montados. Você pode determinar como seus sistemas de arquivos estão montados, usando o comando mount(8) no seu terminal. Você deve obter uma saída similar a esta:

# mount
/dev/sd0a on / type ffs (local)
/dev/sd0h on /usr type ffs (local)

Nesse exemplo, o sistema de arquivos raiz (/) reside fisicamente em sd0a, que indica a partição a do disco SCSI fixo 0. O sistema de arquivos /usr reside em sd0h, que indica a partição h do disco SCSI fixo 0.

Um outro exemplo, de uma tabela de montagem mais avançada, pode ser:

# mount
/dev/sd0a on / type ffs (local)
/dev/sd0d on /var type ffs (local)
/dev/sd0e on /home type ffs (local)
/dev/sd0h on /usr type ffs (local)

Nesse exemplo mais avançado, o sistema de arquivos raiz (/) reside fisicamente em sd0a. O sistema de arquivos /var reside em sd0d, o sistema de arquivos /home em sd0e e, finalmente, /usr em sd0h.

Para fazer o backup da sua máquina, você precisa alimentar o dump com o nome de cada partição fixa do disco. Veja um exemplo dos comandos necessários para fazer um backup da tabela de montagem simples, listada acima:

# /sbin/dump -0au -f /dev/nrst0 /dev/rsd0a
# /sbin/dump -0au -f /dev/nrst0 /dev/rsd0h
# mt -f /dev/rst0 rewind  

Para o exemplo de tabela de montagem mais avançada, você usará algo similar a:

# /sbin/dump -0au -f /dev/nrst0 /dev/rsd0a
# /sbin/dump -0au -f /dev/nrst0 /dev/rsd0d
# /sbin/dump -0au -f /dev/nrst0 /dev/rsd0e
# /sbin/dump -0au -f /dev/nrst0 /dev/rsd0h  
# mt -f /dev/rst0 rewind  

Você pode olhar a página de manual dump(8) para aprender exatamente o que cada opção de linha de comando faz. Esta é uma descrição breve dos parâmetros usados acima:

E finalmente, a partição a ser feito o backup (/dev/rsd0a, etc.).

O comando mt(1) é usado no final para rebobinar o drive. Veja a página de manual do mt para mais opções (como a eject).

Se você não tem certeza sobre o nome de dispositivo do seu drive de fita, use o dmesg para localizá-lo. Um drive de fita, por exemplo, aparece no dmesg como:

st0 at scsibus0 targ 5 lun 0: <ARCHIVE, Python 28388-XXX, 5.28>

Você pode ter notado que durante o backup, o drive de fita é acessado com o nome de dispositivo "nrst0" em vez do nome "st0", que é visto no dmesg. Quando você acessa st0 como nrst0, você está acessando o mesmo drive de fita físico, mas está dizendo ao drive para não rebobinar no final da tarefa e para acessar o dispositivo no modo "raw". Para fazer backup de múltiplos sistemas de arquivos em uma única fita, tenha certeza de usar o dispositivo de não-rebobinagem; se você usa o dispositivo de rebobinagem (rst0) para fazer backup de múltiplos sistemas de arquivos, você acabará sobrescrevendo o sistema de arquivos anterior com o próximo dump que escrever na fita. Você pode achar uma descrição mais elaborada sobre os vários dispositivos de drive de fita na página de manual do dump.

Se você quer escrever um pequeno script chamado "backup", ele se parecerá com isto:

echo "  Starting Full Backup..."
/sbin/dump -0au -f /dev/nrst0 /dev/rsd0a
/sbin/dump -0au -f /dev/nrst0 /dev/rsd0d
/sbin/dump -0au -f /dev/nrst0 /dev/rsd0e
/sbin/dump -0au -f /dev/nrst0 /dev/rsd0h
echo
echo -n "  Rewinding Drive, Please wait..."
mt -f /dev/rst0 rewind
echo "Done."
echo

Se backups noturnos planejados são necessários, o cron(8) pode ser usado para executar automaticamente o seu script de backup.

É útil documentar também (num pedaço de papel) o tamanho que cada sistema de arquivos precisa ter. Você pode usar o "df -h" para determinar o quanto de espaço cada partição está usando atualmente. Isso será útil quando o seu drive falhar e você precisar recriar sua tabela de partições em um novo drive.

Restaurar seus dados ajuda também a reduzir a fragmentação. Para assegurar que você pegou todos os arquivos, o melhor jeito de fazer backup é reinicializar o sistema em modo usuário único. Sistemas de arquivos não precisam ser montados para o backup. Não se esqueça de montar a partição raiz (/) em modo r/w (leitura/escrita) depois de reinicializar em modo usuário único, ou seu dump falha ao tentar escrever as "dumpdates". Ao inicializar, digite "bsd -s" no prompt boot> para carregar o sistema em modo usuário único.

Visualizando o conteúdo de um backup em fita:

Após você ter feito o backup dos seus sistemas de arquivos pela primeira vez, pode ser uma boa ideia testar sua fita e ter certeza que os dados estão presentes.

Você pode usar o exemplo seguinte para ver o catálogo de arquivos presentes em uma fita:

# /sbin/restore -tvs 1 -f /dev/rst0

Isso mostra uma lista dos arquivos presentes na primeira partição da fita. Seguindo os exemplos acima, 1 é o seu sistema de arquivos raiz (/).

Para ver o que está na segunda partição da fita e enviar a saída para um arquivo, você usará um comando similar a este:

# /sbin/restore -tvs 2 -f /dev/rst0 > /home/me/list.txt

Se você possui uma tabela de montagem igual à tabela simples, 2 é /usr; se a sua tabela de montagem é mais avançada, 2 é /var ou outro sistema de arquivos. O número de sequência corresponde à ordem em que os sistemas de arquivos são escritos na fita.

Restaurando a partir da fita:

O cenário do exemplo listado abaixo será útil se o seu drive fixo falhou completamente. Em um evento onde você quer restaurar a partir de um único arquivo da fita, leia a página de manual do restore e preste atenção nas instruções do modo interativo.

Se você se preparou corretamente, trocar um disco e restaurar seus dados a partir da fita pode ser um processo rápido. O disquete padrão do OpenBSD para instalação/inicialização contém o utilitário restore, e também os binários necessários para particionar e tornar o seu novo drive inicializável. Na maioria dos casos, esse disquete e o dump mais recente em uma fita é tudo o que você precisa para colocar sua máquina em produção novamente.

Após trocar fisicamente o drive de disco defeituoso, os passos básicos para restaurar seus dados são os seguintes:

14.10 - Como montar imagens de disco no OpenBSD

Para montar uma imagem de disco (imagens ISO, imagens de disco criadas com o dd, etc.) no OpenBSD, você precisa configurar um dispositivo vnd(4). Por exemplo, se você possui uma imagem ISO localizada em /tmp/ISO.image, você deve usar os seguintes comandos para montar a imagem.

# vnconfig svnd0 /tmp/ISO.image
# mount -t cd9660 /dev/svnd0c /mnt

Note que essa é uma imagem ISO-9660, usada por CDs e DVDs, e você precisa especificar o tipo cd9660 ao montá-la. Isso precisa ser feito, independente do tipo; por exemplo, você precisa usar o tipo ext2fs ao montar imagens de disco do Linux.

Para desmontar a imagem, use os seguintes comandos.

# umount /mnt
# vnconfig -u svnd0

Para mais informação, leia a página de manual vnconfig(8).

14.11 - Socorro! Estou recebendo erros de IDE DMA!

Transferências IDE DMA, suportadas por pciide(4), não são confiáveis em muitas combinações de hardware. Até recentemente, a maioria dos sistemas operacionais "principais" que diziam suportar transferências DMA com drives IDE, não eram fornecidos com aquele recurso ativado por padrão, devido a hardware não confiável. Agora, muitas dessas máquinas estão sendo usadas com o OpenBSD.

O OpenBSD é agressivo e tenta usar o Modo DMA mais alto que ele pode configurar. Isso causa a corrupção na transferência de dados em algumas configurações por causa de chipsets problemáticos da placa-mãe, drives problemáticos e/ou problemas nos cabos. Felizmente, modos Ultra-DMA protegem as transferências de dados com um CRC para detectar a corrupção. Quando o CRC de Ultra-DMA falha, o OpenBSD mostra uma mensagem de erro e tenta efetuar a operação novamente.

wd2a:  aborted command, interface CRC error reading fsbn 64 of 64-79
(wd2 bn 127; cn 0 tn 2 sn 1), retrying

Após falhar algumas vezes, o OpenBSD faz o "downgrade" para um modo Ultra-DMA mais lento (que se espera ser mais confiável). Se o modo Ultra-DMA 0 é atingido, será feito o downgrade para o modo PIO.

Erros UDMA são frequentemente causados por cabos danificados ou de baixa qualidade. Problema com cabos normalmente deve ser o primeiro suspeito se você está recebendo muitos erros DMA ou tendo um desempenho de DMA baixo. Também é uma péssima ideia colocar o CD-ROM junto com o disco rígido no mesmo canal.

Se trocar os cabos não resolver o problema e o OpenBSD não fizer corretamente o downgrade, ou o processo causa o travamento da sua máquina, ou causa mensagens excessivas no console e nos registros, você talvez queira forçar o sistema para usar um nível baixo de DMA ou UDMA por padrão. Isso pode ser feito usando o UKC ou config(8) para mudar as opções do dispositivo wd(4).

14.13 - Opções de RAID no OpenBSD

Um conjunto redundante de discos independentes (RAID - "Redundant Array of Inexpensive Disks") nos dá uma oportunidade de usar múltiplos drives para alcançar um melhor desempenho, capacidade e/ou redundância que um drive sozinho não é capaz de fornecer. Embora uma descrição das vantagens ou dos riscos do RAID não seja o propósito deste artigo, é importante notar os seguintes pontos: Se essas são informações novas para você, este não é um bom ponto de partida para sua exploração do RAID.

Opções de Software

O OpenBSD suporta o softraid(4), um framework que suporta muitos tipos de transformações de E/S, incluindo as disciplinas de RAID e encriptação. Softraid(4) é gerenciado através do bioctl(8).

O OpenBSD também inclui o RAIDframe (raid(4), requer um kernel personalizado) e o ccd(4) como meios históricos de implementação de RAID, mas no momento o OpenBSD não sugere nenhum dos dois como uma solução RAID em novas instalações ou reinstalações.

Opções de Hardware

Muitas plataformas do OpenBSD incluem o suporte para vários produtos de hardware RAID. As opções variam por plataforma; veja a página de suporte de hardware apropriada (listada aqui).

Note que muitos controladores RAID suportados podem ser gerenciados através do driver bio(4) e do aplicativo bioctl(8). Isso permite a monitoração e o controle do sistema RAID de uma maneira padronizada a partir de dentro do OpenBSD.

Outra opção disponível para muitas plataformas é um dos muitos produtos que fazem com que múltiplos drives atuem como um único drive IDE ou SCSI, e são então conectados em um adaptador IDE ou SCSI padrão. Esses dispositivos podem funcionar praticamente em qualquer plataforma de hardware que suporte tanto SCSI quanto IDE.

Alguns fabricantes desses produtos:

(Nota: esses são apenas os produtos que alguns usuários do OpenBSD relataram usar -- não é nenhuma propaganda, nem uma lista exaustiva.)

Opções não válidas

Uma pergunta feita com frequência nas listas de discussão é "Os controladores RAID IDE ou SATA de baixo custo (como aqueles que usam chips Highpoint, Promise ou Adaptec HostRAID) são suportados?". A resposta é "Não". Essas placas e chips não são controladores de hardware RAID de verdade, são dispositivos de inicialização de RAID de software ajudados pelo BIOS. Como o OpenBSD já suporta RAID de software de uma maneira independente de hardware, não há muito desejo entre os desenvolvedores de implementar o suporte para essas placas.

Praticamente todos os controladores SATA ou IDE "RAID" onboard são desse estilo baseado em software, e funcionam bem como controlador SATA ou IDE usando o driver IDE padrão (pciide(4)), mas não funcionam como um sistema RAID de hardware no OpenBSD.

14.14 - Por que o df(1) me diz que mais de 100% do espaço em disco está utilizado?

As pessoas às vezes ficam surpresas ao descobrir que possuem um espaço em disco de valor negativo, ou mais que 100% de um sistema de arquivos em uso, como mostrado pelo df(1).

Quando um sistema de arquivos é criado com o newfs(8), uma parte do espaço disponível é guardada e fica inacessível pelos usuários. Isso fornece uma margem de erro quando o disco é acidentalmente preenchido, e ajuda a manter mínima a fragmentação. O padrão para isso é 5% da capacidade do disco, então se o usuário root foi preenchendo imprudentemente o disco, você pode ver até 105% da capacidade disponível em uso.

Se o valor de 5% não é apropriado, você pode mudá-lo com o comando tunefs(8).

14.15 - Recuperação de partições após excluir o disklabel

Se você tem uma tabela de partições danificada, existem várias formas de tentar recuperá-la.

Primeiramente, pânico. Você normalmente faz isso, e você deve saber que isso passa. Apenas não faça nada de estúpido. Entre em pânico longe da sua máquina. Então relaxe, e veja se os passos a seguir podem ajudá-lo.

Uma cópia do disklabel de cada disco é salva em /var/backups como parte da manutenção diária do sistema. Assumindo que você ainda tem a partição var, você pode simplesmente ler a saída e colocá-la de volta no disklabel.

Caso você não veja mais aquela partição, existem duas opções. Corrigir uma parte suficiente do disco para vê-la, ou corrigir uma parte suficiente do disco para recuperar os seus dados. Dependendo do que aconteceu, uma alternativa ou outra pode ser preferível (com discos ruins, você quer os dados em primeiro lugar; com dedos preguiçosos, você pode querer apenas o label).

A primeira ferramenta que você precisa é o scan_ffs(8) (note o sublinhado, ela não se chama "scanffs"). scan_ffs(8) pesquisa o disco, tenta encontrar partições e também mostra as informações encontradas sobre elas. Você pode usar essas informações para recriar o disklabel. Se você quer apenas a /var, você pode recriar a partição /var e então recuperar o label salvo e adicionar o resto a partir de lá.

disklabel(8) atualiza a visão do kernel sobre o disklabel, e então tenta escrever o label no disco. Dessa forma, mesmo se a área do disco contendo o disklabel está ilegível, você será capaz de montá-la com o mount(8) antes da próxima reinicialização.

14.16 - Posso acessar dados em sistemas de arquivos diferentes do FFS?

Sim. Os sistemas de arquivos suportados são: ext2 (Linux), ISO9660 e UDF (CD-ROM, DVD), FAT (MS-DOS e Windows), NFS, NTFS (Windows), AmigaDOS. Alguns possuem um suporte limitado; por exemplo, acesso apenas para leitura.

Nós vamos fazer uma demonstração geral sobre como usar um desses sistemas de arquivos no OpenBSD. Para ser possível o uso de um sistema de arquivos, ele precisa estar montado. Para mais detalhes e opções de montagem, consulte a página de manual mount(8) e a página de manual referente ao comando de montagem do sistema de arquivos que você montará; por exemplo, mount_msdos, mount_ext2fs, ...

Para começar, você precisa saber em qual dispositivo o seu sistema de arquivos está localizado. Este pode ser o seu primeiro disco rígido, wd0 ou sd0, mas ele pode ser menos óbvio. Todos os dispositivos reconhecidos e configurados no seu sistema são mencionados na saída do comando dmesg(1): um nome de dispositivo seguido de uma descrição de uma linha. Por exemplo, meu primeiro drive de CD-ROM é reconhecido como:

cd0 at scsibus0 targ 0 lun 0: <COMPAQ, DVD-ROM LTD163, GQH3> SCSI0 5/cdrom removable

Para uma lista curta de discos disponíveis, você pode usar o sysctl(8). O comando

# sysctl hw.disknames
mostra todos os discos conhecidos atualmente no seu sistema; por exemplo:
hw.disknames=cd0,cd1,wd0,fd0,cd2

Neste ponto, é hora de procurar quais partições estão no dispositivo e em qual partição o sistema de arquivos desejado reside. Nós examinamos o dispositivo usando o disklabel(8). O disklabel contém uma lista de partições, com um número máximo de 16. A partição c sempre indica o dispositivo inteiro. As partições a-b e d-p são usadas pelo OpenBSD. As partições i-p podem ser alocadas automaticamente para sistemas de arquivos de outros sistemas operacionais. Nesse caso, analisarei o disklabel do meu disco rígido, que contém alguns sistemas de arquivos diferentes.

NOTA: O OpenBSD foi instalado neste sistema depois dos outros sistemas operacionais, e durante a instalação um disklabel contendo as partições nativas e os sistemas de arquivos externos foi instalado no disco. No entanto, se você instalar sistemas de arquivos externos depois que o disklabel do OpenBSD já foi instalado no disco, você precisa adicioná-los ou modificá-los manualmente. Isso será explicado nesta subseção.

# disklabel wd0

# using MBR partition 2: type A6 off 20338290 (0x1365672) size 29318625 (0x1bf5de1)
# /dev/rwd0c:
type: ESDI
disk: ESDI/IDE disk
label: ST340016A       
flags:
bytes/sector: 512
sectors/track: 63
tracks/cylinder: 16
sectors/cylinder: 1008
cylinders: 16383
total sectors: 78165360
rpm: 3600
interleave: 1
trackskew: 0
cylinderskew: 0
headswitch: 0           # microseconds
track-to-track seek: 0  # microseconds
drivedata: 0 

16 partitions:
#             size        offset  fstype [fsize bsize  cpg]
  a:        408366      20338290  4.2BSD   2048 16384   16 # Cyl 20176*- 20581 
  b:       1638000      20746656    swap                   # Cyl 20582 - 22206 
  c:      78165360             0  unused      0     0      # Cyl     0 - 77544 
  d:       4194288      22384656  4.2BSD   2048 16384   16 # Cyl 22207 - 26367 
  e:        409248      26578944  4.2BSD   2048 16384   16 # Cyl 26368 - 26773 
  f:      10486224      26988192  4.2BSD   2048 16384   16 # Cyl 26774 - 37176 
  g:      12182499      37474416  4.2BSD   2048 16384   16 # Cyl 37177 - 49262*
  i:         64197            63 unknown                   # Cyl     0*-    63*
  j:      20274030         64260 unknown                   # Cyl    63*- 20176*
  k:       1975932      49656978   MSDOS                   # Cyl 49262*- 51223*
  l:       3919797      51632973 unknown                   # Cyl 51223*- 55111*
  m:       2939832      55552833  ext2fs                   # Cyl 55111*- 58028*
  n:       5879727      58492728  ext2fs                   # Cyl 58028*- 63861*
  o:      13783707      64372518  ext2fs                   # Cyl 63861*- 77535*

Como pode ser visto na saída acima, as partições OpenBSD são listadas primeiro. Em seguida estão várias partições ext2 e uma partição MSDOS, e também algumas partições desconhecidas ('unknown'). Em sistemas i386 e amd64, você pode encontrar mais informações sobre isso usando o utilitário fdisk(8). Para o leitor curioso: a partição i é uma partição de manutenção criada pelo fabricante, a partição j é uma partição NTFS, e a partição l é uma partição swap do Linux.

Após ter determinado que partição você quer usar, você pode ir para o passo final: montar o sistema de arquivos contido nela. A maioria dos sistemas de arquivos são suportados no kernel GENERIC: dê uma olhada no arquivo de configuração do kernel, localizado no diretório /usr/src/sys/arch/<arch>/conf. No entanto, alguns não são; por exemplo, o suporte ao NTFS é experimental e, portanto, não está incluído no GENERIC. Se você quer usar um dos sistemas de arquivos não suportados no GENERIC, você precisa compilar um kernel personalizado.

Uma vez com as informações necessárias nas mãos, é hora de montar o sistema de arquivos. Vamos assumir que o diretório /mnt/otherfs existe, e que será usado como um ponto de montagem para o sistema de arquivos desejado. Neste exemplo, montaremos o sistema de arquivos ext2 da partição m:

# mount -t ext2fs /dev/wd0m /mnt/otherfs

Se você planeja usar o sistema de arquivos regularmente, você pode ganhar tempo inserindo uma linha no /etc/fstab; por exemplo, algo como:

/dev/wd0m /mnt/otherfs ext2fs rw,noauto,nodev,nosuid 0 0
Note o valor 0 no quinto e sexto campo. Isso significa que não queremos que o sistema de arquivos seja salvo (com o dump), nem verificado com o fsck. Geralmente, essas são coisas que você quer que sejam controladas pelo sistema operacional nativo, associado ao sistema de arquivos.

14.16.1 - As partições não estão no meu disklabel! O que devo fazer?

Se você instalou sistemas de arquivos externos no seu sistema (o resultado da adição de um novo sistema operacional, na maioria das vezes) depois de ter instalado o OpenBSD, um disklabel já estará presente, e ele não será atualizado automaticamente para conter as novas partições dos sistemas de arquivos externos. Se você deseja usá-las, você precisa adicionar ou modificar manualmente essas partições usando o disklabel(8).

Como um exemplo, eu modifiquei uma das minhas partições ext2: usando o programa fdisk do Linux, eu reduzi o tamanho da partição 'o' (veja a saída do disklabel acima) para 1G. Somos capazes de reconhecê-la facilmente pela sua posição de início (offset: 64372518) e pelo seu tamanho (13783707). Note que esses valores são números de setores, e que usar número de setores (e não megabytes ou outra forma de medida qualquer) é o modo mais exato e seguro de ler essa informação.

Antes da mudança, a partição se parecia com isto (usando o utilitário fdisk(8) e deixando somente a parte que nos interessa):

# fdisk wd0
. . .
Offset: 64372455        Signature: 0xAA55
         Starting       Ending       LBA Info:
 #: id    C   H  S -    C   H  S [       start:      size   ]
------------------------------------------------------------------------
 0: 83 4007   1  1 - 4864 254 63 [    64372518:    13783707 ] Linux files*
. . .
Como você pode ver, a posição de início e o tamanho são exatamente aqueles mostrados anteriormente pelo disklabel(8). (Não se confunda com o valor indicado por "Offset": ele está se referindo à posição de início da partição extendida onde a partição ext2 está contida.)

Após ter alterado o tamanho da partição usando o Linux, ela se parece com isto:

# fdisk wd0
. . .
Offset: 64372455        Signature: 0xAA55
         Starting       Ending       LBA Info:
 #: id    C   H  S -    C   H  S [       start:      size   ]
------------------------------------------------------------------------
 0: 83 4007   1  1 - 4137 254 63 [    64372518:     2104452 ] Linux files*
. . .
Agora isso precisa ser alterado usando o disklabel(8). Por exemplo, você pode digitar disklabel -e wd0, que chama um editor especificado pela variável de ambiente EDITOR (o padrão é o vi). Dentro do editor, mude a última linha do disklabel para combinar com o novo tamanho:
  o:       2104452      64372518  ext2fs
Salve o disklabel no disco após ter terminado. Agora que o disklabel está atualizado novamente, você deve ser capaz de montar as suas novas partições como descrito acima.

Você pode seguir um procedimento bastante similar para adicionar novas partições.

14.17 - Posso usar um dispositivo de memória flash no OpenBSD?

14.17.1 - Memória flash como um dispositivo portátil de armazenamento

Normalmente, o dispositivo de memória deve ser reconhecido após plugá-lo em uma porta da sua máquina. Logo após inserir o dispositivo, algumas mensagens são escritas no console pelo kernel. Por exemplo, quando eu plugo meu dispositivo USB de memória flash, eu vejo em meu console:
umass0 at uhub1 port 1 configuration 1 interface 0
umass0: LEXR PLUG DRIVE LEXR PLUG DRIVE, rev 1.10/0.01, addr 2
umass0: using SCSI over Bulk-Only
scsibus2 at umass0: 2 targets
sd0 at scsibus2 targ 1 lun 0: <LEXAR, DIGITAL FILM, /W1.> SCSI2 0/direct removable
sd0: 123MB, 123 cyl, 64 head, 32 sec, 512 bytes/sec, 251904 sec total
Essas linhas indicam que o driver umass(4) ("USB mass storage", ou dispositivo de massa USB) foi ligado ao dispositivo de memória, e que ele está usando o sistema SCSI. As últimas duas linhas são as mais importantes: elas estão dizendo qual nó de dispositivo está ligado ao dispositivo de memória, e qual é o tamanho total de espaço de armazenamento. Se você não viu essas linhas, você pode vê-las novamente com o comando dmesg(1). A geometria CHS mostrada é fictícia, já que a memória flash está sendo tratada como qualquer outro disco SCSI comum.

Vamos discutir dois cenários a seguir.

O dispositivo está novo/vazio e você quer usá-lo somente com o OpenBSD

Você precisa criar um disklabel no dispositivo, e criar ao menos uma partição. Leia Uso do disklabel do OpenBSD e a página de manual disklabel(8) para obter detalhes sobre isso.

Neste exemplo, eu criei apenas uma partição a, onde eu colocarei um sistema de arquivos FFS:

# newfs sd0a
Warning: inode blocks/cyl group (125) >= data blocks (62) in last
    cylinder group. This implies 1984 sector(s) cannot be allocated.
/dev/rsd0a:     249856 sectors in 122 cylinders of 64 tracks, 32 sectors
        122.0MB in 1 cyl groups (122 c/g, 122.00MB/g, 15488 i/g)
super-block backups (for fsck -b #) at:
 32,
Vamos agora montar em /mnt/flashmem o sistema de arquivos que criamos na partição a. Crie primeiro o ponto de montagem, se ele não existe.
# mkdir /mnt/flashmem
# mount /dev/sd0a /mnt/flashmem

Você recebeu o dispositivo de memória de alguém que você quer trocar dados

Existe uma chance considerável de que a outra pessoa não use o OpenBSD, então pode existir um sistema de arquivos externo no dispositivo de memória. Dessa forma, primeiro nós vamos determinar quais partições estão no dispositivo, como descrito em FAQ 14 - Sistemas de Arquivos Externos.

# disklabel sd0

# /dev/rsd0c:
type: SCSI
disk: SCSI disk
label: DIGITAL FILM    
flags:
bytes/sector: 512
sectors/track: 32
tracks/cylinder: 64
sectors/cylinder: 2048
cylinders: 123
total sectors: 251904
rpm: 3600
interleave: 1
trackskew: 0
cylinderskew: 0
headswitch: 0           # microseconds
track-to-track seek: 0  # microseconds
drivedata: 0 

16 partitions:
#             size        offset  fstype [fsize bsize  cpg]
  c:        251904             0  unused      0     0      # Cyl     0 -   122 
  i:        250592            32   MSDOS                   # Cyl     0*-   122*
Como pode ser visto na saída do disklabel, existe somente uma partição i, contendo um sistema de arquivos FAT, criado em uma máquina Windows. Como de hábito, a partição c indica o dispositivo inteiro.

Agora vamos montar o sistema de arquivos da partição i em /mnt/flashmem.

# mount -t msdos /dev/sd0i /mnt/flashmem
Agora você pode usá-lo como qualquer outro disco.

AVISO: Você deve sempre desmontar o sistema de arquivos antes de desplugar o dispositivo de memória. Se você não o faz, o sistema de arquivos pode ser deixado em um estado inconsistente, que pode resultar em corrupção de dados.

Após remover o dispositivo de memória da sua máquina, você novamente vai ver o kernel escrevendo mensagens sobre isso no console:

umass0: at uhub1 port 1 (addr 2) disconnected
sd0 detached
scsibus2 detached
umass0 detached

14.17.2 - Memória flash como armazenamento inicializável

É possível usar memória flash como disco inicializável de várias formas no OpenBSD. Isso pode ser feito tanto com dispositivos USB (assumindo que seu computador pode inicializar a partir de um dispositivo flash USB; nem todos podem), ou com um dispositivo não-USB (ou seja, CF) com um adaptador IDE ou SATA (dispositivos não-USB ligados com um adaptador USB são tratados como dispositivos USB). Em alguns casos, você pode usar um dispositivo de ambos os modos (carregar a mídia em um adaptador USB, mas rodá-lo em um adaptador IDE).

Um dispositivo flash conectado a uma porta USB será mostrado como um dispositivo sd(4) do tipo SCSI. Quando conectado a um adaptador IDE, ele será mostrado como um dispositivo wd(4).

No caso da mídia flash em um adaptador IDE, ele pode ser inicializado a partir de qualquer sistema que possa inicializar a partir de um disco rígido IDE. Em todo caso, o sistema vê a mídia flash como um disco IDE. Simplesmente configure o hardware apropriadamente, e então instale o OpenBSD no disco flash.

No caso de inicializar a partir de um dispositivo USB, seu sistema precisa ser capaz de inicializar a partir de um dispositivo USB sem ser distraído pelos outros dispositivos no seu sistema. Note que se a sua intenção é fazer um ambiente de inicialização portátil em um dispositivo USB, o dispositivo USB será mostrado como um disco SCSI, normalmente sd0. No entanto, se você pluga esse dispositivo em um sistema que já possui alguns discos do tipo SCSI, ele vai acabar com um identificador diferente, e isso pode dificultar o uso do dispositivo flash de sistema para sistema, já que você terá que atualizar o /etc/fstab.

Algumas notas:

14.18 - Otimização do desempenho do disco

O desempenho do disco é um fator significante na velocidade geral do seu computador. Ele se torna mais importante quando o seu computador está hospedando um ambiente multiusuário (usuários de todas as espécies, desde aqueles que iniciam sessões interativas até aqueles que veem você como um servidor de arquivos ou um servidor Web). Armanezamento de dados precisa de atenção constante, especialmente quando suas partições ficam cheias ou quando seus discos falham. O OpenBSD possui algumas opções para aumentar a velocidade das suas operações em disco e para fornecer uma tolerância a faltas.

14.18.1 - Soft updates

Uma importante ferramenta que pode ser utilizada para aumentar a velocidade do seu sistema é o softupdates. Uma das operações mais lentas no sistema de arquivos tradicional do BSD é a atualização de metainfo (que acontece, entre outras situações, quando você cria ou exclui arquivos e diretórios). Softupdates tenta atualizar a metainfo na RAM, em vez de escrever no disco rígido toda vez que uma única metainfo é atualizada. Outro efeito disso é que a metainfo no disco deve sempre estar completa, embora nem sempre atualizada. Você pode ler mais sobre softupdates na FAQ Softupdates.

14.18.2 - Tamanho do cache namei()

O cache de tradução nome-para-nó-i (também conhecido como "name-to-inode" ou namei()) controla a velocidade da tradução do nome de caminho para o inode(5). Um modo razoável de determinar um valor para o cache, se um grande número de atrasos de cache namei() é notado com uma ferramenta como a systat(1), é examinar o valor atual, calculado pelo sistema, com o sysctl(8) (que chama esse parâmetro de "kern.maxvnodes"), e aumentar esse valor até o cache namei() atingir melhores taxas ou determinar que o sistema não teve benefício substancial ao incrementar o tamanho do cache namei(). Após o valor ser determinado, você pode defini-lo no momento da inicialização do sistema com o sysctl.conf(5).

14.19 - Por que nós não utilizamos montagem assíncrona?

Questão: "Eu digito "mount -u -o async /" e isso torna um pacote que eu uso (que insiste em usar várias coisas de tempos em tempos) mais eficiente. Por que a montagem assíncrona não é vista com bons olhos e não está ativada por padrão (como é o caso nas outras versões do Unix)? Ela não é um modo simples e, dessa forma, seguro de melhorar o desempenho em algumas aplicações?"

Resposta: "Montagens assíncronas são mais rápidas que montagens síncronas, mas elas também são menos seguras. O que acontece no caso de uma queda de energia? Ou de um problema de hardware? A busca pela velocidade não deve sacrificar a confiabilidade e a estabilidade do sistema. Leia a página de manual do mount(8)."

             async   All I/O to the file system should be done asynchronously.
                     This is a dangerous flag to set since it does not guaran-
                     tee to keep a consistent file system structure on the
                     disk.  You should not use this flag unless you are pre-
                     pared to recreate the file system should your system
                     crash.  The most common use of this flag is to speed up
                     restore(8) where it can give a factor of two speed in-
                     crease.

De outra forma, quando você está lidando com dados temporários, que você pode recriar a partir do zero após um travamento, você pode ganhar velocidade usando uma partição separada somente para aqueles dados, e montada como assíncrona. Novamente, faça isso somente se você não se importa que todos os dados na partição sejam perdidos caso algo de errado aconteça. Por essa razão, partições mfs(8) são montadas assincronamente, já que elas são removidas e recriadas em uma reinicialização.

[Índice da FAQ] [Seção 13 - Multimídia] [Seção 15 - Pacotes e Portes]


[voltar] www@openbsd.org
$OpenBSD: faq14.html,v 1.11 2009/11/30 13:23:49 ajacoutot Exp $