Arquivo da tag: xfs

Como ativar compressão em sistemas de arquivos no Linux

Imagine que você precise fazer um “export” de um banco de dados de 100 GB e você tem só 50 GB livres no seu servidor. Você pode facilmente criar o export direto para um arquivo .gz. É rápido e fácil. Mas imagine agora que seu banco de dados corrompeu e você precisa restaurar os dados. Até onde eu sei você vai precisar baixar o export inteiro e não vai ter espaço para isso porque o banco não consegue ler o export de dentro do arquivo .gz. (Se alguém souber como, me avise que eu atualizo este artigo). A alternativa neste caso seria baixar o backup em outro servidor, montar via NFS no servidor de destino e ter o custo da rede para fazer o import novamente.

Outro exemplo: Você tem um servidor de arquivos com dados raramente consultados (planilhas, arquivos de texto, etc) e eles ocupam muito espaço. A alternativa de novo é zipar os arquivos, mas não é muito prático descompactar quando for utilizar os arquivos novamente.

No Windows Server 200X, existe a compactação do NTFS, nativa. Basta ir em propriedades, Avançados, Compactar…

E no Linux? Eu já li alguma coisa sobre compactação usando Reiser4, mas nunca vi funcionar. E ainda por cima Reiserfs depois que o Hans Reiser foi preso por matar a mulher, tem um futuro ameaçado.

Felizmente eu achei uma solução elegante utilizando o Fusecompress. Como o próprio nome diz, o Fusecompress usa Fuse que é um componente do Linux que permite montar dispositivos sem precisar de direitos de root. Além do Fusecompress, existem dezenas de implementações que utilizando Fuse para montar desde ISOs até partições NTFS.

O legal do Fusecompress é poder utilizar qualquer partição já criada, independente do sistema de arquivos utilizado. Basta você apontar um diretório que será utilizado como respositório para um ponto de montagem qualquer. Por exemplo: para montar o diretório /origem no /destino, basta executar o comando:

fusecompress /origem /destino

Se você executar um df -h aparecerá o seguinte retorno.

/dev/sda3             170G  108G   63G  64% /
fusecompress          170G  108G   63G  64% /destino

Como você pode ver no exemplo acima, o disco /destino é o mesmo do /. Não é necessário utilizar nenhum partição específica para isso. Agora você pode usar o /destino para “jogar” os arquivos que deseja armazenar de forma compactada. Para testar eu copiei um export de Oracle de 30 GB para o diretório /destino. Dando um ls, é possível comparar o /origem (que efetivamente está armazenado do disco) com o /destino (que é acessável utilizando o fusecompress). Neste caso a taxa de compressão é de pouco mais de 6 para 1. Nada mal. Para ver a diferença entre o tamanho real do arquivo e o tamanho em disco basta executar o comando:

ls -lha  /origem/arquivo /destino/arquivo

O retorno será parecido com o abaixo:

-rw-r--r-- 1 vicente vicente 4.8 GB Jun 29 11:25 export
-rw-r--r-- 1 vicente vicente 30 GB  Jun 29 11:25 export

Note que o arquivo é armazenado em disco no /origem e lá aparece com 4.8 GB.  Ser você for abrir este arquivo sem montar com o fusecompress só achará cobras e lagartos. Agora se você montar no /destino poderá acessar o arquivo do mesmo jeito que acessaria um arquivo não compactado. Note que é uma compactação bem razoável que vem com um custo de performance grande com uso intensivo de CPU e uma demora bem maior para realizar a criação ou cópia deste arquivo para o /destino. Para copiar do /destino no entanto a demora não é tão grande. Por padrão é utilizado o formato ZLIB para compactação. É possível utilizar os formatos LZO (rápido, mas usa muita memória. Em um teste que eu fiz, faltou memória em uma máquina com 2 GB de RAM e a operação foi abortada), BZ2 (compacta muito mas é muito lerdo) e LZMA (que não testei). Caso queira testar estas opções, basta executar man fusecompress e ver quais são os parâmetros.

Caso precise desmontar o volume comprimido basta utilizar o comando:

fusemount -u /destino

Com certeza esta é uma opção interessante para quem precisa guardar dados muito volumosos e não tem espaço suficiente. Mas não custa avisar: se for utilizar o fusecompress em produção, você vai precisar testar e ter certeza que vai funcionar com segurança para o seu ambiente. Os testes que eu fiz foram em ambiente de teste e eu não dou nenhuma garantia de funcionamento. Lembre-se que não adianta xingar a minha mãe, ela nem gosta de Linux…