Friday, September 08, 2006

Linux - Sistema de Arquivos

O Linux suporta diferentes sistemas de arquivos.
Cada um com suas vantagens, desvantagens e características.

Atualmente uma importante característica dos atuais sistemas de arquivos, são os sistemas de arquivos com "journaling", o qual leva a preferência, sobre os outros sistemas de arquivos que não tem "journaling".
Neste artigo irei descrever como manipular os principais sistemas de arquivos disponíveis para Linux.

- Conteúdo:

1 - Sistemas de arquivos suportados pelo Linux:
1.0 - O sistema de arquivos ext2:
1.1 - O sistema de arquivos ext3:
1.2 - O sistema de arquivos ReiserFS:
1.3 - O sistema de arquivos XFS:
1.4 - O sistema de arquivos SWAP:
1.5 - O sistema de arquivos VFAT:
2 - Criando Sistemas de Arquivos:
2.0 - Criando um sistema de arquivos Ext3 na partição /dev/hda4:
2.1 - Vamos agora criar um sistema de arquivos ReiserFS na partição /dev/hda3:
2.2 - Vamos agora criar um sistema de arquivos VFS na partição /dev/hda5:
2.3 - Criando um espaço para troca de dados com a memória RAM (SWAP):
3 - Criando sistema de arquivos em um arquivo:
3.0 - Usando o comando dd:
3.1 - Formatando o arquivo através do comando: mkfs
3.2 - Mountanto/acessando através do comando: mount
4 - Visualizando sistemas de arquivos criados:

Obs.: Neste e em outros artigos que eu escrevi a formatação do texto possui os seguintes significados:

- O texto em Negrito assume que se trata de um comando que deve ser digitado.
- O texto em Itálico significa que é a saída de um comando ou conteúdo de um arquivo.
- O ">>>" significa que você deve digitar no interpretador do Python.
- O "#" significa que o comando dever ser executado como usuário "root".
- O "$" significa que o comando deve ser executado como usuário sem privilégios.

Journaling é um recurso que permite recuperar um sistema após um desastre no disco ( quando um disco está sujo ), em uma velocidade muito maior que nos sistemas de arquivos anteriores ( sem journaling ).

1 - Sistemas de arquivos suportados pelo Linux:

A lista de sistemas de arquivos suportados pelo Linux é muito grande, mas pode ser vista uma referência aqui.
Mas, neste artigo irei discutir somente os sistemas de arquivos mais comuns.
Segue abaixo uma breve descrição sobre os sistemas de arquivos mais comuns disponíveis para o Linux:

1.0 - O sistema de arquivos ext2:

O sistema de arquivos ext2 é conhecido como "Second Extended FileSystem" foi desenvolvido para ser mais "eficiênte" que o sistema de arquivos "Minix", seu antecessor.
O Minix era muito utilizado nas primeiras versões do Linux, e foi utilizado por muitos anos.
O sistema de arquivos ext2 não possui journaling e foi substituido pelo sistema de arquivos ext3.

1.1 - O sistema de arquivos ext3:

O sistema de arquivos ext3 é uma versão do ext2 com suporte a journaling.
Portando o ext3 tem as mesmas características do ext2, mas com suporte journaling.
Essa característica foi uma evolução e tornou o ext3 um sistema de arquivos muito estável e robusto.
Como no ext3 só foi adicionado o suporte a journaling, podemos converter um sistema de arquivos ext2 para ext3, adicionado suporte a journaling, e também podemos converter um sistema de arquivos ext3 para ext2, removendo o suporte a journaling.

1.2 - O sistema de arquivos ReiserFS:

O sistema de arquivos ReiserFS foi criado recentemente. Mas atualmente quase todas as distribuições Linux o suportão.
Sua performace é muito boa, principalmente para um número muito grande de arquivos pequenos.
ReiserFS também possui suporte a journaling.

1.3 - O sistema de arquivos XFS:

O sistema de arquivos XFS também possui suporte a journaling.
Foi desenvolvido originalmente pela Silicon Graphics e posteriormente disponibilizado o código fonte. O XFS é considerado um dos melhores sistemas de arquivos para banco de dados, pois é muito rápido na gravação.
XFS utiliza muitos recursos de cache com memória RAM, e para utilizar XFS é recomendado utilizar sistemas que possuem redundância de energia.

1.4 - O sistema de arquivos SWAP:

SWAP é um espaço reservado para troca de dados com a memória RAM.
Em alguns lugares ele não é mensionado como um Sistema de arquivos.
Mas resolvi descrever aqui pois faz parte deste artigo.

1.5 - O sistema de arquivos VFAT:

