# Kopia ###### guide-by-example ![logo](https://i.imgur.com/A2mosM6.png) WORK IN PROGRESS
WORK IN PROGRESS
WORK IN PROGRESS
# Purpose & Overview Backups. * [Official site](https://kopia.io/) * [Github](https://github.com/kopia/kopia) Kopia is an open source backup utility with basicly all modern features.
Cross-platform, deduplication, encryption, compression, multithreaded speed, cloud storage support, CLI and GUI versions, snapshots mounting,... Written in golang. In this setup kopia cli is installed directly on the host system.
A script is created that backs up the entire docker directory and /etc locally.
Systemd service and timer are used to run the backup periodicly. # Some aspects of Kopia * backup configuration is stored in a repository where backups will be stored
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,
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 ``` /home/ │ └── ~/ │ └── docker/ │ ├── container-setup #2 │ ├── container-setup #1 │ ├── ... │ /mnt/ │ └── mirror/ │ └── KOPIA/ │ └── arch_docker_host/ │ /opt/ └── kopia-backup-home-etc.sh ``` # The setup #### install kopia for arch linux, kopia is on AUR `yay kopia-bin` #### repo creation and policy use of sudo so that kopia has access everywhere
config files are therefore in `/root/config/kopia` - `sudo kopia policy get --global` - `sudo kopia policy list` - `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` - `mkdir -p /mnt/mirror/KOPIA/docker_host_kopia`
- `sudo kopia repository create filesystem --path /mnt/mirror/KOPIA/docker_host_kopia`
- `sudo kopia repository connect filesystem --path /mnt/mirror/KOPIA/docker_host_kopia`
- `sudo kopia repository status` - `sudo kopia snapshot create /home/spravca/docker /etc`
- `sudo kopia snapshot list`
- `sudo kopia mount k7e2b0a503edd7604ff61c68655cd5ad7 /mnt/tmp &`
- `sudo umount /mnt/tmp`
#### 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 ``` ### Automatic execution using systemd # Accessing the backup files # Mounting using systemd * the name of mount and automount files MUST correspond with the path
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:
`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