Lidando com falta de espaço em disco

A C9, onde o blog fica hospedado, vez por outra sofre com problemas de falta de espaço em disco. Quando isso ocorre, não é incomum uma ou várias das tabelas do banco de dados desse blog ficarem corrompidas. Como isso estava ocorrendo com uma certa freqüência, resolvi arregaçar as mangas e tomar uma providência nada convencional para esse problema.

Que solução é essa? Proteger meus bancos numa “partição” a parte. Mas, ao invés de usar uma partição física eu estou usando um arquivo de tamanho fixo pra fazer as vezes da partição. Dessa forma, o disco pode lotar, esvaziar, voltar a lotar que o espaço reservado para os meus bancos continuará o mesmo. Eventualmente esse espaço também acabará se esgotando. Por outro lado, dessa vez eu estou no controle da situação. :-)

Eu sei que existem formas melhores de resolver esse problema:

  • Comprar mais disco para colocar na C9
  • Implementar algum mecanismo de quotas
  • Evitar que o disco chegasse perto de lotar

Por outro lado, todas elas me pareciam mais onerosas ou no quesito tempo ou no quesito dinheiro. A solução adotada serve bem para esses e para outros problemas. Segue abaixo o passo-a-passo para implantá-la. Lembrando: a máxima do faça backup dos seus dados, não me responsabilizo por nada! IMBW, YMMV está valendo.

  1. Escolha um tamanho apropriado para essa “partição”.No meu caso eu escolhi 20 megabytes. Isso dá e sobra para acomodar por pelo menos mais uns 2 anos tanto o meu blog e os blogs de mais 2 companheiros de c9.
  2. Crie, em um local seguro, um arquivo com o tamanho desejado da partição:
    dd if=/dev/zero of=/opt/safe_partition_file bs=1M count=20
  3. Crie um sistema de arquivos dentro dessa “partição”:
    mkfs.ext2 safe_partition_file

    O mkfs.ext2 reclamará que esse não é dispositivo real — e é verdade, é um simples arquivo — e perguntará se vc quer continuar. Apenas diga que sim.

  4. Crie um mount-point para o esse arquivo:
    mkdir /mnt/safe_dbs
  5. Acrescente uma entrada no /etc/fstab sobre esse arquivo. Uma entrada como a seguinte deve bastar:
    /opt/safe_partition_file /mnt/safe_dbs ext2 loop,defaults,noexec,nodev,nosuid 0 0

    Se tudo o que você queria era um diretório especial que tivesse um espaço reservado e ficasse protegido mesmo quando o disco lotasse, então vc pode parar aqui. Mas, se o seu problema é com bancos de dados MySQL, continue lendo.

  6. Desligue o MySQL e monte a sua nova “partição”:
    /etc/init.d/mysql stop
    mount /mnt/safe_dbs
  7. Mova os bancos de dados desejados para a nova “partição”:
    mv -v /var/lib/mysql/{huginho,zezinho,luizinho} /mnt/safe_dbs
  8. Crie mount-points para os seus bancos de dados:
    install --directory --group mysql --owner mysql --mode 700 /var/lib/mysql/{huginho,zezinho,luizinho}

    Para quê isso? Bom, é do seu interesse que esses bancos fiquem a salvo dentro do diretório protegido, correto? Por outro lado, o MySQL não procurará por eles nesse diretório. O jeito mais fácil então é fazer com que esses bancos “aparentem” estar no diretório do MySQL quando na verdade eles estão em outro local. Um jeito fácil de fazer isso e que não envolve links simbólicos é usar a opção bind do mount. Ela permite que você “monte” um diretório da sua árvore de arquivos em outro lugar — ao mesmo tempo. É uma espécie de link, mas gerenciado internamente pelo VFS do Linux.

  9. Acrescente uma entrada no /etc/fstab sobre os seus bancos. Para os bancos dos exemplos acima, as seguintes entradas devem bastar:
    /mnt/safe_dbs/huginho /var/lib/mysql/huginho auto bind 0 0
    /mnt/safe_dbs/zezinho /var/lib/mysql/zezinho auto bind 0 0
    /mnt/safe_dbs/luizinho /var/lib/mysql/luizinho auto bind 0 0
  10. Monte os bancos de dados nos locais corretos e ligue o MySQL:
    mount /mnt/safe_dbs/{huginho,zezinho,luizinho}
    /etc/init.d/mysql start
  11. Pronto! Seus bancos estão a salvo contra eventuais problemas de falta de espaço em disco. Claro, se eles crescerem demais irão acabar lotando o espaço na “partição especial” também. Todavia, essa foi uma das premissas adotadas por essa solução: que seus bancos não crescem desordenadamente e que não precisarão, a médio prazo, de mais espaço do que o que já lhes foi dado.

E é isso aí. Espero que seja útil para mais alguém.

One Response to “Lidando com falta de espaço em disco”

  1. [...] tranquilas, particularmente no que diz respeito aos bancos de dados desse blog. Mesmo depois das medidas paleativas que eu tomei, o problema de corrupção de banco e dados ainda me perseguia. Aparentemente eu [...]

Leave a Reply