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.
- 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.
- 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
- 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.
- Crie um mount-point para o esse arquivo:
mkdir /mnt/safe_dbs
- 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.
- Desligue o MySQL e monte a sua nova “partição”:
/etc/init.d/mysql stop
mount /mnt/safe_dbs
- Mova os bancos de dados desejados para a nova “partição”:
mv -v /var/lib/mysql/{huginho,zezinho,luizinho} /mnt/safe_dbs - 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.
- 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
- Monte os bancos de dados nos locais corretos e ligue o MySQL:
mount /mnt/safe_dbs/{huginho,zezinho,luizinho}/etc/init.d/mysql start
- 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.

March 1st, 2007 at 19:50:55
[…] 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 […]