Backup de pasta agendada

1

Estou procurando como fazer backup automaticamente do diretório pessoal de um usuário no CentOS 7 para um host remoto ou NAS ou apenas para ~ / .snapshot. Em algumas configurações do Linux, vi uma pasta .snapshot no diretório pessoal do usuário (~ / .snapshot /) que contém backups por hora, todas as noites e semanalmente de seu diretório pessoal (ou seja, ~ / .snapshot / weekly1 para uma cópia do que estava no diretório home do usuário há 1 semana).

O diretório /home/username/.snapshot/ seria somente leitura pelo usuário. Não é um backup para proteger contra falhas de hardware. É legal ter a capacidade de recuperar um arquivo de ontem ou esta manhã se você não gostar das alterações feitas.

Já vi vários posts relacionados sobre o estouro de pilha, mas até agora não vi um guia que explica o fluxo de trabalho completo.

Isso é o que eu sei até agora:

  1. Use rsync para copiar o conteúdo de uma determinada pasta para o host remoto, NAS ou (~ / .snapshot / hourly0)
  2. Crie um script de shell para executar o comando rsync

#!/bin/bash sudo rsync -av --progress --delete --log-file=/home/username/$(date +%Y%m%d)_rsync.log --exclude "/home/username/.snapshot" /home/username/ /home/username/.snapshot/hourly1

  1. Altere as permissões no script para torná-lo executável

sudo chmod +x /home/username/myscript.sh

  1. Use crontab para agendar o comando rsync no intervalo de backup desejado

  2. De alguma forma, mova hourly0 para hourly1 antes de executar o rsync horário agendado

  3. Exclua o backup mais antigo quando o rsync for concluído com êxito

Existem guias que descrevam como fazer isso? Não entendo como renomear automaticamente as pastas à medida que o tempo passa (por exemplo, semanal1 a semanal2) ou como excluir "semana10" se eu decidir manter semanas até 9. Esta é outra tarefa cron ?

Atualização: depois de mais algumas pesquisas no Google, descobri que a NetApp cria as pastas de instantâneos. Eu atualmente não tenho um NAS da NetApp. link

    
por Seth 18.09.2018 / 20:15

1 resposta

3

Que tal este guia:

1) crie seu script: crie um novo arquivo e chame-o de myrsync.sh , copie / cole as linhas abaixo:

  #!/bin/bash
    sudo rsync -av --progress --delete --log-file=/home/your-username/Desktop/$(date +%Y%m%d)_rsync.log --exclude "/home/your-username/.folder" /home/data /media/dataBackup_$(date +%Y%m%d_%T)

Significado das bandeiras:

 -av bit: 'a' means archive, or copy everything recursively, preserving things like permissions, ownership and time stamps. 
  -'v' is verbose, so it tells you what its doing, either in the terminal, in this case, in the log file.
  --progress gives you more specific info about progress.
  --delete checks for changes between source and destination, and deletes any files at the destination that you've deleted at the source.
  --log-file saves a copy of the rsync result to a date-stamped file on my desktop.
  --exclude leaves out any files or directories you don't want copied. In the command above, the .folder directory

  /home/data is the directory I want copied. /home/data copies the directory and its contents, /home/data would just copy the contents. 

  /media/dataBackup_$(date +%Y%m%d_%T) is the separate drive. Change this to whatever your backup location is. Note that 'rsync' will name every sync differently based on day/time of sync

2) Salve myrsync.sh em seu ~ $ HOME e torne-o executável digitando:

sudo chmod +x /home/your-username/Desktop/rsync-shell.sh

Agora, você pode clicar duas vezes nesse arquivo .sh, escolher Executar no Terminal, ele solicitará sua senha e executará e, em seguida, deixará um arquivo de log em sua área de trabalho. Ou você pode fazer um cron job para fazer isso por você!

3) O cron job

Copie o arquivo myrsync.sh para / root digitando:

sudo cp /home/your-username/Desktop/myrsync.sh /root

Em seguida, digite:

sudo crontab -e

Você verá uma linha com o seguinte comando: minuto hora dia mês ano

Abaixo disso, digite: 0 22 * * * /root/myrsync.sh > $ HOME / readme.log 2 > & 1

Isso significa:

The hour in military time (24 hour) format (0 to 23)
The day of the month (1 to 31)
The month (1 to 12)
The day of the week(0 or 7 is Sun, or use name)
The command to run
So at 22:00 (10pm) every day root will run the shell script, without prompting you for sudo password (because its running as root already).

Agora pressione Control-X, digite "Y" e pressione Enter

Para excluir backups mais antigos, uma maneira de fazer isso é criar um arquivo com o registro de data e hora de cada sincronização nele. Por exemplo, adicione o seguinte comando após o comando rsync in myrsync.sh

date +%Y%m%d_%T >> time.txt

Use o comando find para excluir backups que correspondam ao registro de data e hora, por exemplo: adicione este comando após o date +%Y%m%d_%T >> time.txt in myrsync.sh

find . -type f ! -newer /tmp/timestamp -delete

Ou

find . ! -newermt $date ! -type d -delete

Isso excluirá as cópias de segurança antes de uma data / hora específica.

Mais detalhes e exemplos de códigos para backups por hora / diários / mensais podem ser encontrados aqui

    
por 18.09.2018 / 20:28