O sistema de arquivos VFAT é também conhecido como FAT32 ( M$ Windows ).
O sistema de arquivos VFAT não possui suporte a journaling.
E é utilizado normalmente para transferir dados entre sistemas M$ Windows e o Linux instalados no mesmo disco, pois pode ser lido e escrito por ambos os sistemas operacionais.
O sistema de arquivos VFAT está longe de ser um sistema de arquivos utilizado para Sistemas Linux, exeto para compartinhamento/compatibilidade entre o M$ Windows e Linux.
Se você utilizar VFAT no Linux, esteja certo de perder alguns atributos, tal como: Permissão de execução, links simbólicos entre outras coisas.

Ambos os sistemas de arquivos ext3 e ReiserFS são maduros o bastante para serem utilizados como padrão no Linux.
Esses dois são os mais utilizados pelas distribuições Linux.

2 - Criando Sistemas de Arquivos:

Para criar sistemas de arquivos utilizamos o comando: mkfs ( de "fazer sistema de arquivos" )
E o comando: mkswap para fazer espaços para troca de dados com a memória RAM.

O comando mkfs é um "front-end" para vários outros comandos para criação dos mais diversos e comuns sistemas de arquivos.
Para saber quais sistemas de arquivos é atualmente suportado pelo seu Linux, digite comando abaixo:

$ ls /sbin/mk*
/sbin/mkdosfs /sbin/mkfs.ext2 /sbin/mkfs.msdos /sbin/mkfs.xfs
/sbin/mke2fs /sbin/mkfs.ext3 /sbin/mkfs.reiser4 /sbin/mkreiser4
/sbin/mkfs /sbin/mkfs.jfs /sbin/mkfs.reiserfs /sbin/mkreiserfs
/sbin/mkfs.cramfs /sbin/mkfs.minix /sbin/mkfs.vfat /sbin/mkswap

No exemplo acima estão os sistemas de arquivos suportados pelo meu sistema: Kubuntu 6.06 LTS Dapper Drake, Kernel: 2.6.15-23-38.

Existem mais de um forma/comando para criar um sistema de arquivos.
Por exemplo, para criar um sistema de arquivos ext3, na partição /dev/hda4, podemos utilizar um dos seguintes comandos:

# mkfs.ext3 /dev/hda4

Ou

# mkfs -t ext3 /dev/hda4

Ou

# mke2fs -j /dev/hda4

A sintaxe para o comando mkfs é:

mkfs [opções] dispositivo [blocos]

onde

Opções:
-t tipo : especifica o tipo de sistema de arquivos a ser criado. O padrão é ext2.
-c : checa o dispositivo a procura de blocos defeituosos durante a criação do sistema de arquivos.

* dispositivo : é o arquivo especial correspondente ao dispositivo.
* blocos : é quantidade de blocos a ser utilizada pelo sistema de arquivos.

Para mais informações, consulte o manual do comando mkfs.

Agora vamos a prática !

Primeiro lembre-se que quando você utiliza o comando mkfs e seus derivados, você esta "formatando" a partição passanda como parâmetro.
Então não utilize o mkfs em partições que contenham dados importantes. Você estará apagando os dados da partição.
Abaixo irei mostrar alguns exemplo, lembre-se de substituir o nome da partição.

2.0 - Criando um sistema de arquivos Ext3 na partição /dev/hda4:

# mkfs -t ext3 /dev/hda4
mke2fs 1.38 (30-Jun-2005)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
1026144 inodes, 2050295 blocks
102514 blocks (5.00%) reserved for the super user
First data block=0
63 block groups
32768 blocks per group, 32768 fragments per group
16288 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632

Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 33 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.

2.1 - Vamos agora criar um sistema de arquivos ReiserFS na partição /dev/hda3:

# mkfs -t reiserfs /dev/hda3
mkfs.reiserfs 3.6.19 (2003 www.namesys.com)

A pair of credits:
Many persons came to www.namesys.com/support.html, and got a question answered
for $25, or just gave us a small donation there.

Oleg Drokin was the debugger for V3 during most of the time that V4 was under
development, and was quite skilled and fast at it. He wrote the large write
optimization of V3.


Guessing about desired format.. Kernel 2.6.15-23-386 is running.
Format 3.6 with standard journal
Count of blocks on the device: 2050288
Number of blocks consumed by mkreiserfs formatting process: 8274
Blocksize: 4096
Hash function used to sort names: "r5"
Journal Size 8193 blocks (first block 18)
Journal Max transaction length 1024
inode generation number: 0
UUID: da877e16-506d-4687-845a-0bf5eeed7862
ATTENTION: YOU SHOULD REBOOT AFTER FDISK!
ALL DATA WILL BE LOST ON '/dev/hda3'!
Continue (y/n):y
Initializing journal - 0%....20%....40%....60%....80%....100%
Syncing..ok

Tell your friends to use a kernel based on 2.4.18 or later, and especially not a
kernel based on 2.4.9, when you use reiserFS. Have fun.

ReiserFS is successfully created on /dev/hda3.


2.2 - Vamos agora criar um sistema de arquivos VFS na partição /dev/hda5:


