Assim como ocorre com vários aspectos do Linux, você tem opções para o tipo de sistema de arquivos. Provavelmente, você trabalhará com partições do Linux que foram projetadas com um dos sistemas de arquivo estendidos, uma vez que eles são universalmente suportados em distribuições do Linux e oferecem uma solução robusta original.
O sistema de arquivos estendido volta aos primeiros dias do Linux. Esse sistema de arquivos removeu a limitação inicial de 2GB, mas também sofreu de fragmentação excessiva. Dessa forma, logo após o release do primeiro sistema de arquivos estendido, o segundo (ext2) foi desenvolvido para compensar algumas das limitações, por exemplo, aumentando o tamanho para 4TB. O Ext2 rapidamente se tornou o padrão na prática para sistemas de arquivo Linux. À medida que o Linux evoluiu, evoluíram também seus sistemas de arquivo até o que temos hoje: o ext3 e o mais recente, o ext4.
Ext3 e ext4
O ext3 é a evolução do ext2 e ainda é amplamente usado atualmente. Uma de suas principais vantagens sobre o ext2 é o journaling. O ext3 é compatível com a versão anterior, portanto, é possível converter uma instalação do ext2 para ext3 sem particionar novamente. Usando uma conta com privilégios de administrador, digite tune2fs -j e deverá ser o suficiente para realizar a tarefa. Por exemplo, se seu sistema de arquivos ext2 estiver localizado na segunda partição do primeiro disco rígido, digite tune2fs -j /dev/sda2 para convertê-lo.
Além do journaling, o ext3 oferece aprimoramentos sobre o ext2, como uma velocidade de gravação superior e mais robustez. Sem o journaling, o ext2 sofre de um encerramento sujo do sistema quando há uma falha de energia inesperada ou uma paralisação do sistema. No boot, cada sistema ext2 precisa ser verificado antes de ser montado. Com os sistemas de arquivo de grande porte atuais, o tempo para a verificação de consistência não é aceitável em muitos ambientes, uma vez que ele limita muito a disponibilidade. Com o journaling (o sistema de arquivos NTFS tem journaling), os dados são gravados no disco e marcados como completos ou incompletos. Se um encerramento sujo do sistema ocorrer, somente os arquivos marcados como incompleto são verificados, eliminando a necessidade de verificar todo o sistema de arquivos. Com o ext3, você tem a opção de um, entre três modos de journaling:
- Journal: executa o journaling integral dos dados. Todos os dados, não apenas os metadados, são gravados no journal primeiro (modo mais lento).
- Ordered: tecnicamente, aplica o journal apenas aos metadados, mas ajuda a resolver o problema de corrupção de writeback gravando primeiro em blocos de dados.
- Writeback: não realiza o journaling dos dados, somente dos metadados (o modo mais rápido).
O ext4 é a evolução atual do sistema de arquivos estendido e é compatível com as versões anteriores, ext2 e ext3. O ext4 oferece aprimoramentos sobre o ext3, principalmente com relação à robustez e velocidade. O ext4 está disponível desde a versão de kernel do Linux 2.6.28.
A tabela a seguir mostra algumas das principais características dos sistemas de arquivo mais populares do Linux. Entender essas características pode ajudá-lo, se você planeja projetar esquemas de partição ou converter uma partição existente.
Sistema de arquivos | |
---|---|
Sistema de arquivos estendido | (aproximadamente 1991) O sistema de arquivos mais antigo do Linux; sofria de fragmentação excessiva |
Ext2 | (aproximadamente 1993) Altamente robusto, mas sem journaling; executa fsck em todo o sistema de arquivos após uma paralisação do sistema ou um encerramento inesperado |
Ext3 | (aproximadamente 2001) Pode conter até 32.000 subdiretórios; apresentou recursos de journaling; compatível com a versão ext2 anterior |
Ext4 | (aproximadamente 2008) Pode conter até 64.000 subdiretórios; aprimoramentos com relação ao ext3 existente, com a opção de desativar completamente o journaling; compatível com as versões anteriores, ext3 e ext2 |
Entendendo como os dados são armazenados
Seu sistema de arquivos Linux armazena dois tipos de dados. Entre esses tipos estão os dados do usuário, que são os arquivos e diretórios normais com os quais os usuários (incluindo você) trabalham. Os arquivos podem variar entre quatro tipos: regulares, links, FIFOs (canais nomeados) e soquetes.
Talvez você já tenha ouvido “Tudo no Linux é um arquivo ou um processo”. Essa expressão se refere ao fato de que não há um conceito de registro no Linux. Em vez disso, tudo é armazenado em um dos tipos de arquivo. O outro tipo de dados armazenado por seu sistema de arquivos são os metadados, que são o nó do índice, comumente chamado de inode. O inode é a forma de indexação de atributos sobre um arquivo do Linux. Todo arquivo tem um inode e esses inodes normalmente contêm informações sobre o arquivo, como:
- Tamanho do arquivo;
- Usuário e proprietários do grupo;
- Permissões de arquivo;
- Número de links e links simbólicos;
- Acesso ao arquivo e tempo de modificação;
- informações sobre a lista de controle de acesso (ACL);
- Quaisquer atributos adicionais definidos no arquivo, como imutabilidade.
O comando stat pode fornecer essas informações sobre o inode.
$ stat /etc/services
File: `/etc/services'
Size: 362031 Blocks: 728 IO Block: 4096 regular file
Device: fd00h/64768d Inode: 1638437 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2011-12-19 00:01:25.000000000 -0600
Modify: 2006-02-23 07:09:23.000000000 -0600
Change: 2011-09-18 17:29:37.000000000 -0500
A listagem acima usa o comando stat no arquivo /etc/services. Todas as informações sobre inode e atributos de arquivo são fornecidas em um formato utilizável.
Diretórios
Ao trabalhar na linha de comando no Linux, você verá pastas frequentemente chamadas de diretórios. Diretórios servem para a mesma finalidade que as pastas no Windows ou em um ambiente de interface gráfica com o usuário (GUI) no Linux. Mas, na verdade, diretórios são apenas arquivos vazios que podem categorizar arquivos ou até mesmo outros diretórios.
Todos os diretórios são categorizados em uma hierarquia, com o diretório raiz (/) no topo da hierarquia. Essa é uma categorização lógica, uma vez que nem todos os diretórios residem na mesma partição ou sistema de arquivos. Na verdade, mesmo se você estiver montando um sistema de arquivos em rede como o NFS, o ponto de montagem residirá em algum lugar na hierarquia sob o diretório raiz. Essa é uma diferença significativa com relação ao Windows, em que a unidade C contém normalmente o sistema de arquivos em disco, enquanto os sistemas de arquivo sequenciais, como mapeamento de rede, CD-ROM e USB são montados em suas próprias unidades, como D, E, F ou G.
Superblock
No nível mais alto do sistema de arquivos, o superblock contém informações sobre o próprio sistema de arquivos. Embora trabalhar com o superblock não seja tão interessante, entender esse conceito usando o comando dump2fs pode ajudá-lo a ter uma ideia sobre os conceitos de armazenamento do sistema de arquivos.
O comando na Listagem 2 obtém informações em uma partição em /dev/sda1 – nesse caso, uma partição /boot. O comando grep –i superblock usa grep sem distinção entre maiúsculas e minúsculas para mostrar somente informações relacionadas à cadeia de caractere superblock.
# dumpe2fs /dev/sda1 | grep -i superblock
Primary superblock at 1, Group descriptors at 2-2
Backup superblock at 8193, Group descriptors at 8194-8194
Backup superblock at 24577, Group descriptors at 24578-24578
Backup superblock at 40961, Group descriptors at 40962-40962
Backup superblock at 57345, Group descriptors at 57346-57346
Backup superblock at 73729, Group descriptors at 73730-73730
Visualizando o status do sistema do arquivo
Naturalmente, você vai querer estabelecer uma linha de base para seu sistema de arquivos para alocação de crescimento, pontos de verificação de segurança e expectativas de desempenho. O arsenal GNU contém muitas ferramentas para trabalhar com um sistema de arquivos. Entre as ferramentas populares estão df, du, fsck e fdisk. Entre as ferramentas úteis, mas menos comuns estão iostat e sar.
Os comando do du e df
É possível usar os comandos df e du para se ter uma ideia da utilização de disco e do espaço livre. O comando du -csh /var exibe informações sobre o tamanho do diretório no sistema de arquivos /var. Se você estiver interessado em obter o tamanho de arquivo de subdiretórios localizados em /var, o comando du -h será suficiente.
# du -csh /var
73M /var
73M total
O comando df -h informa a utilização do sistema de arquivo em disco entre pontos de montagem no computador com Linux no formato legível para humanos (- h):
# df -h
File System Size Used Avail Use% Mounted on
/dev/mapper/VolGroup00-LogVol00 37G 3.2G 32G 10% /
/dev/sda1 99M 12M 82M 13% /boot
tmpfs 506M 0 506M 0% /dev/shm
O comando fsck
Para verificar (e possivelmente reparar) o sistema de arquivos em busca de erros, use o comando fsck. Por exemplo, se você quiser verificar a existência de erros em uma partição localizada em /dev/sda2, digite o comando fsck /dev/sda:
# umount /var
# fsck /var
fsck from util-linux-ng 2.17.2
e2fsck 1.41.12 (17-May-2010)
/dev/sda3: clean, 702/192000 files, 52661/768000 blocks
Observação: use esse comando em um sistema de arquivos que não está montado.
Nos exemplos acima, as tarefas são realizadas no modo de usuário único. A partição /var localizada em /dev/sda3 é desmontada primeiro. O comando fsck não encontrou erros, mas se tivesse encontrado, seria feita uma tentativa de corrigi-los.
O comando iostat
iostat pode fornecer atividade de entrada/saída de disco:
$ iostat
Linux 2.6.18-164.el5 (DemoServer) 12/19/2011
avg-cpu: %user %nice %system %iowait %steal %idle
0.25 1.74 1.26 2.89 0.00 93.86
Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn
sda 10.69 351.52 227.60 1759192 1139038
sda1 0.06 0.45 0.00 2254 22
sda2 10.62 351.01 227.60 1756658 1139016
dm-0 40.06 350.72 227.60 1755178 1139016
dm-1 0.02 0.18 0.00 920 0
hdc 0.00 0.03 0.00 144 0
fd0 0.00 0.00 0.00 16 0
Este exemplo demonstra como o comando iostat é útil para fornecer Leitura/Gravação e informações de uso geral do sistema. Perceba que, por padrão, o comando retorna o uso de Leitura/Gravação em todos os dispositivos e um instantâneo de uso cumulativo na linha superior.
O comando sar
sar pode fornecer informações de contador do sistema parecidas com as informações fornecidas pelo Monitor de desempenho do Windows. Você pode usar sar para exibir contadores passados ou pode usá-lo para exibir o horário real:
$ sar 4 5
Linux 2.6.18-164.el5 (DemoServer) 12/19/2011
12:20:20 AM CPU %user %nice %system %iowait %steal %idle
12:20:24 AM all 0.00 0.00 0.00 0.00 0.00 100.00
12:20:28 AM all 0.00 0.00 1.01 0.00 0.00 98.99
12:20:32 AM all 0.00 0.00 0.50 0.00 0.00 99.50
12:20:36 AM all 0.00 0.00 0.00 0.00 0.00 100.00
12:20:40 AM all 0.25 0.00 1.01 0.00 0.00 98.74
Average: all 0.05 0.00 0.50 0.00 0.00 99.45
O comando sar neste exemplo usa uma frequência de quatro segundos para um interno de cinco vezes, a fim de exibir as informações do contador.
Otimizando e ajustando o sistema de arquivos
Uma de suas responsabilidades principais como administrador de sistemas é garantir que os dados de seu usuário possam ser acessados dentro de um período de tempo satisfatório. Assim como o Windows, o monitoramento do desempenho do sistema em um servidor Linux é uma tarefa primária. Fora do desempenho de rede, o desempenho de Leitura/Gravação do sistema de arquivos pode se tornar um gargalo e é candidato para um possível ajuste e otimização.
Entre as formas de ajustar o sistema de arquivos estão:
- Usar a ferramenta tune2fs;
- Alterar as opções de montagem no arquivo /etc/fstab;
- Alterar os parâmetros de kernel.
Ajustando com o tune2fs
Use a ferramenta de linha de comando tune2fs para ajustar os parâmetros de volume no disco rígido. Por exemplo, se você tiver diretórios grandes em uma partição ext3, poderá acelerar as consultas usando árvores b com hash, o que pode ser feito com a chave tune2fs dir_index:
# tune2fs -O dir_index /dev/sda5
Execute o comando tune2fs com privilégios de administrador. A chave -O especifica a opção na partição instruída.
Montando com opções especiais
Quando um sistema de arquivos é disponibilizado para uso, o processo é chamado de montagem do sistema de arquivos. Na verdade, há um comando mount para fazer exatamente isso. Quando você ativa o computador com Linux, ele precisa saber como montar os sistemas de arquivos disponíveis. O arquivo /etc/fstab atende a esse propósito. Assim como em todos os arquivos de configuração no Linux, é possível editar este arquivo com um editor de texto como vi ou vim. Dentro desse arquivo, você verá os pontos de montagem para os diversos sistemas de arquivo. Ao ajustar as opções de montagem, você usa a quarta coluna em cada linha de uma montagem. Por exemplo, é possível adicionar noatime para eliminar a auditoria dos registros de data e hora acessados pela última vez em um sistema de arquivos específico, o que possivelmente aprimorará o desempenho. Se você tiver um sistema de arquivos para archives (por exemplo) e os usuários não puderem gravar nos dados, monte uma partição como ro (apenas leitura).
Para alterar as opções de montagem em /etc/fstab, use a seguinte linha de comando:
UUID=97ee2cc4-8a26-41e9-9da1 /archives ext4 defaults,ro,noatime 1 2
Quaisquer alterações feitas no arquivo /etc/fstab não entram em vigor imediatamente. Para aplicar as alterações sem uma reinicialização, use o comando mount para desmontar e remonte o sistema de arquivos alterado:
# mount -o remount /archives
Se você tiver uma partição que pode ser desmontada em seu ambiente de trabalho atual, o comando mount -o remount será útil para evitar uma reinicialização após a modificação do arquivo /etc/fstab.
Ajustando os parâmetros de kernel
É possível usar o comando sysctl para visualizar e alterar os parâmetros do kernel em execução. Para obter uma listagem dos parâmetros relacionados ao sistema de arquivos e de seus valores atuais, digite o comando sysclt -a | grep fs:
# sysctl -a | grep fs. | less
....
fs.quota.warnings = 1
fs.quota.syncs = 23
fs.quota.free_dquots = 0
fs.quota.allocated_dquots = 0
fs.quota.cache_hits = 0
fs.quota.writes = 0
fs.quota.reads = 0
fs.quota.drops = 0
fs.quota.lookups = 0
fs.suid_dumpable = 0
fs.inotify.max_queued_events = 16384
fs.inotify.max_user_watches = 8192
fs.inotify.max_user_instances = 128
fs.aio-max-nr = 65536
fs.aio-nr = 0
fs.lease-break-time = 45
fs.dir-notify-enable = 1
fs.leases-enable = 1
fs.overflowgid = 65534
fs.overflowuid = 65534
fs.dentry-state = 26674 23765 45 0 0 0
fs.file-max = 102263
.........
A listagem anterior mostra uma listagem parcial dos parâmetros relacionados ao sistema de arquivos para o kernel e usa o comando grep para filtrar somente os parâmetros relacionados ao sistema de arquivos. É possível alterar esses parâmetros usando o comando sysclt -w. Por exemplo, se seu servidor manipular muitos arquivos pequenos e você recebe cada vez mais mensagens de erro sobre o “esgotamento de manipuladores de arquivo”, é possível aumentar o número máximo de descritores de arquivo aberto com o comando sysclt -w file-max=xxxxxx, sendo que xxxxxx é o número máximo de manipuladores de arquivo desejados. Assim como ocorre com quaisquer alterações feitas nos parâmetros padrão, há um preço a ser pago, portanto, tenha certeza de que seu computador tem a alocação de memória para lidar com o aumento da carga de manipuladores de arquivo.
Quaisquer alterações feitas usando sysctl não são persistentes após as reinicializações. Para persistir após a reinicialização, será necessário abrir o arquivo /etc/sysconf em um editor de texto e fazer a alteração. Nem todos os possíveis parâmetros de kernel estão listados neste arquivo, portanto, se você fizer uma alteração e vir o parâmetro listado, basta adicioná-lo ao arquivo com seu valor desejado.
Fragmentação
Normalmente, convém “desfragmentar” quando a fragmentação atinge 20% ou mais em um sistema operacional. Quando o sistema de arquivos estendido é criado, ele reserva aproximadamente 5% de seu espaço em disco para uso do sistema, a fim de evitar o problema de desfragmentação. Resumindo, em cenários normais, você não deve se preocupar com a desfragmentação. No entanto, isso não significa que os sistemas de arquivo estendidos de geração são completamente imunes à fragmentação. Se você suspeitar que um arquivo está fragmentado, poderá verificar isso com o comando filefrag . A chave -v fornece informações mais detalhadas.
Trabalhando com memória virtual
O conceito de memória virtual no Linux não é muito diferente da memória virtual no Windows. Seu sistema operacional Windows usa o arquivo de paginação quando o hardware RAM é gasto. A memória virtual fornece uma forma relativamente barata de aumentar o desempenho durante os períodos nos quais a memória RAM está sendo usada completamente.
Troca do Linux
A alocação do espaço de memória virtual do Linux está localizada no “sistema de arquivos” de troca. O sistema de arquivos em disco precisa ser do tipo swap. Diversas ferramentas de linha de comando (e gráficas) estão disponíveis a fim de fornecer informações sobre o uso da troca do sistema:
- free;
- top;
- vmstat;
- sar.
O comando free -m pode fornecer uma visualização da utilização da memória, incluindo a troca. O comando top fornece uma visualização em tempo real da utilização dos processos, da CPU e da memória, enquanto o comando vmstat fornece a atividade da memória do sistema e da CPU com a adição do benefício de bloqueio de entrada/ saída. No entanto, achei as ferramentas sar parecidas com o Desempenho de monitor do Windows para obtenção de uma análise de como a troca está sendo usada em um servidor:
$ sar -w
$ sar -B
Nesse exemplo, sar -w pode fornecer saída para a atividade de troca, enquanto o comando sar -d pode fornecer informações sobre as Leituras e Gravações para a partição SWAP. Consulte a documentação sobre sar para configuração do sar.
Criando um novo espaço de troca
Se você precisar de mais espaço para troca, terá duas opções: criar uma partição para troca ou criar um arquivo em uma partição existente para o espaço de troca. Se você tiver o espaço de partição, a abordagem recomendada será alocar o espaço para troca em uma partição para troca dedicada. No entanto, a criação de um arquivo com o tamanho de uma troca necessária em uma partição de trabalho existente, como o ext3, é possível.
Se, por acaso, você criar uma nova área de troca, redimensionando uma partição ou até mesmo adicionando um novo disco rígido, será necessário criar o tipo de sistema de arquivos de troca com o comando mkswap . A sequência de etapas para a criação de um novo espaço de troca é a seguinte:
- Use fdisk para criar a partição e defina o tipo como 82 (troca de Linux);
- Use mkswap para criar o volume de troca;
- Ative o espaço de troca com o comando swapon -a;
- Adicione na nova montagem de troca ao arquivo /etc/fstab;
- Reinicie e use o comando swapon -s para verificar se a nova troca está disponível.
Modificando o sistema de arquivos
O uso dos recursos aumenta com o tempo, e é por isso que você gerencia o sistema. Se o aumento for o resultado do crescimento dos dados devido ao crescimento normal da organização ou de um aumento repentino inesperado, por exemplo, uma fusão, você poderá redimensionar ou até mesmo alterar o tipo de sistema de arquivos de suas partições existentes. É claro que essas tarefas vêm acompanhadas de riscos e devem ser planejadas com cuidado e com backups.
fdisk, parted e seu primo GUI, o GNOME Partition Editor (GParted), são ferramentas comuns do Linux usadas para modificação de partições. No entanto, sempre que você modificar uma partição existente, planeje com antecedência, pois há o risco de perda de dados. Se você projetar suas partições usando o Gerenciador de Volume Lógico (LVM), as tarefas serão realizadas com mais perfeição do que com os métodos tradicionais, pois o LVM permite que você modifique partições sem o risco de perder dados.
Conclusão
Este artigo o familiarizou com os recursos e opções de gerenciamento do ext2, ext3 e ext4, e apresentou ferramentas para monitorar o uso do sistema de arquivos. Na ausência do Monitor de desempenho do Windows, as ferramentas descritas neste artigo podem proporcionar a você as estatísticas necessárias para gerenciar com efetividade um sistema de arquivos Linux em diversas plataformas de hardware.
Recursos
Aprender
- Saiba mais sobre partições e sistemas de arquivo no Linux em “Windows-to-Linux roadmap: Part 6. Working with partitions and file systems” (developerWorks, novembro de 2003).
- Saiba mais sobre o redimensionamento de partições convencionais usando o GParted em “Redimensionando partições do Linux, Parte 1: Introdução” (developerWorks, agosto de 2010).
- Saiba mais sobre os problemas de redimensionamento de partição avançado, incluindo o uso de recursos do LVM, solução de problemas e alternativas para o redimensionamento de partição em “Redimensionando partições Linux, parte 2: Redimensionamento avançado” (developerWorks, setembro de 2010).
- Descubra como sar o ajuda a encontrar gargalos de desempenho em “Easy system monitoring with SAR” (developerWorks, fevereiro de 2006).
- Saiba mais sobre LVM.
- Na zona Linux do developerWorks, você encontrará muitos artigos de instruções, bem como downloads, fóruns de discussão e muitos outros recursos para desenvolvedores e administradores Linux.
- Fique por dentro dos eventos técnicos e webcasts do developerWorks com foco em uma variedade de produtos IBM e tópicos do segmento de mercado de TI.
- Participe de um briefing ao vivo e gratuito do developerWorks para se atualizar rapidamente sobre produtos e ferramentas da IBM, bem como tendências do segmento de mercado de TI.
- Acompanhe as demos on demand do developerWorks , que abrangem desde demos de instalação e configuração de produtos para iniciantes até funcionalidades avançadas para desenvolvedores experientes.
- Siga o developerWorks no Twitter, ou inscreva-se em um feed de tweets sobre o Linux no developerWorks.
Obter produtos e tecnologias
- Avalie os produtos IBM da maneira que for melhor para você: faça download da versão de teste de um produto, avalie um produto on-line, use-o em um ambiente de nuvem ou passe algumas horas na SOA Sandbox aprendendo a implementar Arquitetura Orientada a Serviços de modo eficiente.
- Faça o download do GParted.
- Faça o download do Parted Magic.
Discutir
- Participe da comunidade do developerWorks. Entre em contato com outros usuários do developerWorks e explore os blogs, fóruns, grupos e wikis voltados para desenvolvedores.
***
Sobre o autor: Tracy Bost é desenvolvedor de software e engenheiro de sistemas experiente. Ele também é palestrante e instrutor do sistema operacional Linux. Tracy é certificado como Red Hat Certified Engineer (RHCE) e Microsoft Certified Systems Engineer (MCSE), além de ser membro ativo da Linux Foundation. Ele trabalhou em vários segmentos de mercado, incluindo hipotecas, imóveis e o setor sem fins lucrativos.