[Índice da FAQ] [Seção 13 - Multimídia] [Seção 15 - Pacotes e Portes]
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.
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.
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).
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.# 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]
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.
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.
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.
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.# fdisk -i sd2
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.)# 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)
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á!
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.
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
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
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.
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:
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.Using drive 0, partition 3;
O PBR é instalado pelo installboot(8), que é descrito em mais detalhes neste documento. O PBR se anuncia com a mensagem:
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...".Loading;...
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:
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:probing: pc0 com0 com1 apm mem[636k 190M a20=on] disk: fd0 hd0+ >> OpenBSD/i386 BOOT 3.02 boot>
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
...
Você pode instalar o MBR do OpenBSD no seu disco rígido através do programa fdisk. Inicialize a partir da mídia de instalação, escolha "Shell" para receber uma linha de comandos:
Usando o fdisk, você também pode instalar um MBR específico no disco:# fdisk -u wd0
que instala o arquivo /usr/mdec/mbr como seu MBR do sistema. Em uma instalação padrão do OpenBSD, esse arquivo representa o MBR padrão que também é usado pelo fdisk, mas qualquer outro MBR pode ser especificado.# fdisk -u -f /usr/mdec/mbr wd0
Para mais informações sobre o processo de inicialização da plataforma i386, veja:
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.
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.
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.
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.
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)
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.
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.
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.
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:
Inicialize usando o disquete de instalação/inicialização do OpenBSD.
No menu de seleção, escolha Shell. Insira a fita do seu backup mais
recente, apenas para leitura, no drive.
Usando o comando fdisk(8), crie uma partição primária do OpenBSD neste novo drive instalado. Exemplo:
# fdisk -e sd0
Veja a FAQ do fdisk para mais informações.
Usando o comando disklabel, crie novamente a sua tabela de partições do OpenBSD dentro da partição primária do OpenBSD que você criou usando o fdisk. Exemplo:
# disklabel -E sd0
(Não se esqueça da partição swap, veja a FAQ do disklabel para mais informações)
Use o comando newfs para criar um sistema de arquivos limpo em cada partição que você criou no passo acima. Exemplo:
# newfs /dev/rsd0a # newfs /dev/rsd0h
Monte seu novo sistema de arquivos raiz (/) em /mnt. Exemplo:
# mount /dev/sd0a /mnt
Entre no sistema de arquivos raiz montado e comece o processo de restauração. Exemplo:
# cd /mnt # restore -rs 1 -f /dev/rst0
Você quer que este disco seja inicializável, então use o seguinte comando para gravar um novo MBR no seu drive. Exemplo:
# fdisk -i sd0
Em adição à gravação de um novo MBR no drive, você precisa instalar blocos de inicialização para inicializar a partir dele. A seguir, um exemplo rápido:
# cp /usr/mdec/boot /mnt/boot # /usr/mdec/installboot -v /mnt/boot /usr/mdec/biosboot sd0
Seu novo sistema de arquivos raiz, no novo disco, deve estar suficientemente pronto, assim você pode inicializá-lo e continuar a restauração do resto dos seus sistemas de arquivos. Já que seu sistema operacional não está completo ainda, tenha certeza de inicializar em modo usuário único. Na linha de comandos, digite os seguintes comandos para desmontar e desligar o sistema:
# umount /mnt # halt
Remova o disquete de instalação/inicialização do drive e reinicialize o seu sistema. No prompt boot> do OpenBSD, digite o seguinte comando:
boot> bsd -s
O comando "bsd -s" faz com que o kernel seja carregado em modo usuário único, que somente necessita do sistema de arquivos raiz (/).
Assumindo que você executou corretamente os passos acima e nada de errado aconteceu, você deve ver um prompt perguntando por um caminho para um shell ou pedindo para pressionar "enter". Pressione "enter" para usar o sh. Agora você deve remontar a raiz em modo r/w (leitura e escrita) em vez de apenas para leitura. Digite o seguinte comando:
# mount -u -w /
Após remontar em modo r/w, você pode continuar a restauração dos seus outros sistemas de arquivos. Exemplo:
(tabela de montagem simples) # mount /dev/sd0h /usr; cd /usr; restore -rs 2 -f /dev/rst0 (tabela de montagem avançada) # mount /dev/sd0d /var; cd /var; restore -rs 2 -f /dev/rst0 # mount /dev/sd0e /home; cd /home; restore -rs 3 -f /dev/rst0 # mount /dev/sd0h /usr; cd /usr; restore -rs 4 -f /dev/rst0
Você pode usar "restore rvsf", em vez de apenas rsf, para visualizar os nomes dos objetos conforme eles são extraídos do backup.
Finalmente, após a restauração de todos os seus outros sistemas de arquivos no disco, reinicialize em modo multiusuário. Se tudo ocorreu como planejado, seu sistema estará de volta ao estado em que ele estava durante o backup mais recente, e pronto para ser usado novamente.
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).
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).
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.
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.)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.
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).
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.
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
mostra todos os discos conhecidos atualmente no seu sistema; por exemplo:# sysctl hw.disknames
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:
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./dev/wd0m /mnt/otherfs ext2fs rw,noauto,nodev,nosuid 0 0
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:
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.o: 2104452 64372518 ext2fs
Você pode seguir um procedimento bastante similar para adicionar novas partições.
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.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
Vamos discutir dois cenários a seguir.
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
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.
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.# 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*
Agora vamos montar o sistema de arquivos da partição i em /mnt/flashmem.
Agora você pode usá-lo como qualquer outro disco.# mount -t msdos /dev/sd0i /mnt/flashmem
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
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:
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.
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]