Solução da comunidade

Crie cópias de segurança rsync agendadas e à prova de reinícios no ZimaOS com o Ofelia

A user moved weekly AppData and NAS backup scheduling into a persistent Portainer stack using Ofelia, rsync, and scripts stored on RAID storage.

O agendamento necessário para viver com um estado persistente do Docker

O autor queria cópias semanais dos dados da aplicação para um conjunto RAID 1 e uma segunda cópia desse conjunto para um disco USB continuamente ligado. O crontab do sistema e uma aplicação de agendamento da comunidade não mantinham as tarefas de forma fiável após um reinício, por isso transferiu o agendamento para uma stack Ofelia gerida pelo Portainer, armazenada nos dados persistentes do ZimaOS.

O design resultante separou três camadas: scripts de shell no armazenamento RAID, um contentor Ofelia que fornecia o agendamento e contentores rsync de curta duração que executavam cada cópia.

Armazenar scripts e registos no armazenamento persistente

O exemplo colocava os scripts num caminho como /media/RAID1/scripts. Esse diretório era montado com acesso de leitura e escrita no agendador como /scripts. Os registos eram escritos junto aos scripts, para poderem ser consultados através de Ficheiros ou de uma partilha de rede após a conclusão da tarefa.

Cada caminho do exemplo é específico da instalação. Copiar o nome do RAID do autor sem verificar o caminho de montagem real pode enviar uma cópia de segurança para o local errado ou fazer com que a tarefa falhe silenciosamente.

A Ofelia fornecia um agendamento persistente após reinícios

A stack do Portainer utilizava a imagem Ofelia, definia restart: always, montava o diretório dos scripts e armazenava as etiquetas de agendamento no contentor. O exemplo agendava os dados da aplicação para as 23:30 de todos os domingos e os dados gerais do NAS para as 23:45.

ofelia.job-local.appdata.schedule: "0 30 23 * * 0"
ofelia.job-local.appdata.command: "/bin/sh /scripts/backup_appdata.sh"
ofelia.job-local.nas_home.schedule: "0 45 23 * * 0"
ofelia.job-local.nas_home.command: "/bin/sh /scripts/backup_nas_home.sh"

O autor relatou que o agendador e as respetivas tarefas voltavam a estar disponíveis cerca de um minuto após o reinício, sem ser necessária outra sessão SSH.

O script dos dados da aplicação parava o Plex antes da cópia

Para reduzir a possibilidade de copiar uma base de dados do Plex que estivesse a ser alterada, o script parava o Plex, executava o rsync a partir de uma montagem de origem dos dados da aplicação apenas para leitura e reiniciava o Plex depois. O contentor do agendador instalava um cliente Docker quando necessário e controlava contentores vizinhos através do socket do Docker.

A montagem de /var/run/docker.sock dá ao agendador um controlo abrangente sobre o anfitrião Docker. Executá-lo como root e com privilégios elevados aumenta ainda mais essa autoridade. O tópico apresenta isto como o design funcional do autor, não como um modelo de segurança baseado no princípio do menor privilégio.

rsync --delete cria um espelho exato, não um histórico versionado

O exemplo utilizava rsync -avH --delete. A opção --delete remove os ficheiros de destino que já não existem na origem. Isto produz um espelho exato, mas também pode replicar uma eliminação ou corrupção acidental.

Comece por testar sem a eliminação, confirme as montagens de origem e destino e consulte o registo antes de ativar um agendamento não supervisionado. Um espelho num disco USB sempre ligado também não equivale a uma cópia de segurança offline ou imutável.

A persistência após reinícios não resolveu a reconexão do USB

O autor pediu separadamente que um disco USB ligado deixasse de aparecer como um disco novo após o reinício. A Ofelia preserva a configuração da tarefa, mas uma montagem alterada ou indisponível pode continuar a interromper o destino da cópia de segurança. A identificação estável do armazenamento e a verificação das montagens antes de executar o rsync continuam a ser requisitos distintos.

FAQ

Porque é que este agendamento sobreviveu ao reinício?

As definições das tarefas estavam numa stack do Portainer configurada para reiniciar, e os scripts estavam armazenados num local persistente, em vez de ficarem num crontab efémero do sistema.

Isto cria versões históricas das cópias de segurança?

Não. O comando rsync documentado cria um espelho e utiliza --delete. A retenção de versões requer um design diferente.

Porque é que o Plex era parado antes de copiar os dados da aplicação?

O autor fazia isso para reduzir o risco de copiar a respetiva base de dados enquanto estava a ser modificada.