Ferramenta de backup do HD para dispositivos externos

Este é um script simples feito em bash que utiliza as ferramentas zenity e rsync (que já vem em muitas distribuições) e foi feito para backup de dados pessoais (fotos, músicas, documentos, arquivos, etc) de um computador doméstico para um dispositivo externo (HD externo, pendrive, cartão de memória, etc). 1) O que o script não faz ou quando não é recomendado: 1.1) Execução de forma agendada, pois é interativo; 1.2) Copia para volumes de rede e/ou criptografados. Apesar do rsync permitir estes recursos, não fiz este teste; 1.3) Sincronização dos 2 lados. O rsync também permite isso, mas não é o caso desta ferramenta (pelo menos nesta versão); 1.4) Backup de arquivos de programas e/ou componentes sistema operacional. Mexer nestes arquivos com os programas em execução pode gerar resultados indesejáveis. Para isso utilize ferramentas como clonezilla e faça um backup do teu sistema; RESUMINDO: script recomendado apenas para backup de documentos pessoais sentido computador doméstico (PC, notebook, etc) para dispositivos externos plugados. 2) Requisitos 2.1) shell: bash ou compatível 2.2) ferramentas: rsync e zenity (presentes nativamente no ubuntu) 3) preparação 3.1) Primeiro definir 2 diretórios: 3.1.1) diretório onde o script irá rodar (Ex: $HOME/scripts) 3.1.2) diretório onde ficarão os links do que será backupeado (Ex: $HOME/backups/rsync) 3.2) No diretório dos links de backup (item 3.1.2), criar os links para as pastas e arquivos que você deseja fazer backup: No meu caso, estou criando links simbólicos, com este comando: ln -s <diretorio_origem> link Se os locais que você quiser copiar estiver em um hd diferente de onde roda a aplicação, aí você deve usar hardlinks, dúvidas? consulta o bom e velho man ln! Um exemplo de como ficou meus links de backup: luis@jupiter:~/backups/rsync$ ll drwxrwxr-x 2 luis luis 4096 Dez 21 13:03 ./ drwxrwxr-x 5 luis luis 4096 Nov 12 09:19 ../ lrwxrwxrwx 1 luis luis 30 Jul 15 17:54 arquivos -> /home/data/restricted/arquivos/ lrwxrwxrwx 1 luis luis 17 Jul 15 20:09 clouds -> /home/luis/clouds/ lrwxrwxrwx 1 luis luis 29 Jul 15 17:54 imagens -> /home/data/restricted/imagens/ lrwxrwxrwx 1 luis luis 28 Jul 15 17:55 musica -> /home/data/restricted/musica/ -rw-rw-r-- 1 luis luis 90 Jul 3 16:38 readme.txt lrwxrwxrwx 1 luis luis 28 Jul 15 17:55 videos -> /home/data/restricted/videos/ E este arquivo readme.txt, tem algum problema com ele? Nenhum, o script só leva em conta os links deste diretório. 4) Configurando o programa: aqui a gente vai editar algumas linhas do programa para adaptar ao seu ambiente. 4.1) Definição de alguns diretórios: preenche estas 3 variáveis com os diretórios em 3.1 e o diretório onde é montado suas mídias externas (no meu caso em /media/luis) # # definição de paths: # # $PATH_APP : onde roda o aplicativo # $PATH_OR_BACKUP : diretório com os links para volumes a serem backupeados # $PATH_MIDIAS : local onde são montadas as mídias de backup PATH_APP=/home/$NAME_USER/scripts PATH_OR_BACKUP=/home/$NAME_USER/backups/rsync PATH_MIDIAS=/media/$NAME_USER 4.2) Sintaxe do comando rsync que você vai utilizar, neste meu caso ele copia (ou atualiza) os diretórios selecionados no dispositivo externo, deixando-os iguais e só gera alguma mensagem de andamento do backup se houver algum erro. # definição do comando rsync RSCMD="/usr/bin/rsync -auq --delete" 4.3) Seleção do que copiar: esta parte é opcional. Antes de iniciar a cópia, é gerada uma caixa de díálogo perguntando quais itens você deseja copiar. Dependendo do tamanho de cada diretório e de teus dispositivos, você pode deixar alguns itens previamente selecionados. Para configurar isso basta editar este trecho do código: # itens backpeados por default (opcional) lista_bkp_def="imagens musica arquivos" # configuração de lista para dispositivo específico if [ "${DISP}" = "hde_lua" ];then lista_bkp_def="imagens musica arquivos" elif [ "${DISP}" = "hde_io" ];then lista_bkp_def="imagens musica arquivos" elif [ "${DISP}" = "hde_europa" ];then lista_bkp_def="imagens musica arquivos videos" elif [ "${DISP}" = "hde_titan" ];then lista_bkp_def="imagens musica arquivos videos" fi Na variável $lista_bkp_def eu defino quais itens vão ficar selecionados para backup. Esta lista pode mudar de acordo com os nomes dos rótulos dos dispositivos, que estão nos if's do código. obs: pelo gerenciador de arquivos (nautilus) é possível configurar os rótulos dos dispositivos. 5) Execução Terminado os preparativos, agora vamos rodar. Plugue um disposivo externo e faça um teste. Não esquecer de setar a permissão de execução: chmod u+x bkp2hde.sh obs: se durante a execução você receber esta mensagem "Gtk-Message: GtkDialog mapped without a transient parent. This is discouraged.", não tem problema, pode continuar normalmente. É só um aviso do zenity. 5.1) Iniciando: ./bkp2hde.sh 5.2) É aberta uma caixa de diálogo (zenity) com os nomes dos dispositivos, se não tiver o dispositivo que você plugou, veja se você configurou a variável $PATH_MIDIAS corretamente (4.1). Após você escolher o dispositivo vem esta mensagem: luis@jupiter:~/scripts$ ./bkp2hde.sh Gtk-Message: GtkDialog mapped without a transient parent. This is discouraged. Dispositivo "hde_io" selecionado. Identificado o dispositivo:hde_io... Tecle <ctrl>+c para sair ou enter para para continuar Pressione qualquer tecla. 5.3) É aberta uma caixa de diálogo (zenity) para seleção dos diretórios que serão copiados. Se eles não aparecerem, veja se você configurou a variável $PATH_OR_BACKUP corretamente (4.1). No meu caso, escolhi as pastas imagens e musicas. Vem então estas linhas com os teus parâmetros de backup. Gtk-Message: GtkDialog mapped without a transient parent. This is discouraged. 21/12/2016 14:23:08;----------------- 21/12/2016 14:23:08;Configurações de backup Dispositivo : hde_io itens de backup : imagens musica diret. destino : /media/luis/hde_io/backup_jupiter_luis comando : /usr/bin/rsync -auq --delete Tecle <ctrl>+c para sair ou enter para para iniciar Tudo ok? Então pressione <enter> e é só aguardar 5.4) Andamento do backup: aparecem linhas como estas 21/12/2016 14:26:03;Início 21/12/2016 14:26:03;------------------- 21/12/2016 14:26:03;backpeando imagens 21/12/2016 14:26:13;------------------- 21/12/2016 14:26:13;backpeando musica 21/12/2016 14:28:20;Concluido Esta última linha indica que o backup teve sucesso 5.5) No dispositivo externo aparece este diretório na raiz: ./backup_<hostame>_<user> Ex: no meu caso ficou assim ./backup_jupiter_luis Então se você rodar este script em outra máquina, vai armazenar os arquivos em diretórios diferentes. 6) Atualizações que pretendo fazer futuramente: 6.1) Ao selecionar os diretórios para backup, mostrar o espaço que eles ocupam; 6.2) Ao selecionar as mídias de backup, mostrar a ocupação e o espaço disponível; 6.3) Testar em dispositivos externos de rede; 6.4) Gerar versão não interativa, podendo passar os argumentos de backup através de comando de linha ou arquivos de configuração Então é isso, that's all folks! Espero que lhe ajudem! _/\_