# mkfs -t vfat /dev/hda5
mkfs.vfat 2.11 (12 Mar 2005)

Todas os sistemas de arquivos acima podem ser montados com a ferramenta "mount" e incluída no arquivo /etc/fstab.
Exemplo:

# mount -t vfat /dev/hda5 /mnt/win


2.3 - Criando um espaço para troca de dados com a memória RAM (SWAP):

Para criar um sistema de arquivos tipo SWAP iremos utilizar a ferramenta: mkswap
É necessário a partição ser do tipo "swap", código 82.

# mkswap /dev/hda6
Configurando área de troca versão 1, tamanho = 8422617 kB
sem rótulo, UUID=3f8c0bcc-5409-4951-8939-cba0d1e8da71

É necessário ativar a partição de troca com o comando abaixo:

# swapon /dev/hda6

Para desativar utilize o comando:

# swapoff /dev/hda6

Enfim, você pode criar vários outros sistemas de arquivos de forma similar.
Mas verifique antes se o sistema de arquivos é suportado pelo seu kernel e verifique também o tipo da partição a qual você deseja formatar.

3 - Criando sistema de arquivos em um arquivo:

A criação de sistemas de arquivos não está limitada apenas a partições de disco.
Também podemos criar um sistema de arquivos em arquivos.

3.0 - Usando o comando dd:

Vamos utilizar o comando dd para criar um arquivo vazio de 1 GB.

# dd if=/dev/zero of=/tmp/arquivo-ext2 bs=1024 count=1000000
1000000+0 records in
1000000+0 records out

3.1 - Formatando o arquivo através do comando: mkfs

# mkfs -t ext3 /tmp/arquivo-ext3
mke2fs 1.38 (30-Jun-2005)
/tmp/arquivo-ext3 is not a block special device.
Proceed anyway? (y,n) y
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
125184 inodes, 250000 blocks
12500 blocks (5.00%) reserved for the super user
First data block=0
8 block groups
32768 blocks per group, 32768 fragments per group
15648 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376

Writing inode tables: done
Creating journal (4096 blocks): done
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 23 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.

Obs.: Ele primeiro dirá que o arquivo arquivo-ext2 não é um dispositivo de bloco especial (uma partição de disco) e perguntará se deve continuar, responda com y

3.2 - Mountanto/acessando através do comando: mount

# mount -t ext3 /tmp/arquivo-ext2 /mnt/arquivo-ext3/ -o loop=/dev/loop/0

Obs.: Foi usado o parâmetro -o loop para dizer ao comando mount para usar os recursos de loop do kernel para montar o sistema de arquivos.

4 - Visualizando sistemas de arquivos criados:

Há varias formas de visualizar os sistemas de arquivos existentes nas partições.
Abaixo segue as formas mais utilizadas:

Através do arquivo /proc/mounts:

# cat /proc/mounts
rootfs / rootfs rw 0 0
none /sys sysfs rw 0 0
none /proc proc rw,nodiratime 0 0
udev /dev tmpfs rw 0 0
/dev/hda2 / reiserfs rw 0 0
/dev/hda2 /dev/.static/dev reiserfs rw 0 0
tmpfs /var/run tmpfs rw 0 0
tmpfs /var/lock tmpfs rw 0 0
usbfs /proc/bus/usb usbfs rw 0 0
tmpfs /lib/modules/2.6.15-23-386/volatile tmpfs rw 0 0
devpts /dev/pts devpts rw 0 0
tmpfs /dev/shm tmpfs rw 0 0
tmpfs /var/run tmpfs rw 0 0
tmpfs /var/lock tmpfs rw 0 0
/dev/hda3 /mnt/win98 vfat rw,nodiratime,gid=46,fmask=0007,dmask=0007,codepage=cp437,iocharset=iso8859-1,utf8 0 0

Através do comando: df -T

# df -T
Sist. Arq. Tipo 1K-blocos Usad Dispon. Uso% Montado em
/dev/hda2 reiserfs 10233024 2298764 7934260 23% /
varrun tmpfs 75416 52 75364 1% /var/run
varlock tmpfs 75416 4 75412 1% /var/lock
udev tmpfs 75416 68 75348 1% /dev
devshm tmpfs 75416 0 75416 0% /dev/shm
lrm tmpfs 75416 18856 56560 26% /lib/modules/2.6.15-23-386/volatile
/dev/hda3 vfat 10231424 1836824 8394600 18% /mnt/win98

Fim.

Referência:
IBM DeveloperWorks - Linux LPI - Tópico 104.

Recursos:
Ext3 - Gentoo Linux
Guia Foca GNU/Linux - Capítulo 5 - Discos e Partições
FileSystem na Wikipedia

1 Comments:

At 1:54 PM, Blogger Hugo Luiz said...

É interessante para quem sabe um pouco ou sabe do assunto,entretanto, para que quer entender o assunto é confuso.Porém, parabéns plo blog!

 

Post a Comment

<< Home