This commit is contained in:
DoTheEvo 2023-01-24 08:52:43 +01:00
parent d8bb91ae52
commit 2938bad945
2 changed files with 94 additions and 35 deletions

View File

@ -19,78 +19,126 @@ Kopia is an open source backup utility with basicly all modern features.</br>
Cross-platform, deduplication, encryption, compression, multithreaded speed, Cross-platform, deduplication, encryption, compression, multithreaded speed,
cloud storage support, CLI and GUI versions, snapshots mounting,... cloud storage support, CLI and GUI versions, snapshots mounting,...
Written in golang, Written in golang.
In this setup kopia cli is installed directly on the host system.</br> In this setup kopia cli is installed directly on the host system.</br>
A script is created that backs up the entire docker directory and /etc locally.</br> A script is created that backs up the entire docker directory and /etc locally.</br>
Cronjob is set to execute this script daily. Systemd service and timer are used to run the backup periodicly.
The repository is also pruned on each run of the script - # Some aspects of Kopia
old archives are deleted while keeping the ones fitting the retention rules
in the script.</br> * backup configuration is stored in a repository where backups will be stored<br>
One backup per day for last 7 days, last 4 weeks, last 6 months are kept. this includes global policy, that is global in sense of repo, not all of kopia
* you connect and disconnect from a repository before working with it,<br>
only one repository can be connected at time
* currently to ignore some folders, one can create `CACHEDIR.TAG` with specific
[content](https://bford.info/cachedir/) and set policy: `--ignore-cache-dirs true`
* Maintence is automatic
* ..
# Files and directory structure # Files and directory structure
``` ```
/home/ /home/
├── ~/ │ └── ~/
│ └── docker/ └── docker/
│ ├── container-setup #2 ├── container-setup #2
│ ├── container-setup #1 ├── container-setup #1
│ ├── ... ├── ...
/mnt/ /mnt/
└── mirror/ │ └── mirror/
└── docker_host_kopia/ │ └── KOPIA/
│ └── arch_docker_host/
/opt/
└── kopia-backup-home-etc.sh
``` ```
* `docker_backup/` - borg repository directory containg the backups
* `borg_backup.sh` - the backup script that adds new archive in to the repository
* `borg_backup.log` - log file with the dates of backups
Only `borg_backup.sh` has to be provided.</br>
Repo directory is created by `borg init` command
and the log file is created on the first run.
# The setup # The setup
#### Install kopia #### install kopia
for arch linux, kopia is on AUR `yay kopia-bin` for arch linux, kopia is on AUR `yay kopia-bin`
#### Backing up using kopia #### repo creation and policy
use of sudo so that kopia has access everywhere<br> use of sudo so that kopia has access everywhere<br>
config files are therefore in `/root/config/kopia` config files are therefore in `/root/config/kopia`
- `mkdir /mnt/mirror/docker_host_kopia`</br> - `sudo kopia policy get --global`
- `sudo kopia repository create filesystem --path /mnt/mirror/docker_host_kopia`<br> - `sudo kopia policy list`
- `sudo kopia repository connect filesystem --path /mnt/mirror/docker_host_kopia`<br> - `sudo kopia policy set --global --ignore-cache-dirs true --keep-annual 1 --keep-monthly 6 --keep-weekly 4 --keep-daily 14 --keep-hourly 0 --keep-latest 14`
- `sudo kopia snapshot create /home/spravca/docker`<br>
- `mkdir -p /mnt/mirror/KOPIA/docker_host_kopia`</br>
- `sudo kopia repository create filesystem --path /mnt/mirror/KOPIA/docker_host_kopia`<br>
- `sudo kopia repository connect filesystem --path /mnt/mirror/KOPIA/docker_host_kopia`<br>
- `sudo kopia repository status`
- `sudo kopia snapshot create /home/spravca/docker /etc`<br>
- `sudo kopia snapshot list`<br> - `sudo kopia snapshot list`<br>
- `sudo kopia mount k7e2b0a503edd7604ff61c68655cd5ad7 /mnt/tmp &`<br> - `sudo kopia mount k7e2b0a503edd7604ff61c68655cd5ad7 /mnt/tmp &`<br>
- `sudo umount /mnt/tmp`<br> - `sudo umount /mnt/tmp`<br>
#### the backup script
#### The backup script `/opt/kopia-backup-home-etc.sh`
```
#!/bin/bash
#sudo kopia policy set --global --keep-annual 1 --keep-monthly 6 --keep-weekly 4 --keep-daily 14 --keep-hourly 0 --keep-latest 14
REPOSITORY_PATH='/mnt/mirror/KOPIA/docker_host_kopia'
BACKUP_THIS='/home /etc'
export KOPIA_PASSWORD='aaa'
kopia repository connect filesystem --path $REPOSITORY_PATH
kopia snapshot create $BACKUP_THIS
kopia repository disconnect
```
### Manual run ### Automatic execution using systemd
### Automatic execution
# Accessing the backup files # Accessing the backup files
# Extra info
# Mounting using systemd
* the name of mount and automount files MUST correspond with the path<br>
instead of `/` a `-` is used, but otherwise it must be the mounting path in name
* for mounting that does not fail on boot, and mounts the target only on request
enable automount file, not mount file, so:<br>
`sudo systemctl enable mnt-mirror.automount`
`mnt-mirror.mount`
```ini
[Unit]
Description=3TB truenas mirror mount
[Mount]
What=//10.0.19.11/Mirror
Where=/mnt/mirror
Type=cifs
Options=rw,username=kopia,password=aaa,file_mode=0644,dir_mode=0755,uid=1000,gid=1000
[Install]
WantedBy=multi-user.target
```
`mnt-mirror.automount`
```ini
[Unit]
Description=3TB truenas mirror mount
[Automount]
Where=/mnt/mirror
[Install]
WantedBy=multi-user.target
```
# Remote backup # Remote backup

11
kopia_backup/script Normal file
View File

@ -0,0 +1,11 @@
#!/bin/bash
#sudo kopia policy set --global --ignore-cache-dirs true --keep-annual 1 --keep-monthly 6 --keep-weekly 4 --keep-daily 14 --keep-hourly 0 --keep-latest 14
REPOSITORY_PATH='/mnt/mirror/KOPIA/docker_host_kopia'
BACKUP_THIS='/home /etc'
export KOPIA_PASSWORD='aaa'
kopia repository connect filesystem --path $REPOSITORY_PATH
kopia snapshot create $BACKUP_THIS
kopia repository disconnect