logo titulo
anterior indice proximo

Administração de Filesystems


No Linux, o conceito de dispositivos (terminais, placa de som, impressoras, discos) é generalizado a um ponto, onde qualquer programa que funciona com um arquivos normal, consegue efetuar estas mesmas operações com estes dispositivos.

Por exemplo, podemos copiar todo o conteúdo de um disquete (sabendo-se que o primeiro disquete, que no MsDos corresponde ao drive A: é /dev/fd0, o segundo é /dev/fd1, etc), com o comando:
     cp /dev/fd0 /dev/fd1

ou mesmo copiar todo o disquete para um arquivo normal, com o comando:

     cp /dev/fd0 imagem.disco0.bin

mas tenha em conta que este arquivo (imagem.disco0.bin, ou qualquer outro nome que escolhessemos) dificilmente será visualizado, pois toda a estrutura de diretórios e áreas vazias do disquete estarão presentes, de uma forma aprentemente desorganizada. Ou seja, a imagem de um disco é simplesmente isso. Não tem arquivos, diretórios, nome de volume, nada! Somente dados embaralhados.
Uma forma de voce encontrar alguma lógica nestes dados é através de um editor binário. O Linux usualmente vem com o bpe, mas existe um programa chamado lde ou linux disk editor (http://www.geocities.com/CapeCanaveral/Lab/7731/lde.html, ou no Metalab, antigo Sunsite) que é bem mais interessante de usar, uma espécie de "Norton Utilities (MR)" para Linux.

Convenciona-se que todos os dispositivos (devices) residam no diretório /dev. Existem dois tipos básicos de dispositivos, de bloco e de caracter, que são facilmente distinguiveis numa listagem de diretório pelo caracter na primeira posição dos flags. Alguns tipos de arquivos, conhecidos como named fifos [25], named sockets [26], diretórios e links simbólicos, também recebem um valor diferente para esse flag.

devices

dispositivos no diretório

A listagem de um diretório com o ls (também podemos usar o mc para reconhecer o tipo de arquivo) indica o tipo de arquivo no primeiro caracter dos flags:

c
dispositivo modo caracter, não-bufferizado
b
dispositivo de blocos (tipo disco), bufferizado
p
named fifo (semelhante a um pipe, mas com nome pré-determinado)
s
named socket, para comunicação via tcp/ip (ex: internet)

Para criar esses arquivos "especiais" existe um comando chamado mknod (abreviatura de make node), porém é mais apropriado usar scripts que já existem prontos que conhecem já certas propriedades desses dispositivos e criam vários de uma só vez. O script mais importante para esse fim, é o MAKEDEV, que pela especificação do FSSTND deverá residir no diretório /dev.
As propriedades que devemos conhecer dos dispositivos para poder criá-los satisfatoriamente são os seus número major e minor, espécies de códigos previamente convencionados que são interfaceados diretamente com as rotinas do kernel. Somente quando estivermos escrevendo módulos novos do kernel precisaremos nos preocupar explicitamente com estes números. Observe na figura acima tais números na listagem: o dispositivo /dev/tty0 por exemplo tem o par 4,0 (major,minor), localizado logo após o usuário e grupo do arquivo. Todos os dispositivos com o mesmo número major, são tratados pelo mesmo módulo do kernel.
Raramente o administrador do sistema deverá recriar estes dispositivos, pois todas as distribuições Linux já o fazem durante a instalação.

particionamento e formatação de discos


Antes de usar um disco, precisamos prepará-lo para conter os dados de forma organizada, reconhecível pelo sistema opreacional. O Linux suporta, além de uma meia dúzia de formatos nativos, muitas dezenas de formatos de outros sistemas operacionais. Os utilitários que permitem configurar o disco, ou programas de particionamento como são charmados, mais comuns são o fdisk e o cfdisk. O primeiro tem uma interface mais simples, rápido e elegante, mas o segundo é mais fácil de usar para o principiante, pois usa uma interface tipo ncurses, com menus e ajuda on-line.

Algumas partições de tamanho conveniente devem ser reservadas para utilização com swapping, pois habilita a execução de programas maiores que a memória ram instalada, constituindo o que se denomina memória virtual. Caso tenhamos vários discos rígidos, é inclusive interessante termos em cada disco físico uma área de swap separada, pois isto trará maior desempenho, pois o Linux otimiza consideravelmente o uso concorrente de discos. Uma regra razoável para o tamanho total das áreas de swap é aproximadamente a memória ram que temos instalada, no mínimo, e no máximo o dobro dessa quantidade. As partições de swap são do tipo 0x82 (82 em hexadecimal), conforme podemos ver na figura ao lado.

O cfdisk não formata discos, somente escreve a tabela de partição. Antes de podermos utilizar um disco, ele deverá conter um filesystem, que conterá tabelas de inodes, o superbloco, e outras informações. Para criar o filesystem, usamos um outro programa, mkfs. Por exemplo, para preparar uma partição que será montada pelo Linux em algum diretório, escolhemos o filesystem ext2 (tipo 0x83) e preparamos esta partição com (supondo que seja a partição 3 do segundo disco):

     mkfs -t ext2 /dev/hdb3

Somente então podemos tentar montar esse disco. Para preparar partições de swap é mais simples ainda:

     mkswap /dev/hdc0

por exemplo, caso seja a primeira partição (0) do disco localizado na segunda ide [27].

filesystems codes

Os discos flexíveis têm formatação diferente, pois antes de criar um filesystem neles é necessário realizar a formatação física dos mesmos, o que é efetuado somente em fábrica para os discos rígidos. Existem fdformat e superformat no Linux para esta tarefa, sendo o segundo muito mais moderno e suporta virtualmente qualquer formato existente e qualquer tipo de unidade de disco, pois é configurado por uma tablea, contida no arquivo /etc/fdprm. Para compatibilidade com disquetes do MsDos, usualmente se formatam disquetes compatíveis com esse sistema, apesar de que, em um disquete de 3,5'' é possível armazenar 2 MBytes de dados, com uma formatação cuidadosamente escolhida, um ganho de aproximadamente 38% em relação ao padrão.

O programa superformat é muito simples de ser usado: superformat /dev/fd0 e voilá, um disquete dos-compatível, pronto para o uso. Se desejarmos usar esse disquete montado como ext2, poderemos criar o filesystem com mkfs como fizemos com os discos rígidos. Note que o Linux monta também disquete MsDos normalmente.

montando discos na hierarquia


Para utilizar um disco introduzido no sistema, seja ele disquete, disco rígido ou mesmo cdrom, devemos primeiramente montar o disco em um diretório escolhido para ele. Os diretórios reservados para essa finalidade são descendentes do /mnt, como: /mnt/floppy para disquetes, /mnt/cdrom para CDs, /mnt/dos para algum disco (rígido) do MsDos, ou o nome que voce desejar, abaixo do diretório /mnt. Note que isto é uma mera convenção, e que voce poderá montar discos em qualquer diretório que esteja vazio.

Podemos igualmente evitar a criação de um filesystem no disquete e usá-lo com o tar ou cpio diretamente, sem ser necessário nenhuma operação de formatação ao tirá-lo da caixa. O comando tar cvMf /dev/fd0 <lista de arquivos>, cria um pacote com todos os arquivos selecionados (na <lista de arquivos>) e grava-os em vários disquetes, solicitando ao usuário a troca de disquete quando cada um vai ficando cheio. Para recuperar os arquivos gravados, podemos executar tar xvMf /dev/fd0, e para listar o conteúdo desse conjunto de disquetes, tar tvMf /dev/fd0. O comando tar será analisado mais detalhadamente no capítulo relativo a backup.

Entretanto, se o disco contém um filesystem, ele deverá ser montado com o comando mount. Uma possibilidade é não haver nada definido quanto a este tipo de discos na tabela /etc/fstab. Nesse caso, devemos fornecer ao mount todas as informações sobre tipo de filesystem, localização do disco (device) e diretório aonde ele será montado. A segunda maneira é criarmos uma entrada no arquivo /etc/fstab e então precisaremos somente fornecer o diretório a montar ou o dispositivo. Definindo o disco na tabela acima referida, podemos também usar o auto-mount daemon.

Vejamos o formato do arquivo /etc/fstab: (este exemplo foi retirado da minha máquina)

# device    directory   type        options 

/dev/hda5 / ext2 defaults 1 1 /dev/hdc1 /usr ext2 defaults 1 1 /dev/hdc3 /home ext2 defaults 1 2 /dev/hda1 /dos msdos user,noauto,rw /dev/hda7 none swap sw /dev/hdc2 none swap sw /proc /proc proc none /dev/scd0 /cdrom iso9660 user,noauto,ro 1 1 /dev/fd0 /floppy msdos user,noauto,rw keenview:/ /nfs nfs user,noauto,rw

Note que eu uso diretórios (mount point) diferentes do que aconselhei acima. Para ficar padronizado, use o que eu indiquei (faça o que digo, mas não o que faço!). Tenho dois discos rígidos, um em cada IDE, para poder usar as duas IDEs ao mesmo tempo. Note que há duas áreas de swap, como recomendei acima. O meu cdrom é um gravador HP (cd writer 6020), por isso sua interface é SCSI (/dev/scd0). Normalmente, unidades de cdrom estarão presentes em IDEs, como os disco rígidos. O meu tipo de floppy predileto é msdos, porque passo informações para outras máquinas (não minhas, evidentemente) que só lêem esses formato (porque será??). Finalmente, a última linha mostra um dispositivo via rede (usando nfs): é o meu laptop(ou será notebook?), quando está conectado ao sistema. O nome dele (como host) é keenview, e exporto dele para o desktop toda sua hierarquia (diretório /). Note também a partição /proc, que na realidade é o sistema virtual mantido pelo kernel, que nos informa muitos dados úteis.

A coluna options mostra algumas das opções mais comuns: user, para permitir qualquer usuário montar/desmontar a unidade, sw para áreas de swap, noauto, para evitar que durante a carga do sistema (boot) o disco seja montado automaticamente. Algumas particões que apresentam dados virtualmente repetidos foram suprimidas da listagem, para efeito de melhor visualização.

Para desmontar o disco, usamos umount <mount point> ou umount <device> e é só. No X-Windows, podemos usar um dos muitos programas que controlam os discos montados no sistema, como o da figura ao lado: wmmount.

Com as setas (botões de baixo, à direita) mudamos o disco a tratar. O botão da esquerda (também na parte de baixo) indica se o disco está montado ou não. Na figura está desmontado.

wmmount
Nesta outra figura, o disco está montado (e é um disquete, no caso). Veja a diferença no botão de baixo à esquerda e a porcentagem de espaço disponível no disco, abaixo do nome. wmmount floppy

Filesystems estão sujeitos a vários tipos de problemas. Problemas transitórios, normalmente criados devido a uma flata de energia elétrica, sem dar chance ao programa que estava rodando de salvar os seus dados, ou mesmo do daemon kflushd (responsável pela escrita de buffers "sujos" de volta no disco). Problemas causados por bugs no programa, que gerou um segfault[28] repentinamente, sem fechar os arquivos que utilizava. Estes problemas são facilmente consertados pelo utilitário fsck (abreviatura de filesystem check), que é executado normalmente durante o boot. Caso voce queira executá-lo manualmente, verifique que o filesystem a ser consertado seja montado read-only, para evitar acesso de algum usuário a este enquanto o fsck executa sua operação. (Lembre-se que até mesmo o cron, pode executar tarefas automatizadas com esse disco, mesmo que nenhum usuário esteja logado no momento! Cuidado!)

O comando mount também mostra quais discos estão correntemente montados no sistema, se usado sem parâmetros. Outra forma é observarmos diretamente o arquivo /etc/mtab, com cat /etc/mtab.

/dev/hda5 / ext2 rw 1 1

/dev/hdc1 /usr ext2 rw 1 1

/dev/hdc3 /home ext2 rw 1 2

/proc /proc proc rw,none 0 0

Usando o comando mount -t ext2 -o ro /dev/hdc1 por exemplo, montaremos o dispositivo (device) /dev/hdc1, com tipo de filesystem ext2 com a opcão read-only (ro). Para ter todas as opçõés do mount: man mount, naturalmente!

Finalmente, podemos gravar um disco físico num arquivo (útil durante a preparação de imagens de cdrom, para testar o que será gravado), com o comando copy normal:

    cp /dev/cdrom cdrom.imagem

de forma similar ao que falamos no início deste capítulo. E, se quisermos montar esse arquivo (não mais o dispositivo), podemos usar o dispositivo loop, usualmente disponível como módulo no kernel, e montar o arquivo como um disco assim:

     mount -t iso9660 -o loop cdrom.imagem /mnt/tmp

onde /mnt/tmp é um ponto de montagem qualquer, cdrom.imagem é a nossa imagem do disco, iso9660 é o tipo de filesystem para cdroms. O mesmo pode ser feito com disquetes, ou até discos rígidos, desde que tenhamos espaço suficiente para salvar toda a sua imagem.

Existem mais alguns utilitários interessantes para o administrador, como o tune2fs e o dumpe2fs, respectivamente para configurar parâmetros do filesystem (ex: número de mounts antes de um fsck)e para visualizar detalhadamente as estruturas do disco. Este funcionam somente com formatação nativa (ext2) do Linux.
Para os usuários menos experiêntes, entretanto, o df é suficiente. Este mostra um resumo do espaço ocupado, em blocos e em bytes, espaço livre, para todos os discos montados. Veja uma saida do df:

Filesystem         1024-blocks  Used Available Capacity Mounted on 
/dev/hda5             595163  234438   329983     42%   / 
/dev/hdc1            1981000 1070547   808042     57%   /usr 
/dev/hdc3            1302623  326907   908407     26%   /home

E quanto â fragmentação? Bem, no Linux, o filesystem ext2 não apresenta este problema, sendo todo o disco desfragmentado automaticamente à medida que é utilizado e não há porque se preocupar com isso. Para desfragmentar outros filesystems (por exemplo o msdos ou o vfat, usado com o Windows95/98, são especialmente ruins quanto a esse problema!), infelizmente não existem utilitários para fazer isso no Linux, exceto se voce copiar todo o volume para uma partição vazia e copiar de volta, o que desfragmentaria (mesmo sob o Linux) o disco.


rpragana
Fri Jan 8 19:33:18 EDT 1999