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:
- Adicionar um novo disco (digamos /dev/sdb), e formatar como você desejar (/dev/sdb1)
- Montar este novo volume em um diretório temporário (ex. /tmp/WWWTEMP),
- Copiar os arquivos de /var/www para o novo disco neste ponto de montagem temporário (/tmp/WWWTEMP),
- Parar o serviço web (apache, por exemplo),
- Remover todo o conteúdo de /var/www,
- Desmontar o volume temporário,
- Montar o novo volume (já com o conteúdo copiado) em /var/www (não esqueça de adicionar a entrada em /etc/fstab)
- 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á.