Por: Luis Henrique Pessoa


Exemplo de recursividade: gerador de sequências de tamanho e soma dos elementos fixos

Compartilho um programinha em PHP que gera sequências de números (em ordem crescente e não repetidos) que têm uma coisa em comum: possuem número de elementos e soma destes fixos e determinados pelo usuário. Exemplo: - S: Soma das dos elementos = 12 - Ni: Valor mínimo permitido (inclusive) = 1 - Nf: Valor máximo permitido (inclusive) = 6 - L: Quantidade de números da sequencia = 4 Resulta: - 1+2+3+6 = 12 - 1+2+4+5 = 12 1+5+6 - não imprime pois tem 3 números e não 4, embora totalize também 12. O programa possui a classe GeradorSequencia e esta possui os seguintes métodos principais: - input: para entrar com os parâmetros da sequência: tamanho, intervalos inferior e superior para os números da sequência e soma dos números da sequência. - createSequences: cria sequência a partir de cada número do intervalo fornecido em input. - fillSequences: preenche as sequências criadas por createSequences. Aqui ocorre o uso da recursividade. Não levei muito em consideração aspectos como performance e recomendações de codificação. Serve apenas como exemplo didático para uso da recursividade para conseguir resolver uns problemas computacionais.

Por: Luis Henrique Pessoa






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts