Compactando e enviando arquivos e backups para servidores Linux remotos

A linha de comando em servidores Linux permite que os administradores realizem uma série de tarefas que, de outras maneiras, através de interfaces visuais, por exemplo, levariam muito mais tempo.

A praticidade e a rapidez dos comandos não é algo que deve ser ignorado, e até mesmo no momento da realização de backups o shell é imbatível. Existem comandos no Linux para a realização de uma série de tarefas.

Podemos compactar arquivos rapidamente, podemos criar, mover e apagar diretórios e arquivos, podemos listar e visualizar o conteúdo de pastas de diversas maneiras, e podemos também conferir detalhes relativos ao hardware, encerrar processos e verificar o uptime, dentre outras coisas.

Isto sem falar nos vários parâmetros adicionais que geralmente existem para diversos comandos, os quais aumentam bastante a gama de situações nos quais eles podem ser utilizados (como no caso do comando “find“, por exemplo).

Linux

Que o Linux é um sistema operacional extremamente versátil ninguém duvida, apesar de sua complexidade (em grande parte devida ao fato de que ele não é o OS mais usado e também ao grande número de distribuições existentes) e do medo que muitos usuários têm do prompt de comando.

Mas que tal aprendermos a copiar o conteúdo de uma pasta, no Linux (qualquer pasta) e em seguida enviá-la para um outro servidor? Digamos que você precise copiar uma conta inteira de seu servidor web e em seguida enviar esta cópia para algum local seguro? Um backup, uma cópia de segurança que você deseja armazenar em um local remoto, um serviço de backup na nuvem, um servidor FTP?

Transferencia - Arquivos

Bem, o procedimento é bastante simples: são apenas duas linhas, na verdade. Uma para compactar, para gerar o backup/cópia, e outra para transportar o arquivo para o outro servidor. Vamos lá:

Conectando ao servidor

1) Primeiro de tudo, vamos realizar a conexão com o servidor, com a máquina onde está(ão) localizado(s) o(s) site(s)/pasta(s)/arquivo(s) que desejamos copiar. Este é o servidor “origem”. Utilize um cliente SSH qualquer, como por exemplo o Bitvise SSH Client.

2) Após o login no servidor “origem”, vamos realizar o backup. Vamos também comprimi-lo, para economia no tráfego e também para tornar o processo de transferência, posteriormente, mais rápido (assim como para maior organização, claro). Confira abaixo:

Comprimindo os arquivos

3) Utilize o seguinte comando:

tar -cvzf /[local_de_geracao]/nome_do_arquivo.tar.gz /[arquivos_a_serem_copiados]

Note que estamos aqui lidando com o “local de geração”, o “nome do arquivo” e os “[arquivos_a_serem_copiados]” no servidor local, no qual estamos conectados (no servidor “origem”, ou seja, no qual se encontram os dados que desejamos copiar e enviar para um destino remoto).

O comando acima irá gerar um arquivo compactado (nome_do_arquivo.tar.gz) contendo todos os arquivos localizados no local que especificamos (/[arquivos_a_serem_copiados]). Este arquivo será então gerado/armazenado no diretório especificado (/[local_de_geracao]/).

Arquivos

Você deve substituir os trechos em negrito do comando acima conforme suas necessidades, caminhos, nomes de arquivos desejados e também de acordo com aquilo que deseja copiar e compactar.

Veja o exemplo abaixo:

tar -cvzf /home/backup_testes_codigo_fonte.tar.gz /home/testes_codigofonte

O comando acima irá gerar/armazenar um arquivo compactado chamado “backup_testes_codigo_fonte.tar.gz” dentro da pasta “/home”. Este tarball conterá todo o conteúdo da pasta “/home/testes_codigofonte”.

Repare que no comando acima, uma vez que estamos utilizamos os caminhos absolutos, o diretório no qual nos encontramos no momento (você pode conferir através do comando “pwd”) é irrelevante.

Também é possível realizar este procedimento de maneira diferente, acessando inicialmente o diretório no qual se encontram os arquivos dos quais desejamos fazer backup:

