Ссылки:
1 |
https://borgbackup.readthedocs.io/en/stable/deployment/automated-local.html |
Начало:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
Ставим: Если Debian: apt install borg или если Arch: pacman -Sy borg Создадим структуру каталогов на сервере: !!! Нужный диск уже должен быть при монтирован mkdir /mnt/backups/ Создаем репозиторий: borg init --encryption=repokey /mnt/backup/borgbackup Тыкаемся в репозиторий: borg info /mnt/backups/home/ - смотрим информацию об репозитории home borg create /mnt/backups/Myrepo::xxx /home - пробуем выполнить архивацию borg create /Куда/делаем/архив::Имя_архива /что/архивируем borg info /mnt/backups/Myrepo - смотрим информацию об репозитории home borg list /mnt/backups/Myrepo - смотрим какие у нас есть архивы borg mount -o users borg@backup.foo:<репозиторий>::<имя бекапа> <точка монтирования> - монтируем бекап с помощью механизма FUSE borg umount <точка монтирования> - отмонтируем командой |
Дефолтный скрипт для бэкапа и монтирования диска и очистки:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 |
0. Узнаем UUID диска например так blkid 1. Записываем его сюда: cat UUID > /root/backup.disks 2. Создаем скрипт для бэкапа cat > /root/backup.borg.sh << "EOF" #!/bin/bash -ue sleep 5 # Config MOUNTPOINT=/mnt/backup TARGET=$MOUNTPOINT/borgbackup DATE=$(date --iso-8601)-$(hostname) DISKS=/root/backup.disks # Find whether the connected block device is a backup drive for uuid in $(lsblk --noheadings --list --output uuid) do if grep --quiet --fixed-strings $uuid $DISKS; then break fi uuid= done if [ ! $uuid ]; then echo "No backup disk found, exiting" exit 0 fi echo "Disk $uuid is a backup disk" partition_path=/dev/disk/by-uuid/$uuid # Mount file system if not already done. This assumes that if something is already # mounted at $MOUNTPOINT, it is the backup drive. It won't find the drive if # it was mounted somewhere else. (mount | grep $MOUNTPOINT) || mount $partition_path $MOUNTPOINT drive=$(lsblk --inverse --noheadings --list --paths --output name $partition_path | head --lines 1) echo "Drive path: $drive" # # Create backups # # Options for borg create BORG_OPTS="--stats --one-file-system --compression lz4 --checkpoint-interval 86400" export BORG_PASSPHRASE=ВАШ_ПАРОЛЬ_ОТ_РЕПЫ_СЮДА export BORG_RELOCATED_REPO_ACCESS_IS_OK=no export BORG_UNKNOWN_UNENCRYPTED_REPO_ACCESS_IS_OK=no # Log Borg version borg --version echo "Starting backup for $DATE" borg create $BORG_OPTS \ --exclude root/.cache \ --exclude var/lib/docker/devicemapper \ --exclude '/home/*/.cache/*' \ --exclude '/var/tmp/*' \ $TARGET::$DATE-$$-system \ /etc \ /home \ /root \ /var \ /boot \ echo "Completed backup for $DATE" # Just to be completely paranoid sync if [ -f /etc/backups/autoeject ]; then umount $MOUNTPOINT hdparm -Y $drive fi if [ -f /etc/backups/backup-suspend ]; then systemctl suspend fi # Cleaner borg prune --force -v --list --keep-daily 10 \ --keep-weekly 4 \ --keep-monthly 1 \ ${TARGET} EOF |
Systemd service and timer
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
cat > /etc/systemd/system/backupborg.service << EOF [Unit] Description=backupborg [Service] Type=oneshot ExecStart=/root/backup.borg.sh Restart=on-failure [Install] WantedBy=multi-user.target EOF cat > /etc/systemd/system/backupborg.timer << "EOF" [Unit] Description=backupborg [Timer] OnCalendar=02:00:00 [Install] WantedBy=timers.target EOF systemctl daemon-reload systemctl enable backupborg.service systemctl enable backupborg.timer |