domingo, 6 de setembro de 2009

Partições e Sistemas de Arquivos

Resolvi colocar essa postagem afim de esclarer e desenvolver conceitos sobre partições e filesystems num ambiente Linux. Esses conceitos em primeira instância não estariam em nada relacionados com segurança de tráfego de dados, mas estariam fortemente ligados com segurança de dados. Nada pior do que perder um arquivo importante. As maiores preocupações desse post vão ser sobre planejamento de espaço em disco, partições, swap, qual o tamanho ideial para uma partição swap, tipos de partições, como planejar suas partições, etc, etc...

A maior parte vai ser conceitual, afim de ensinar conceitos importantes para você ter base na hora de tomar atitudes seguras quando for instalar ou fazer manutenção de um sistema.


--------------------------------------------------------------------------------

As partições foram inventadas para permitir que os usuários dos computadores pudessem dividir seus Hard Disks em partes, afim de poder instalar diversos sistemas operacionais. Esse mecanismo permite você dividir um único HD físico, em diversos drivers lógicos. Uma partição pode ser encarada como uma continuidade de blocos no seu HD. Uma partição não pode ser redefinida sem que haja perda de dados. Uma ferramenta para manipulação da tabela de partições é o 'fdisk'. Caso você tenha mais de um HD instalado, você deve usar: 'fdisk '.

A tabela de partições foi criada como parte do boot sector, e só possui espaço para 4 partições primárias. Se você precisar de mais partições você pode usar as extendidas. As partições extendidas ficam dentro de uma primária. O número de partições lógicas não é limitado. Elas são associadas como uma lista encadeada de partições. Logo, você pode ter 3 partições primárias usáveis, e mais suas partições lógicas. No Linux, você acessa as partições pelo arquivo device. As partições primárias tem terminação: 1, 2, 3 e 4, e as lógicas de 5 adiante. Logo, /dev/hda1 é a primeira partição primária do primeiro HD IDE.

Cada partição reserva um código que qualifica o seu tipo. No Linux, o código 0x82 para swap e 0x83 para 'native' Linux (native Linux é hoje em dia o ext2 para quase todas as distribuições). Quando você vai formatar a sua partição, é requisitado o tamanho que você quer para cada inode. Uma tabela de inodes é criada quando você formata a sua partição. Um inode é um identificador único que cada arquivo/diretório recebe no sistema. Usando o comando: 'ls -ila' você pode ver o inode de cada arquivo. Para entender a árvore de arquivos que o Linux possui, o Linux atribui '1' para o inode do diretório da raiz '/'. E dentro dele todos os arquivos e diretórios possuem um inode. Assim qualquer arquivo pode ser encontrado, usando essa corrente que começa na raiz e vai descendo de nível. Um exemplo para entender melhor:

vulcan:~$ ls -lai /
1 drwxr-xr-x 22 root root 2048 Mar 31 12:26 ./
1 drwxr-xr-x 22 root root 2048 Mar 31 12:26 ../
12289 drwxr-xr-x 4 root root 27648 May 12 19:56 dev/
284673 drwxr-xr-x 13 root root 3072 May 19 11:34 etc/
276481 drwxr-xr-x 8 root root 1024 May 18 12:52
home/

Inode de /home é 276481.

vulcan:~$ ls -lai /home

276481 drwxr-xr-x 8 root root 1024 May 18 12:52 ./
1 drwxr-xr-x 22 root root 2048 Mar 31 12:26 ../
440512 drwxrwx--x 25 cox admin 2048 May 17 00:52 cox/


Note que os '..', significa o diretório pai, com inode '1' (raiz) e o '.', significa o diretório corrente, com inode 276481.

Definir inodes altos (4Kb) significa transferência de dados para grandes blocos mais rápido, em contrapartida você perde com o que se chama 'fragmentação interna'. Fragmentação interna é o processo que se da quando um arquivo é gravado no seu computador. O último bloco de dados é gravado e como arquivos vem em diferentes tamanhos, algumas unidades de blocos vão ficar sem ser usadas. Se você usa inodes altos essa perda pode ser grande. O recomendado é usar 2048 bytes.

Partição Swap

No Linux, a partição swap é uma extensão da sua memória RAM. Se você tem 16 Mb de RAM e 16 MB de Swap, você possui 32 Mb de memória virtual. Uma partição swap única pode ter no máximo 128Mb. Na verdade ela pode até ser maior, mas o espaço extra não será usado. Se você planeja ter mais do que 128 Mb de swap, crie partições múltiplas de swap. O tamanho da sua swap você tem que decidir, essa decisão vai depender do que pretende rodar no seu computador. Para uma utilização doméstica recomenda-se o dobro da sua memória RAM.

Para grandes servidores com troca de arquivos (emails, news, arquivos temporários) grande, são recomendados uma série de cuidados para criação da tabela de partições. Sempre tendo em mente que memória RAM é rápida e swap é muito mais lento. É usado uma partição para os arquivos binários do Linux, os diretorios /bin, /sbin/, /usr/bin/, /usr/sbin e outros. Arquivos que raramente (ou nunca) são alterados. Coloca-se a partição SWAP no meio do disco. E o restante para arquivos que irão sair tão rápido como chegaram, como: /var/spool/mail, /var, /var/spool/lpd.

A partição SWAP no meio do Disco é recomendado para que a distancia entre qualquer parte do disco até ela seja rápido. Então, se o ponteiro do HD estiver na última track do Disco vai andar até a metade para ler a SWAP. Assim como se estiver no inicio, vai andar até a metade.

Partições pequenas, facilitam na hora do backup. Principalmente na hora de tomar decisões como backups diários, e semanais. Algumas partições podem ser diárias, outras semanais e outras mensais.

Em resumo, mantenha arquivos que tenham grande vida útil no sistema juntos na mesma partição, e os que tenham vida curta em outra