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.

2 comentários em “Montando um diretório em outra localização”

  1. Olá amigo.

    Se eu tenho um servidor com várias aplicações WordPress e quero que todos os arquivos de todos os WP fiquem no SSD principal exceto as pastas wp-content/uploads e wp-content/updraft.

    Exemplo

    site1.com.br/www (disco original)
    – site1.com.br/www/wp-content/ (disco original)
    – site1.com.br/www/wp-content/uploads (disco adicional)
    – site1.com.br/www/wp-content/updraft(disco adicional)
    – site1.com.br/www/wp-content/novas-pastas (disco original)

    site2.com.br/www (disco original)
    – site2.com.br/www/wp-content/ (disco original)
    – site2.com.br/www/wp-content/uploads (disco adicional)
    – site2.com.br/www/wp-content/updraft(disco adicional)
    – site2.com.br/www/wp-content/novas-pastas (disco original)

    E assim sucessivamente e automaticamente para cada nova aplicação que eu instalar.

    Tem alguma dica de como montar isso?

    Valeu.

    1. Tudo joinha @Gustavo?

      Tem um bom tempo que não mexo na configuração de um WordPress mas vejo três formas de resolver isso:

      A primeira é que é possível alterar o caminho para as pastas upload, themes, plugins, ou mesmo toda a pasta wp-content, diretamente no wp-config.php. Dá uma conferida em WordPress: Developer Resources: wp-config.php.

      Não sei como a mudança da pasta de plugins afetaria a pasta de dados do “updraft”, você teria que testar se surte o efeito esperado, ou se possível mover todo o wp-content (vide link acima).

      A segunda forma é como eu descrevi neste texto (já bem antigo, por sinal). Você montaria um novo disco onde estariam estas pastas e então você faria um bind no local certo. O problema disso é que se você tiver muitos sites a trabalhar desta forma, você acabará com um /etc/fstab muito grande e talvez isso até afete o tempo de boot nos casos de manutenção, sendo então a opção que menos recomendo para este seu caso.

      A terceira forma, funciona sem grandes impactos no sistema. Para isso você moveria as tais pastas para o seu disco adicional e então as substituiria por links simbólicos no local original. Isso é limpo, rápido e prático já que você não terá que mexer na configuração do WordPress.

      Não existe receita pronta e nem solução melhor para todos os casos. Eu particularmente sugiro que se faça da primeira forma (movendo todo o wp-content), mas só você pode avaliar o seu cenário e decidir pela melhor abordagem.

      Sucesso no sua empreitada e obrigado pela visita.

      []’s

Deixe um comentário para Gustavo Tadeu Cancelar resposta

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

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.