Fala galera, tudo bom com vocês? Espero que sim, tem um tempinho que não escrevo nada aqui, mas não me levem a mal, não está fácil a vida e creio que a de vocês também não está. Mas aqui estamos, e aproveitando este momento que estamos vivendo, resolvi documentar uma ideia que realmente para mim foi muito bacana, trata-se de um backup automatizado em HD Externo utilizando Linux. “Plugou, backapeou!!!! rs”.
Mas como assim Rafa, de onde tirou essa ideia?
Certo dia estava eu realizando configurações em um QNAP de um cliente e percebi uma funcionalidade que achei fantástica, a possibilidade de fazer backup automático. Simplesmente você espeta o HD externo e o backup já começa a ser realizado, ainda com a possibilidade de enviar logs via skype, sem nenhuma interação humana. Não é D+? Eu pelo menos achei.
Vendo toda essa funcionalidade, pensei. Porque não implantar isso em servidores de repositório Linux que tenham a necessidade de copiar informações para um HD Externo diariamente. Ou então ajudar aquele amigo que gostaria de fazer um backup de seus dados do Linux, mas a preguiça de simplesmente copiar as informações para um HD Externo lhe impede. rs
Neste artigo iremos tratar a possibilidade de realizar backups automatizados copiando de um repositório de backup Linux Debian para um HD Externo, totalmente automatizado, utilizando Udev, SystemD, Telegram Bot, Rsync e Script Shell, simples assim, modo raiz. Irei demostrar aqui como realizar um backup automatizado, onde o backup começará assim que o HD Externo for plugado no repositório, gerando logs e encaminhando notificações via Telegram! E ai, o que achou? Topzera não?
Depois da uma moral ai, escreve nos comentários o que achou, curta e compartilhe. Intuito aqui é sempre dividir conhecimento e crescer juntos, além disso gosto de documentar as coisas, isso ajuda o tio aqui no futuro! Não sou HD para ficar armazenando informação. E que atirem a primeira pedra quem nunca esqueceu de algo. hahaha. Bricadeiras a parte, bora começar.
Considerações
Como sempre tento trazer um conteúdo mais técnico então espero que já tenha familiaridade com os termos aqui tratados, além de já viver Linux. O papo aqui é de SysAdmin para SysAdmin fechou?
1) O que é UDEV.
Informação: O udev (userspace /dev) é um gerenciador de dispositivo para o núcleo do Linux. Como o sucessor do devfsd e hotplug, o udev primeiramente gerencia nós de dispositivo no diretório /dev. Ao mesmo tempo, o udev também manipula todos os eventos de espaço de usuário lançados quando dispositivos de hardware são adicionados no sistema ou removidos dele, incluindo carga de firmware, como requerido por certos dispositivos. Fonte: (wikipedia)
Vamos ter que realizar a configuração de uma regra UDEV para chamar nosso HD Externo e assim realizar o backup, mas para isso precisamos aprender a identificar nossas unidades através do UDEV.
2) Monitorando e identificando dispositivos com UDEV.
O udev possui alguns comandos bacanas, mais o principal deles sem dúvidas é o udevadm, este comando é utilizado para controlar o comportamento de execução em tempo real do UDEV. Experimente utilizar o comando udevadm monitor para monitorar os dispositivos plugados em seu sistema Linux.
Como estamos utilizando um servidor de repositório Linux com Debian 10, e já sabemos que nosso hd-externo está referenciado no sistema como /dev/sdc1, vamos utilizar o comando abaixo para obter mais informações:
OBS: No seu Linux a nomenclatura pode ser diferente, utiliza também o comando fdisk -l para identificar a nomenclatura de seu disco.
sudo udevadm info --query=all --name=/dev/sdc1
sudo udevadm info --atribute-walk --name=/dev/sdc1
Observe os dois comandos acima, eles trazem muitas informações preciosas, iremos utilizar estes comandos para identificar atributos de nossa unidade externa.
3) Criando regras para UDEV.
Agora que temos como obter várias informações de nossa unidade externa, vamos criar uma nova regra UDEV. Para isso, acesse o diretório /etc/udev/rules.d/.
É importante lembra que este arquivo precisa obedecer a uma nomenclatura: (Identificação da ordem de execução, nome da regra e por fim a identificação do tipo do arquivo que deverá ser .rules).
Exemplo de arquivo de regra: zz-hdexterno.rules
Vamos criar e editar o arquivo:
sudo vim /etc/udev/rules.d/zz-hdexterno.rules
Com o arquivo aberto vamos utilizar os seguintes argumentos retirados de nossa consulta realizada no item 1 deste artigo:
ACTION=="add", KERNEL=="sd?1", SUBSYSTEMS=="usb", ATTRS{serial}=="NA82X455", SYMLINK+="hd-externo", ENV{UDISKS_IGNORE}="1", RUN+="/bin/sh -c 'systemctl start bkpraff.service'"
Repare que em nosso arquivo utilizamos alguns argumentos.
ACTION: Nesta argumento é definida a ação que está sendo feita com o dispositivo. “add” ou “remove”, que significa conectar ou desconectar o dispositivo.
KERNEL: Corresponde ao nome do dispositivo no kernel.
SUBSYSTEMS: Tipo de dispositivo, no nosso caso usb.
ATTRS: Atributos do dispositivo. São vários, em nosso caso utilizaremos o serial para fazer distinção do disco.
SYMLINK: Define um link simbólico para o dispositivo.
ENV: Atribui uma variável de ambiente qualquer. No nosso caso estamos ignorando a ação do utilitário udisks.
RUN: Atribui uma lista de programas a serem executados pelo dispositivo sendo ele conectado ou removido. No nosso caso estamos chamando uma target do SystemD chamada bkpraff.service.
Configurado nosso regra UDEV, salve e saia.
Pronto nossa regra está criada, porém agora precisamos trabalhar um pouco mais com SystemD, repare que nosso script esta chamando uma target, ela será responsável por chamar nosso script de backup e fazer a mágica acontecer. Mas isso iremos ver em um próximo artigo.
CONCLUSÃO
Através deste artigo foi possível demonstrar de maneira rápida e intuitiva a criação de regras de UDEV para identificação automática de dispositivos. Este artigo faz parte de uma série de 3, onde explico passo a passo como automatizar backups no Linux.
Se você gostou deste post e através dele pude lhe ajudar, o que acha de aproximarmos nosso contato? Siga meu blog, twitter e me adicione no Linkedin, aproveite para classificar algumas das minhas competências/recomendações, este simples gesto faz toda a diferença.
Att,
Rafael Oliveira
SysAdmin