Files
2026-03-09 21:52:01 +01:00

139 lines
3.7 KiB
Markdown

# Backups
Backups should be checked now and then. Some common tasks are listed below.
You'll have to get the correct username from the vault.
## Fetching the borg keys for local storage
- Make sure you have all the GPG keys **at least** locally signed
- Run the `playbooks/tasks/fetch-borg-keys.yml` playbook
- Make sure the playbook runs successfully and check the keys under the
borg-keys directory
## Accessing backup hosts
We use two different borg backup hosts: A primary one and an offsite one.
The URL format for the primary one is
```
ssh://u236610@u236610.your-storagebox.de:23/~/backup/<hostname>/repo
```
while for the offsite one it's
```
ssh://zh1905@zh1905.rsync.net:22/~/backup/<hostname>
```
In the examples below, we'll just abbreviate the full address as `<backup_address>`.
If you want to use one of the examples below, you'll have to fill in the
placeholder with your desired full address to the backup repository. For instance,
```
misc/borg.sh list <backup_address>
```
becomes
```
misc/borg.sh list ssh://u236610@u236610.your-storagebox.de:23/~/backup/homedir.archlinux.org/repo
```
A convenience wrapper script is available at `misc/borg.sh` which makes sure you
use the correct keyfile for the given server.
## Listing backups in repository
This allows you to check which backups are currently available for the given server:
```
misc/borg.sh list <backup_address>
```
## Listing files in a specific backup
Once you figured out which backup you want to use, you can list the files inside via:
```
misc/borg.sh list <backup_address>::<archive_name>
```
## Getting info for a repository
Check how large all backups for a server are:
```
misc/borg.sh info <backup_address>
```
## Getting info for a specific backup
Check how large a single backup is and how long it took to perform:
```
misc/borg.sh info <backup_address>::<archive_name>
```
## Mounting a backup
One convenient way to access the files inside an archive is to mount it:
```
mkdir mnt
misc/borg.sh mount <backup_address>::<archive_name> mnt
```
You might want to mount it with `-o ignore_permissions` depending on which user
you're using to access the backup.
## Extracting files from a backup
Alternatively, if you don't want to mount it and instead want to extract files directly, you can
do so. Either extract the whole backup:
```
misc/borg.sh extract <backup_address>::<archive_name>
```
or just a sub-directory:
```
misc/borg.sh extract <backup_address>::<archive_name> backup/srv/gitlab
```
## Special backups
### Mariadb
For Mariadb backups are made using `mariabackup` to `backup_mysql_dir`. Backups
are made and can be restored using the `mariadb-backup` tool. See also
[official MariaDB docs](https://mariadb.com/kb/en/full-backup-and-restore-with-mariabackup/).
### PostgreSQL
For PostgreSQL backups are made using `pg_dump` to `backup_postgres_dir`.
Restoring backups can be done with `pg_restore`. See also [official PostgreSQL docs](https://www.postgresql.org/docs/current/app-pgrestore.html).
## Adding a new server
Adding a new server to be backed up goes as follows:
* Make sure the new server's host key is synced to `docs/ssh-known_hosts.txt` by running
```
ansible-playbook playbooks/tasks/sync-ssh-hostkeys.yml
```
* Add the server to `[borg_clients]` in hosts
* Run the `borg` role on `u236610.your-storagebox.de` to allow the new machine to create backups
```
ansible-playbook playbooks/hetzner_storagebox.yml
```
* Run the `borg` role for `rsync.net` to allow the new machine to create backups
```
ansible-playbook playbooks/rsync.net.yml
```
* Run the `borg` role on the new machine to initialize the repository
```
ansible-playbook playbooks/$machine.yml -t borg
```