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
Como gerar qualquer emoji ou símbolo unicode a partir do seu teclado
Instalar e Configurar o Slackware Linux em 2025
Como configurar os repositórios do apt no Debian 12 em 2025
Passkeys: A Evolução da Autenticação Digital
Instalação de distro Linux em computadores, netbooks, etc, em rede com o Clonezilla
Muitas dificuldades ao instalar distro Linux em Notebook Sony Vaio PCG-6131L (VPCEA24FM)
Slackpkg+ (Slackpkg Plus) está de volta!
Como dividir duas janelas igualmente e lado-a-lado na sua tela
Configurando o Conky para iniciar corretamente no sistema
3 configurações básicas que podem melhorar muito a sua edição pelo editor nano
Minha rede tem um espaço invisível que não dá pra digitar o nome da re... (1)
Pedagogia no brasil não passa de alfabetização por m4sturbação mental ... (2)
compilação samba 4.22 rock linux 9.5 (3)
Erro de segmentação «Segmentation fault (core dumped)» ao retornar obj... (7)