Backup no escuro no Linux
Um dos maiores trunfos do Linux é podermos usar instalações realmente pequenas para funções específicas. Tratarei aqui de um mecanismo de backup automático, sem intervenção do usuário: ao plugar um HDD externo, o mesmo será montado, uma pasta será copiada com o
Identifique o dispositivo onde será feito o backup:
Crie a regra para o udev:
Rode
Crie o serviço:
Rode
Quando o udev detectar um dispositivo com rótulo e sistema de arquivos especificados na regra, fará o systemd rodar, neste exemplo, o serviço
Adapte o comando
Discos externos desligam o LED (ou fazem-o piscar mais lentamente) quando a porta é desconectada. Por outro lado, com gavetas marca diabo com a minha, depende do modelo. Esta aqui felizmente desliga.
Este post, numa encarnação anterior, foi publicado em 2012. Contudo, estava muito confuso.
[1] Distribuições sem systemd não me interessam.
rsync
e, por fim, o disco será desmontado e desconectado. A distribuição usada é o openSUSE Leap 15.2, porém pode ser adaptado para qualquer outra[1].Identifique o dispositivo onde será feito o backup:
# blkid /dev/sdb1 /dev/sdb1: LABEL="BACKUP123" UUID="xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" TYPE="ext4" PARTUUID="xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
Crie a regra para o udev:
/etc/udev/rules.d/99-hdd-externo.rules
ACTION=="add", SUBSYSTEM=="block", ENV{ID_FS_TYPE}=="ext4", ENV{ID_FS_LABEL}=="BACKUP123", TAG+="systemd", ENV{UDISKS_IGNORE}="1", ENV{SYSTEMD_WANTS}+="meubackup@%N.service"
ENV{UDISKS_IGNORE}="1"
é para evitar que o ferramental da pilha gráfica, caso presente, interfira no backup. Usei uma regra que filtra pelo rótulo e tipo de sistema de arquivos. Você pode usar UUID se quiser (ENV{ID_FS_UUID}
), ou qualquer outra característica fornecida pelo udev (udevadm info --query=property /dev/sdb1
).Rode
udevadm control --reload
.Crie o serviço:
/etc/systemd/system/meubackup@.service
[Unit] Description=Faz backup para HDD externo (%I) [Service] Type=oneshot ExecStart=/usr/bin/mount -v -o X-mount.mkdir %I /mnt/backup ExecStart=-/usr/bin/rsync -ah --stats --update /srv/dados/ /mnt/backup ExecStart=/usr/bin/umount -v /mnt/backup ExecStart=/usr/local/bin/rmusbbdev %I
Rode
systemctl daemon-reload
.Quando o udev detectar um dispositivo com rótulo e sistema de arquivos especificados na regra, fará o systemd rodar, neste exemplo, o serviço
meubackup@-dev-sdb1.service
. Dentro do arquivo de unidade, o identificador %I
é o nome usado pelo udev (%N
, dispositivo em /dev
). O serviço é do tipo oneshot
para os comandos de ExecStart=
serem executados serialmente. O primeiro monta o sistema de arquivos, o segundo roda o rsync
(prefixo -
significa que, caso termine com erro, será ignorado), o terceiro desmonta e o último é meu programinha para desconectar a porta USB.Adapte o comando
rsync
à vontade (especialmente o diretório de origem). stdout e stderr vão para o journal, assim fica registrado o que foi feito:kernel: usb 2-1.1: new high-speed USB device number 5 using ehci-pci kernel: usb 2-1.1: New USB device found, idVendor=174c, idProduct=5106, bcdDevice= 0.01 kernel: usb 2-1.1: New USB device strings: Mfr=2, Product=3, SerialNumber=1 kernel: usb 2-1.1: Product: AS2105 kernel: usb 2-1.1: Manufacturer: ASMedia kernel: usb 2-1.1: SerialNumber: S2ZAJ5ADA04249 kernel: usb-storage 2-1.1:1.0: USB Mass Storage device detected kernel: scsi host4: usb-storage 2-1.1:1.0 kernel: scsi 4:0:0:0: Direct-Access ST500LM0 12 HN-M500MBB 2AR2 PQ: 0 ANSI: 5 kernel: sd 4:0:0:0: Attached scsi generic sg2 type 0 kernel: sd 4:0:0:0: [sdb] 976773168 512-byte logical blocks: (500 GB/466 GiB) kernel: sd 4:0:0:0: [sdb] Write Protect is off kernel: sd 4:0:0:0: [sdb] Mode Sense: 23 00 00 00 kernel: sd 4:0:0:0: [sdb] No Caching mode page found kernel: sd 4:0:0:0: [sdb] Assuming drive cache: write through kernel: sdb: sdb1 kernel: sd 4:0:0:0: [sdb] Attached SCSI disk systemd[1]: Starting Faz backup para HDD externo (/dev/sdb1)... kernel: EXT4-fs (sdb1): mounted filesystem with ordered data mode. Opts: (null) mount[13162]: mount: /dev/sdb1 montada em /mnt/backup. rsync[13166]: Number of files: 19 (reg: 18, dir: 1) rsync[13166]: Number of created files: 0 rsync[13166]: Number of deleted files: 0 rsync[13166]: Number of regular files transferred: 0 rsync[13166]: Total file size: 6.53M bytes rsync[13166]: Total transferred file size: 0 bytes rsync[13166]: Literal data: 0 bytes rsync[13166]: Matched data: 0 bytes rsync[13166]: File list size: 0 rsync[13166]: File list generation time: 0.001 seconds rsync[13166]: File list transfer time: 0.000 seconds rsync[13166]: Total bytes sent: 325 rsync[13166]: Total bytes received: 12 rsync[13166]: sent 325 bytes received 12 bytes 674.00 bytes/sec rsync[13166]: total size is 6.53M speedup is 19,387.40 umount[13169]: umount: /mnt/backup desmontado rmusbbdev[13170]: Desconectando porta USB 2-1.1... sucesso. systemd[1]: Started Faz backup para HDD externo (/dev/sdb1). kernel: usb 2-1.1: USB disconnect, device number 5
Discos externos desligam o LED (ou fazem-o piscar mais lentamente) quando a porta é desconectada. Por outro lado, com gavetas marca diabo com a minha, depende do modelo. Esta aqui felizmente desliga.
Este post, numa encarnação anterior, foi publicado em 2012. Contudo, estava muito confuso.
[1] Distribuições sem systemd não me interessam.
Dica sensacional, parabéns.
ResponderExcluirPergunta fora do contexto:
ResponderExcluirSabe onde posso encontrar o fsarchiver versão 0.86 em binário estático?
Eu compilei a versão mas como apareceram algumas advertências que não sei avaliar durante a compilação fiquei inseguro em usar.
Antigamente, havia um binário estático no site. Acho que não é mais disponibilizado. Provavelmente os avisos que apareceram não são críticos.
ExcluirMarcos, obrigado pelo retorno.
Excluir