Neste artigo veremos como o GNU/Linux trabalha com discos, além de ver conceito de partições, sistemas de arquivos, bem como os principais programas para trabalhar com discos e partições.
Sistemas de arquivos são as estruturas utilizadas para a leitura e gravação de arquivos e diretórios pelo sistema operacional. Um disco rígido, disquete ou qualquer outro dispositivo de armazenamento de dados não pode ser utilizado se não estiver fazendo uso de um sistema de arquivos.
Existem inúmeros sistemas de arquivos, cada um com suas características particulares que lhe conferem desempenho e capacidades diferentes, mas todos eles têm em comum o objetivo básico de fornecer a estrutura necessária para o sistema operacional ler e gravar os arquivos e diretórios.
Journaling
O journaling consiste em reservar um espaço no início do disco para gravar informações sobre as operações que serão realizadas, antes delas serem realmente feitas. Assim, se alguma falha ocorrer durante a operação, seja gravação, movimentação ou exclusão, basta o sistema ler o setor de journaling para facilmente poder desfazer as operações, retornando os arquivos para seu estado anterior, ou então completar as operações interrompidas.
O espaço onde ficam gravadas as informações de operações chama-se journal, daí o nome journaling. Graças ao journal, a verificação de sistemas de arquivos com suporte a journaling é realizada muito rapidamente, pois basta verificar se existe alguma operação pendente registrada no journal. Dependendo do sistema de arquivos utilizado, essa verificação pode durar de 1 a 2 segundos somente, podendo ser executada toda vez que se carrega o sistema operacional, garantindo uma grande segurança quanto à integridade dos dados.
Como no journaling é necessário gravar as informações no journal antes de realizar as operações de fato, o processo de gravação pode se tornar mais lento, sobretudo nos casos de várias operações consecutivas com arquivos pequenos. Entretanto, a velocidade nas operações com dados está mais relacionada a outros aspectos do sistema de arquivos do que com a presença ou não do journaling, de forma que facilmente encontramos sistemas de arquivos como o ReiserFS, com journaling, que possuem um desempenho muito maior que grande parte dos sistemas sem journaling, como o FAT32 e o EXT2.
Tipos de sistemas de arquivos
Os sistemas de arquivos sem journaling são muito inseguros, mas costumam ser mais rápidos, devido ao número menor de informações que são armazenadas sobre os arquivos.
A principal vulnerabilidade dos sistemas de arquivos sem journaling é quanto ao desligamento repentino do computador. Se um computador que utiliza um sistema de arquivos desse tipo estiver ligado e for desligado diretamente através do botão ou devido a falha elétrica, certamente haverá perda de dados, possivelmente até o comprometimento total do sistema de arquivos, tornando os dados gravados no HD inacessíveis. Além disso, em caso de falhas, a verificação de erros em sistemas de arquivos sem journaling é lenta, pois requer a análise de todos os dados do HD.
Sistemas de arquivos com journaling, por sua vez, são muito seguros e confiáveis, muito tolerantes à queda de energia, e a verificação de erros é muito mais rápida. Entretanto, podem ser muito mais lentos que os sistemas de arquivos sem journaling, mas isso é bastante relativo.
EXT2: o EXT2 é um sistema de arquivos muito rápido pelo fato de não possuir um journal, sendo assim os dados são gravados diretamente. Quando ocorre alguma falha que provoque o desligamento incorreto do sistema, o utilitário fsck é acionado para a verificação do sistema, sendo às vezes um processo lento e nem sempre com bons resultados, ocasionado quase sempre perda de dados.
FAT32: o FAT32 é o sistema de arquivos padrão do Windows, utilizado nas versões 95, 98 e Me, e disponível também para as versões 2000 e XP. É um sistema de arquivos simples, um pouco lento e bastante vulnerável a falhas, motivos pelos quais ele não pôde ser usado nos sistemas operacionais de rede da Microsoft, como as versões NT, 2000 Server e 2003 Server do Windows.
EXT3: o sistema de aquivos EXT3 foi desenvolvido pelo doutor Stephen Tweedie e colaboradores na Red Hat. Pode-se dizer que ele é um EXT2 com journaling e passou a ser suportado na versão 2.4 do kernel Linux. No EXT3, o journal usa uma camada chamada JDB (Journaling Block Device), que utiliza um método diferente na recuperação de dados: ao invés de armazenar bytes que devem ser gravados, ele armazena blocos modificados do sistema de arquivos na memória para poder rastrear as operações que ficaram pendentes. A vantagem é que ele não precisa lidar com a complexidade de gravar bytes no journal e a desvantagem é que o journal acaba ficando maior. Em compensação ao considerável aumento na segurança dos dados, o desempenho nas operações em sistemas de arquivos EXT3 é muito inferior à dos sistemas EXT2.
ReiserFS: o ReiserFS é um sistema desenvolvido especialmente para o Linux, muito confiável e surpreendentemente rápido, em muitos casos mais rápido até mesmo que sistemas sem journaling. O ReiserFS, por não utilizar blocos de tamanho fixo, mas ajustar seu tamanho de acordo com o arquivo, evita os problemas de desperdício de espaço comuns em outros sistemas de arquivos. Possui suporte a arquivos maiores que 2 GB e o acesso a árvore de diretórios é muito mais rápido. Utiliza uma eficiente estrutura de dados chamada balanced tree (árvore equilibrada), que trata toda a partição como se fosse uma única tabela de banco de dados contendo diretórios, arquivos e arquivos de meta-data, o que aumenta muito o desempenho de aplicativos que trabalham com arquivos pequenos, porque estes são lidos de uma só vez, em apenas um ciclo de I/O do HD.
Sua versão 3 não trabalha perfeitamente com o sistema de arquivos de rede NFS (Network File System). Existem alguns patches para resolver o problema, mas eles não o resolvem completamente.
O criador do ReiserFS é Hans Reiser. Atualmente o projeto é patrocinado pela SuSE e mantido pela empresa NameSys. Aguarda-se o lançamento oficial da versão 4 do ReiserFS, o Reiser4, que foi totalmente reescrito e possui um desempenho superior à da versão 3.
JFS: Sigla de Journaling File System, foi criado pela IBM para uso em servidores corporativos, e teve seu código-fonte liberado. O sistema de arquivos JFS também usa a estrutura I-node para armazenar a localização dos blocos de cada arquivo nas estruturas físicas do disco. A versão JFS2 armazena esses I-nodes em uma árvore binária para acelerar o acesso a essas informações. Esses blocos podem variar de 512 a 4096 bytes, e a alocação dos I-nodes é feita conforme vai sendo necessário.
XFS: desenvolvido originalmente pela Silicon Graphics e posteriormente disponibilizado o código-fonte, o XFS possui vários patches e alguns bugs, mas é um sistema de arquivos muito rápido na gravação e possui um desfragmentador para arquivos.
NTFS: sigla de New Technology File System, foi desenvolvido pela Microsoft para ser utilizado nas versões de rede do Windows, inicialmente o NT, e posteriormente o 2000 Server e o 2003 Server. Baseado no HPFS (High Performance File System), da IBM, o NTFS possui suporte a gravação de permissões de acesso, Reparse Points, que permite associar ações a arquivos e pastas, quotas de discos, entre outros recursos.
Por ser um sistema proprietário, da Microsoft, não foi possível desenvolver para o GNU/Linux um suporte nativo a sistemas de arquivos NTFS. É possível ler, mas não há suporte eficiente à gravação nesse sistema de arquivos. Em alguns casos, pode-se usar o Captive, um programa disponibilizado sob a licença GNU GPL que se utiliza de arquivos de sistema do Windows para permitir a gravação em sistemas de arquivos NTFS, e por isso requer que o Windows esteja instalado no computador. O desempenho do Captive é pobre, a gravação de arquivos é muito lenta, atingindo míseros 2 MB por segundo. Outra alternativa, porém paga, é o Paragon NTFS, que funciona muito bem e possui um desempenho muito superior ao do Captive.
Qual sistema de arquivos utilizar
Falar qual sistema de arquivos você deve usar é uma missão quase impossível, é como falar de distribuições GNU/Linux: alguém que adora o Slackware com certeza só vai recomendar o Slackware, e alguém que adora o Debian com certeza só vai recomendar o Debian, e assim por diante.
Em se tratando de sistemas de arquivos, a recomendação é que você escolha, entre os que possuem os recursos que você precisa, aquele que apresentar o melhor desempenho.
Nesse caso, a menos que você vá utilizar NFS, o sistema de arquivos mais indicado é o ReiserFS, que possui comprovadamente um desempenho muito superior ao de outros sistemas de arquivos. Se for utilizar NFS, uma vez que existe o problema de compatibilidade do ReiserFS, pode-se utilizar o XFS, ou o EXT3. Entretanto, se você realmente não precisa das vantagens do journaling, o EXT2 pode ser a melhor alternativa para você.
[1] Comentário enviado por removido em 18/04/2006 - 13:08h
Davidson, muito legal o seu artigo, mas acredito que é algo bastante complicado essa escolha de particionamento, principalmente em caso de HDs menores. Como por exemplo o do meu notebook que tem 20gb calcular o espaço de cada partição é complicado. Você conhece algum método após o linux estar rodando alterar o tamanho de uma partição?
[2] Comentário enviado por DooM em 18/04/2006 - 13:36h
Muito bem explicado e ótimo para iniciantes. Excelente artigo. Sugiro que os leitores iniciantes deem uma olhada depois na subsecao Sistema de Arquivos, no menu Artigos e procure saber mais sobre cada tipo de partição existente como forma de complemento ao artigo.
[3] Comentário enviado por davidsonpaulo em 18/04/2006 - 13:41h
danielgianni,
Você pode usar LVM (Logical Volume Manager). Ele é um sistema que, a grosso modo, cria partições virtuais, que podem ser redimensionadas a qualquer momento mesmo que o sistema esteja rodando.
Outro método também é redimensionar as partições usando o utilitário parted. Existem frontend gráficos para o parted, q saber QtParted e GParted. Entretanto, o parted só funciona se a partição não estiver sendo utilizada, e em alguns casos você terá que reiniciar o sistema para as alterações serem reconhecidas.
[4] Comentário enviado por removido em 18/04/2006 - 16:43h
Davidson, esse é um dos melhores e mais didáticos artigos que eu já li aqui ou em qualquer outro lugar. Muito bom mesmo. Meus parabéns. Agora toda vez que alguém me perguntar "mais o que é partição extendida ?" eu vou mandar ler esse artigo. Muito bom.
[5] Comentário enviado por atheist em 18/04/2006 - 18:44h
Bom artigo. A propósito, você sabe como montar partições no formato reiser4 ? Tava lendo um tuto na net, onde ele falava que era só recompilar com suporte ao dito cujo. Entretanto, posso ter problema de sanidade mental, mas tenho certeza que não vi o suporte para reiser4 ou "reiserfs4", no meu kernel 2.6.12, meu propósito era montar uma partição primária de 6 Gb que uso para testes, nesta, instalei o Underground Desktop (tava com o freeBSD), que utiliza-se desse file system. Sei tambem que tem que instalar o reiser4progs depois da compilação, se você souber de algo, conta ai, pois não achei nada de útil na net.
Quero montar essa partição no meu Slackware/debian/gentoo que estão no mesmo HD.
[7] Comentário enviado por upaf em 18/04/2006 - 21:19h
davidsonpaulo,
O artigo está excelente!!! Parabéns!!!
Gostaria de mais detalhes relacionado ao ReiserFS e NFS, isso quer dizer que ReiserFS não funciona muito bem com o Samba? Li alguma coisa dizendo que alguns bugs foram consertados após o kernel 2.4.10, isso procede?
Nesse caso seria melhor usar o EXT3 ou XFS? No Handbook do Gentoo li que o XFS não é muito bom caso haja alguma falha na alimentação de energia ou erro de hardware... http://www.gentoo.org/doc/en/handbook/handbook-x86.xml?part=1&chap=4
[8] Comentário enviado por removido em 19/04/2006 - 00:03h
upaf, sei que não perguntou a mim, mas ... eu uso o reiserfs com o samba e funciona perfeitamente... nenhum problema, isso testado em várias máquinas de várias versões de linux (kurumin, Ubuntu 5.10, CentOS 4.3, Conectiva 10) e Windows (98,2000,XP). Mesmo o CentOS que não suporta o reiserfs de forma nativa, consegue acessar/gravar em diretórios samba de linux instalado em reiserfs. Ah! testado em uma dezena de kernel(s) do 2.4 ao 2.6.
Upaf,
Eu tenho um artigo na fila de espera do VOL onde matei todas as minhas duvidas sobre Reiser e entao resolvi escrever alguma coisa pra ajudar a comunidade. Conclui que o ReiserFs é muito bom e um excelente sistema de arquivos. Se voce quiser me mande um email e eu te encaminho o artigo.
No link acima tambem existe muitos artigos descrevendo diversos fyle sistems entre eles o Reiser.
Abraço.
[10] Comentário enviado por lipse em 19/04/2006 - 10:49h
Davidson,
Parabéns pelo artigo. Excelente. Boa linguagem, bom conteúdo, enfim, ótimo.
Só um detalhe, nos trechos abaixo, há uma coisinha errada, olhe:
"...CD-ROM's, CD-RW's e DVD's não têm partições, portanto são identificados apenas como /dev/hdax, sendo "x" a letra que representa o número do disco...os discos SCSI são discos...CD-RW's e gravadoras de DVD não têm partições, sendo identificadas apenas como /dev/sdax, sendo "x"? a letra que representa o número do disco..."
No caso, você já inseriu as letras. Na verdade o certo é:
[15] Comentário enviado por lipse em 24/04/2006 - 09:58h
Rdaraujo,
Editando o /etc/fstab. Nele há linhas assim:
/dev/hdb1 /mnt/hdb1 reiserfs noauto,exec 0 0
Isso indica que o dispositio /dev/hdb1 deve ser montado no diretório /mnt/hdb1, é formatado em reiserfs, o parâmetro "noauto" indica que não deve ser montado durante o boot etc.
Pra que usuários comuns possam montar o dispositivo sem poderes de root, basta adicionar o parâmetro "users" deixando a linha citada assim:
[16] Comentário enviado por agk em 24/04/2006 - 14:17h
Excelente artigo, bem explicado, excelente para iniciantes e quem não conhece do assunto. Quanto ao problema do Reiferfs com NFS eu desconhecia esse problema, quais são os bugs e o que acontece quando se usa NFS em partições Reiserfs?
[ ]'s
[19] Comentário enviado por davidsonpaulo em 24/04/2006 - 15:04h
rwar,
O servidor não foi pago em dia pelo patrocinador, então o domínio foi suspenso. O pagamento já foi efetuado, então em breve o domínio deve voltar ao ar.
[20] Comentário enviado por marlichsi em 26/04/2006 - 10:41h
Agora, uma dúvida que tá me pegando, que tem relação com particionamento.
Ontem estava implementando mrtg prá mostrar espaço ocupado/livre de disco, e verifiquei que os valores que o comando 'df' mostravam não eram a real situação.
Verifiquei na net sobre isso e, realmente, acontece em várias distribuições e sistemas operacionais que utilizam o comando. Alguém sabe alguma razão?
Faça o teste: total da partição - (menos) utilizado. O valor não bate com o livre. Logo, o percentual de utilizado está incorreto.
[21] Comentário enviado por lipse em 26/04/2006 - 13:51h
Marlichsi,
Na verdade é um engano seu e dos outros que relataram o problema (já foi meu tb). Devido a um arredondamento que o "df" faz, acontece isso, porém, o valor retornado no campo "espaço disponível" é verdadeiro. Isso só acontece em partições grandes, onde o "df" menospreza alguns megabytes. Veja:
Neste exemplo ele parece errar o cálculo do espaço na partição /dev/hdb2, pois 50GB menos 44GB é apenas 6GB e não 6,6GB, mas, se você der o comando sem o parâmetro "-h", verá que o cálculo é exato:
[22] Comentário enviado por jasc em 30/07/2006 - 00:51h
Não consiguí acessar corretamente minha partição do windows XP com o meu Conectiva 10. Eu vejo mas não gravo nem copio nada de lá. Como faço para montar corretamente essa partição? ela é hda1
[23] Comentário enviado por brunojbpereira em 03/02/2007 - 21:09h
Excelente artigo, davidson. aprendo cada dia mais um pouco sobre este ótimo sistema operacional lendo artigos de qualidade como este. parabéns pelo seu trabalho.
[25] Comentário enviado por rbn_jesus em 23/03/2007 - 17:03h
Estou com um problema em LVM, creio que vc possa me ajudar...
tenho uma configuração lvm em apenas 1 dispositivo, da seguinte forma:
xda1 - /boot - ext3
xda2 - lvm (lvm1 - / - ext3; lvm2 - swap)
como recupero as informações da 1ª partição do lvm neste despositivo?
[26] Comentário enviado por rod.muller em 16/10/2007 - 22:37h
Olá pessoal!
Estou um pouco apavorado!!!
Tenho um servidor samba rodando com o mandriva 2007. O problema que ocorre
é que acho que deu algum problema no sistema de arquivos ou no HD porque
dá a seguinte mensagem quando tento entrar em safe mode (em modo normal
nem sobe, fica somente a tela azul):
creating root device
trying to resume from ;dev;sda5
no suspend signature on swap, not resuming
echo: cannot open /proc/suspend2/do_resume for wrire:2
mounting root filesystem /dev;root
VFS: Can´t find ext3 filesystem on dev sda1
mount: error 22 mounting ext3 flags defauts
kernel panic - not sysning: attempted to kill init!
Já tentei rodar o fsck e nada.
Estou apavorado porque o meu backup não esta atualizado.
[27] Comentário enviado por luiscarlos em 28/10/2007 - 11:27h
tenho um hp compaq nx9005 e nao consigo montar o dvd, jah tentei todos os devices como sr sda hdx e nada, estranho que na BIOS ele nao consta mas no windows ele funciona e eu consigo dar boot no cd com ele pra iniciar a instalação.
[31] Comentário enviado por davidsonpaulo em 24/02/2010 - 11:27h
Adilson,
Se o disco é secundário, sua identificação deve ser sdb (ou sdc ou sdd) e não sda. Experimente usar sdb2, sdc2 e sdd2 para ver se algum deles corresponde ao disco antigo.
[32] Comentário enviado por adilsom em 20/03/2010 - 09:03h
root@pbx:~ $ fdisk -l
Disk /dev/hda: 80.0 GB, 80026361856 bytes
255 heads, 63 sectors/track, 9729 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/hda1 * 1 13 104391 83 Linux
/dev/hda2 14 9729 78043770 8e Linux LVM
Disk /dev/sda: 160.0 GB, 160040803840 bytes
255 heads, 63 sectors/track, 19457 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/sda1 * 1 13 104391 83 Linux
/dev/sda2 14 19457 156183930 8e Linux LVM
Pelo que entendo seria sda2,
Mas da este erro:
root@pbx:~ $ mount -t ext3 /dev/sda2 /mnt/hd_slave
mount: wrong fs type, bad option, bad superblock on /dev/sda2,
missing codepage or other error
In some cases useful info is found in syslog - try
dmesg | tail or so