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 (
|
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.
dispositivos no diretório
A listagem de um diretório com o
|
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.
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
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 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]. |
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.
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. |
|
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. |
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.