Acessando o conteúdo de uma pasta usada como ponto de montagem

Você já se perguntou como acessar o conteúdo de uma pasta onde já tem um volume montado? Se você eventualmente precisa realocar dados de um volume para outro talvez já tenha passado por isso.

Imagine o cenário. Você tem um servidor WEB com uma única partição montada como “/” , consequentemente todas as suas páginas web estão em “/var/www”, e que começa a crescer exponencialmente consumindo todo o espaço em disco.

A solução padrão seria, antes que acabe o espaço e seus serviços fiquem fora do ar, você adicionar um novo disco ao servidor e mover todo o conteúdo para lá. Ou de forma resumida:

  1. Adicionar um novo disco (digamos /dev/sdb),  e formatar como você desejar (/dev/sdb1)
  2. Montar este novo volume em um diretório temporário (ex. /tmp/WWWTEMP),
  3. Copiar os arquivos de /var/www para o novo disco neste ponto de montagem temporário (/tmp/WWWTEMP),
  4. Parar o serviço web (apache, por exemplo),
  5. Remover todo o conteúdo de /var/www,
  6. Desmontar o volume temporário,
  7. Montar o novo volume (já com o conteúdo copiado) em /var/www (não esqueça de adicionar a entrada em /etc/fstab)
  8. Subir novamente o serviço web.

No passo 3, foi optado por copiar os arquivos, ao invés de mover, para reduzir o tempo de indisponibilidade do serviço web.

Mas isso implica no passo 5, que remove os arquivos posteriormente. Obviamente você tem que remover o conteúdo do /var/www antes de montar o novo volume, pois sem isso você continua sem espaço em seu servidor.

Agora é que vem a parte “emocionante” da história.  Suponhamos que você esqueceu de executar este passo, já montou o novo volume por cima, subiu o serviço web e acabou a sua janela de manutenção.

Como acessar o /var/www original para remover os arquivos, agora que já temos um novo volume montado por cima?

A resposta é simples e implica em usar um recurso do próprio Linux que é o comando “mount” com o parâmetro “bind”, que permite remontar parte de um sistema de arquivos em outro local.

Assim, o que devemos fazer é criar um novo diretório temporário e remontar o “/” em um novo local, o que vai dar acesso ao diretório “/var/www” original.

Sem mais explicações eu executaria os comandos a seguir pela linha de comandos:

1# mkdir /tmp/ROOT2# mount --bind / /tmp/ROOT3# cd /tmp/ROOT/var/www4# rm -rf /tmp/ROOT/var/www

Observe que eu montei o “/” dentro de /tmp/ROOT, e como isso não leva as montagens que estão por cima, o que se tem é o conteúdo original “/”.

Na dúvida se realmente é o conteúdo original ou o do ponto de montagem que está em produção, você pode criar um arquivo em “/var/www” e ver se ele aparece em /tmp/ROOT/var/www. Provavelmente isso não ocorrerá.

 

Deixe um comentário

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.