Fazendo backup do Pendrive quando este for conectado/desconectado
Colaboração: André Proto
Data de Publicação: 27 de Janeiro de 2009
Há alguns dias senti a necessidade de realizar o backup de meu pendrive de forma automática sempre no momento em que eu o conectava/desconectava de meu computador. Por isso nesta dica eu coloquei um pequeno script SHELL que realiza o backup no momento em que o Pendrive (ou outro dispositivo de armazenamento USB) é conectado ou desconectado.
O script abaixo foi feito para funcionar no GNOME, porém pode ser adaptado para outros ambientes gráficos e até para o terminal de texto. O script também utiliza os utilitários rsync e sudo; por isso verifique se estes estão instalados em seu sistema antes de seguir esta dica.
Explicando sucintamente como funciona, quando você conecta o seu pendrive na porta USB, o GNOME executa o comando "gnome-mount" com alguns parâmetros de entrada para realizar a montagem de forma automárica. A idéia então é substituir o aplicativo gnome-mount pelo nosso script e assim executar os comandos necessários para a sincronização dos dados.
Resumindo, o que este script faz:
- A sincronização dos dados é realizado sempre que o pendrive é montado ou desmontado pelo sistema do GNOME (Nautilus);
- Apenas um único usuário terá permissão de realizar o backup;
- Com a utilização do UUID da partição do pendrive podemos identificar de forma única o pendrive que queremos sincronizar os dados. Ou seja, se você conectar o pendrive de um amigo no seu computador, não será realizada a sincronização;
Vamos aos passos:
- Renomeie o arquivo /usr/bin/gnome-mount para /usr/bin/gnome-mount-orig;
- Dê permissão de sudo sem senha no comando /sbin/vol_id para o usuário que fará o backup do pendrive. Para isso insira a linha "usuario ALL=NOPASSWD: /sbin/vol_id" no arquivo /etc/sudoers;
- Conecte o pendrive que você deseja fazer o backup. Obtenha o UUID da partição dele com o comando "sudo vol_id --uuid /dev/particao_do_pendrive"
- Com acesso de root, crie o arquivo /usr/bin/gnome-mount (com permissão de execução) e insira o seguinte script, alterando o valor das variáveis conforme solicitado:
#!/bin/bash # Autor: André Proto # Distribuicao livre # # Defina abaixo as seguintes variaveis: # - CMD: comando original do sistema para montagem de dispositivos # - UUID: UUID da particao do Pendrive # - USER: usuario que tera permissao para realizar backup # - DEST: diretorio de destino do backup # - LOGFILE: arquivo de log CMD="/usr/bin/gnome-mount-orig" UUID="UUID-UUID" USER="user" DEST="/home/${USER}/pendrive/" LOGDIR="/var/log/backup_pendrive.log" DEVICE="$@" DEVICE=${DEVICE##* } U=`echo "$@" | grep 'u '` if [ -z "$U" ]; then $CMD $@ fi MYUSER=`whoami` MNTDIR=`mount | grep $DEVICE | awk '{ print $3 }' | head -1` if [ "$MYUSER" = "$USER" ]; then UUID_DEV=`sudo /sbin/vol_id --uuid $DEVICE` if [ "$UUID_DEV" = "$UUID" ]; then rsync -av --delete "${MNTDIR}/" "${DEST}" >> ${LOGFILE} 2>&1 fi fi if [ ! -z "$U" ]; then $CMD $@ fi
Observações:
- Note que é necessário dar permissão de escrita para o usuário que fará o backup no arquivo de log indicado no script.
- Caso você use o KDE ou monte seus dispositivos pelo terminal, talvez a substituição do comando /bin/mount por este script possa ter o mesmo efeito (não testado).
- Caso você formate o seu pendrive por algum motivo, será necessário atualizar o valor da variável UUID.