<Anterior | Conteúdo | Próxima>
Sincronizando arquivos e diretórios
Uma estratégia comum para manter uma cópia de backup de um sistema envolve manter um ou mais diretórios sincronizados com outro diretório (ou diretórios) localizado no sistema local (geralmente um dispositivo de armazenamento removível de algum tipo) ou em um sistema remoto. Podemos, por exemplo, ter uma cópia local de um site em desenvolvimento e sincronizá-lo de tempos em tempos com a cópia “ativa” em um servidor web remoto.
No mundo semelhante ao Unix, a ferramenta preferida para esta tarefa é rsync. Este programa pode sincronizar diretórios locais e remotos usando o protocolo de atualização remota rsync, que permite rsync para detectar rapidamente as diferenças entre dois diretórios e realizar a quantidade mínima de cópias necessária para sincronizá-los. Isto faz rsync muito rápido e econômico de usar, em comparação com outros tipos de programas de cópia.
O rsync é invocado assim:
rsync opções origem destino
onde fonte e destino são um dos seguintes:
● Um arquivo ou diretório local
● Um arquivo ou diretório remoto na forma de [usuário @] host: caminho
● Um servidor rsync remoto especificado com um URI de rsync: // [usuário @] host [: porta] / caminho
Observe que a origem ou o destino deve ser um arquivo local. A cópia remota para remota não é suportada.
Vamos tentar rsync em alguns arquivos locais. Primeiro, vamos limpar nosso Foo diretório:
[me @ linuxbox ~] $ rm -rf foo / *
[me @ linuxbox ~] $ rm -rf foo / *
A seguir, vamos sincronizar o recreio diretório com uma cópia correspondente em Foo:
[me @ linuxbox ~] $ rsync -av playground foo
[me @ linuxbox ~] $ rsync -av playground foo
Incluímos os -a opção (para arquivamento - causa recursão e preservação de atributos de arquivo) e o -v opção (saída detalhada) para fazer uma espelho que acontecerá no marco da recreio diretório dentro Foo. Enquanto o comando é executado, veremos uma lista dos arquivos e diretórios que estão sendo copiados. No final, veremos uma mensagem resumida como esta:
enviado 135759 bytes recebidos 57870 bytes 387258.00 bytes / s tamanho total é 3230 a aceleração é 0.02
enviado 135759 bytes recebidos 57870 bytes 387258.00 bytes / s tamanho total é 3230 a aceleração é 0.02
indicando a quantidade de cópias realizadas. Se executarmos o comando novamente, veremos um resultado diferente:
[me @ linuxbox ~] $ rsync -av playground foo
construindo lista de arquivos ... pronto
enviado 22635 bytes recebidos 20 bytes 45310.00 bytes / s tamanho total é 3230 a aceleração é 0.14
[me @ linuxbox ~] $ rsync -av playground foo
construindo lista de arquivos ... pronto
enviado 22635 bytes recebidos 20 bytes 45310.00 bytes / s tamanho total é 3230 a aceleração é 0.14
Observe que não havia nenhuma lista de arquivos. Isto é porque rsync detectou que não havia diferenças entre ~ / playground e ~ / foo / playgrounde, portanto, não é necessário copiar nada. Se modificarmos um arquivo em recreio e corra rsync mais uma vez:
[me @ linuxbox ~] $ tocar playground / dir-099 / arquivo-Z [me @ linuxbox ~] $ rsync -av playground foo construindo lista de arquivos ... pronto
playground / dir-099 / arquivo-Z
enviado 22685 bytes recebidos 42 bytes 45454.00 bytes / s tamanho total é 3230 a aceleração é 0.14
[me @ linuxbox ~] $ tocar playground / dir-099 / arquivo-Z [me @ linuxbox ~] $ rsync -av playground foo construindo lista de arquivos ... pronto
playground / dir-099 / arquivo-Z
enviado 22685 bytes recebidos 42 bytes 45454.00 bytes / s tamanho total é 3230 a aceleração é 0.14
nós vemos que rsync detectou a mudança e copiou apenas o arquivo atualizado.
Como um exemplo prático, vamos considerar o disco rígido externo imaginário que usamos anteriormente com alcatrão. Se anexarmos a unidade ao nosso sistema e, mais uma vez, ela for montada em / media / BigDisk, podemos realizar um backup do sistema útil criando primeiro um diretório chamado /cópia de segurança na unidade externa e, em seguida, usando rsync para copiar as coisas mais importantes de nosso sistema para a unidade externa:
[me @ linuxbox ~] $ mkdir / media / BigDisk / backup
[me @ linuxbox ~] $ sudo rsync -av - excluir / etc / home / usr / local
/ media / BigDisk / backup
[me @ linuxbox ~] $ mkdir / media / BigDisk / backup
[me @ linuxbox ~] $ sudo rsync -av - excluir / etc / home / usr / local
/ media / BigDisk / backup
Neste exemplo, copiamos o / Etc, / Home e / usr / local diretórios de nosso sistema para nosso dispositivo de armazenamento imaginário. Nós incluímos o --excluir opção de remover arquivos que podem ter existido no dispositivo de backup que não existiam mais no dispositivo de origem (isso é irrelevante na primeira vez que fazemos um backup, mas será útil em cópias subsequentes). Repetir o procedimento de anexar o drive externo e executar este rsync comando seria uma maneira útil (embora não ideal) de manter um pequeno sistema com backup. Claro, um apelido também seria útil aqui. Poderíamos criar um alias e adicioná-lo ao nosso
Arquivo .bashrc para fornecer este recurso:
alias backup = 'sudo rsync -av - excluir / etc / home / usr / local
/ media / BigDisk / backup '
alias backup = 'sudo rsync -av - excluir / etc / home / usr / local
/ media / BigDisk / backup '
Agora tudo o que precisamos fazer é conectar nosso drive externo e executar o backup comando para fazer o trabalho.