cd /home/testes_codigofonte
tar -cvzf backup_testes_codigo_fonte.tar.gz *

O comando acima terá um resultado bastante semelhante ao provocado pelo comando anterior. Também teremos um arquivo compactado chamado “backup_testes_codigo_fonte_tar.gz”. Ele também conterá todo o conteúdo da pasta “/home/testes_codigofonte”.

Ele apenas será armazenado em um local diferente, ou seja, também em “home/testes_codigofonte”, a qual é a mesma pasta que contém os arquivos que estão sendo copiados (pois acessamos esta pasta inicialmente, com o comando “cd”, e removemos do comando a indicação do caminho, o que faz com que o tarball seja gerado na pasta atual).

Para armazenar esta cópia, este tarball, em outra pasta (como por exemplo na pasta “/home”), basta indicar o caminho antes do nome do arquivo, da seguinte maneira (sem sair de “/home/testes_codigofonte”, lembre-se):

tar -cvzf /home/backup_testes_codigo_fonte.tar.gz *

E assim por diante. Observe que você pode também alterar o nome do arquivo a ser gerado (neste exemplos, backup_testes_codigo_fonte), conforme desejar.

Enviando o backup para um servidor remoto

4) Com o comando “scp” (Secure Copy), podemos nos conectar rapidamente ao servidor remoto e também rapidamente realizar o envio de algum arquivo. Da seguinte maneira:

scp /[origem]/nome_do_arquivo usuario_destino@host_destino:[local_destino]

É tudo bem simples. Informamos no comando o diretório onde o arquivo compactado se encontra (bem como o seu nome), seguido do usuário necessário para acesso ao servidor remoto, bem como o endereço deste último, finalizando com a pasta remota onde desejamos armazenar o backup.

Transporte - Arquivos

Por exemplo:

scp /home/testes_codigofonte/backup_testes_codigo_fonte.tar.gz usuario@usw-s864.rsync.net:/data1/home/88254

Após o comando, será pedida a senha (password) no prompt, logo após o <ENTER>. E abaixo você pode conferir o output do comando acima:

root@host [1160 12:26:25 /]# scp /home/testes_codigofonte/backup_testes_codigo_fonte.tar.gz usuario@usw-s864.rsync.net:/data1/home/88254
Password:
backup_testes_codigo_fonte.tar.gz 100% 6745KB 3.3MB/s 00:02
root@host [1161 12:28:23 /]#

Bem simples, não?

No exemplo acima, enviamos o arquivo “backup_testes_codigo_fonte.tar.gz”, localizado no servidor “origem”, na pasta “/home/testes_codigofonte”, para o servidor destino (em “usw-s864.rsync.net”), usando o login “usuario”. No destino, o arquivo foi armazenado no diretório “/data1/home/88254”.

Você pode (e deve) realizar as alterações necessárias, vale lembrar mais uma vez, no tocante aos nomes dos arquivos, pastas, caminhos, login/usuário (tanto na origem quanto no destino), host, destino, etc, além de preencher a senha quando for solicitado, antes da transferência.

Aqui também usamos os caminhos absolutos, o que faz com que o path onde estamos localizados no servidor (o diretório/caminho) seja irrelevante.

Podemos também fazer da seguinte maneira, acessando antes de tudo o diretório que contém o backup:

cd /home/testes_codigofonte
scp backup_testes_codigo_fonte.tar.gz usuario@usw-s864.rsync.net:/data1/home/88254

Simples não? Lembre-se também de que o comando “scp” pode ser utilizado para o envio de outros tipos de arquivos, normalmente. Ele pode também, é claro, ser utilizado de forma independente, à parte dos procedimentos descritos nos itens 1 a 3, acima.

Até a próxima!

Sobre Marcos A.T. Silva

Marcos A.T. Silva é empresário na área de TI. É apaixonado por games desde que ganhou seu primeiro Atari 2600. Outras de suas paixões são a leitura e a música. Toca piano desde cedo e também gosta do bom e velho rock ‘n roll. Pode ser encontrado também no XboxPlus.

Queremos saber sua opinião