Montando um diretório em outra localização

Imagine a seguinte situação. Seu servidor WEB só tem um disco e uma única partição “/” e que já está lotando. Você já verificou que os dois diretórios que estão causando isso são os diretórios /home e /var/www. Você precisa adicionar um novo disco no seu servidor e mover apenas estes dois diretórios para lá, sem ter que ficar pensando em um esquema de particionamentos complexo e nem começar a mexer com LVM agora com o servidor em produção.

Quando um computador está acabando o espaço em disco o que se pensa é trocar ou adicionar um novo disco com maior capacidade mas dependendo do que esteja instalado neste disco há inúmeras abordagens diferentes para transferir os dados do disco velho para o  novo.

Esta abordagem que apresento aqui usa simplesmente o recurso de bind do comando “mount” e que permite montar um diretório como se fosse uma partição. Quando você está sem espaço em um único diretório (digamos, o /home”) você pode transferir o /home para o novo disco e então montar esta partição diretamente.

Mas quando você tem que mover dois ou mais diretórios (/home e /var; ou /var/log e /var/lib/cache) para este novo disco e você não quer criar várias partições uma solução  prática  é usar este recurso que permite montar parte de uma árvore de diretórios em outro local.

Outro uso para este recurso seria mover os diretórios de uma aplicação especifica para um disco de maior performance sem precisar alterar as configurações da aplicação. Digamos que seu servidor postgresql está rodando em um disco de baixa performance. Sem precisar alterar nada no seu sistema de banco de dados, você poderia mover os diretórios de base dados e logs para o novo disco e então os montaria no local original.

Adicionar o disco físico no servidor, particionar e formatar

Não há muito o que comentar aqui. Estas tarefas já devem ser bem conhecidas e você deve fazê-las com as ferramentas preferidas. Só tenha cuidado para não fazer isso no disco errado e preferivelmente pare os serviços que estejam rodando para assegurar que não haverá gravação nos diretórios que serão movidos.

Para fins de exemplificação eu vou considerar que o disco é reconhecido pelo meu sistema como “/dev/sdb1”, está formatado como xfs e pretendo montar em “/mnt/dados”

Montando o novo dispositivo

Indo direto ao ponto, vamos criar o ponto de montagem:

mkdir /mnt/dados

Acrescentar a linha a seguir no “/etc/fstab” (mude para os valores de acordo com o seu sistema):

echo "/dev/sdb1          /mnt/dados      xfs      defaults     0   0" >>/etc/fstab

Obs: Eu adicionei com um “echo” redirecioando para o arquivo, mas poderia ter aberto um editor de textos se preferisse.

Montar o dispositivo:

mount /mnt/dados

Agora que o novo disco já está pronto para uso vamos mover os diretórios para sua nova localização.

Criando as pastas e movendo os dados

A forma como você vai criar as pastas e mover o seu conteúdo também fica a seu critério. Pode ser usando um gerenciador de arquivos gráfico, pela linha de comandos, copiar e depois excluir; mover direto… você decide. Só lembre-se de parar os serviços que acessam as pastas a serem movidas antes para assegurar que nenhum arquivo será perdido.

Para fins de exemplificação eu farei pela linha de comandos.

Parando o serviço FTP e WEB:

service vsftpd stop
service apache stop

Movendo as pastas /home e /var/www

mv /home /mnt/dados
mv /var/www /mnt/dados

Recriando as pastas vazias para serem usadas como ponto de montagem destes diretórios

mkdir /home /var/www

Fazendo o bind dos diretórios

Agora é a parte principal do trabalho e que consiste apenas em adicionar uma entrada para cada diretório no seu /etc/fstab, assim como fazemos com os dispositivos de bloco (disco, storage etc).

Bind do diretório home:

echo "/mnt/dados/home       /home     none    default,bind      0         0" >>/etc/fstab

Bind do diretório www:

echo "/mnt/dados/www       /var/www     none    default,bind      0         0" >>/etc/fstab

Montando os diretórios:

mount /home
mount /var/www

Testando

Uma vez que tudo esteja feito você poderá consultar se está ok simplesmente listando o conteúdo dos diretórios originais (/home e /var/www) ou então usando o comando mount para ver os pontos de montagem.

root@eugenia:/etc# mount/dev/sda1 on / type ext4 (rw,errors=remount-ro)tmpfs on /lib/init/rw type tmpfs (rw,nosuid,mode=0755)proc on /proc type proc (rw,noexec,nosuid,nodev)sysfs on /sys type sysfs (rw,noexec,nosuid,nodev)udev on /dev type tmpfs (rw,mode=0755)tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev)devpts on /dev/pts type devpts (rw,noexec,nosuid,gid=5,mode=620)/dev/sdb1 on /mnt/dados type xfs (rw)/mnt/dados/home on /home type none (rw,bind)/mnt/dados/www on /var/www type none (rw,bind)

Sugestão final. LVM

Embora não seja obrigatório, uma sugestão que deixo aqui é que ao invés de realizar um particionamento padrão neste novo disco, que você use um particionamento dinâmico com LVM. A vantagem disso é que se daqui a algum tempo este novo disco se tornar pequeno também, você poderá apenas adicionar um novo disco ao LVM e expandir dinamicamente a partição.

O ideal é que se particione todos os discos desde a instalação do sistema com LVM para poder aproveitar todos os benefícios deste recurso. Isso não degrada o sistema e não é complicado. Não há porque não usá-lo.

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *