Published multiple files
All checks were successful
Build and Deploy Quartz / build (push) Successful in 20s

This commit is contained in:
Quartz Syncer
2026-01-20 13:30:42 -07:00
parent f0712ba561
commit d60dc27dac

View File

@@ -0,0 +1,89 @@
---
publish: true
title: Backups
created: 2026-01-20T13:21:41.646-07:00
modified: 2026-01-20T13:30:33.530-07:00
cssclasses: ""
---
## Local
For me local backups happen in two main ways
1. Backups to a VPS using [[Syncthing]]
2. Backups to a USB stick that lives in my emergency kit
### USB Backups
For USB backups I had a few key requirements
1. They must be encrypted
2. Decryption should be able to take place on any Windows, Mac, or Linux device
3. Decryption must be simple enough that an intermediate user should be able to manage it given instructions (this is in case someone needs this data if I am no longer around to impart my wisdom)
Given these requirements I settled on using [[VeraCrypt]] to create an encrypted container formatted with exFat on a USB drive. This way someone can install the software and, given my key, decrypt the data.
I created the following helper functions to make this processes a little less cumbersome for myself on a monthly basis.
#### Mount/Unmount Container
```bash
vault() {
local mount_base="/run/media/$USER"
local mount_point="$mount_base/vault"
_vault_find() {
local container
container=$(command find "$mount_base" -maxdepth 2 -name "DataVault" -type f 2>/dev/null | head -1)
if [[ -z "$container" ]]; then
echo "Error: DataVault not found under $mount_base" >&2
return 1
fi
echo "$container"
}
case "${1:-}" in
m|mount)
local container
container=$(_vault_find) || return 1
if mountpoint -q "$mount_point" 2>/dev/null; then
echo "Already mounted at $mount_point"
return 0
fi
echo "Found: $container"
sudo mkdir -p "$mount_point"
sudo veracrypt -t --fs-options="uid=$(id -u),gid=$(id -g)" "$container" "$mount_point"
echo "Mounted at $mount_point"
;;
u|unmount)
if ! mountpoint -q "$mount_point" 2>/dev/null; then
echo "Not mounted"
return 0
fi
sudo veracrypt -t -d "$mount_point"
sudo rmdir "$mount_point" 2>/dev/null || true
echo "Unmounted"
;;
*)
echo "Usage: vault {mount|m|unmount|u}"
return 1
;;
esac
}
```
#### Sync Data
```bash
vault-sync() {
local mount_point="/run/media/$USER/vault"
local source="$HOME/DataStore"
if ! mountpoint -q "$mount_point" 2>/dev/null; then
echo "Error: Vault not mounted at $mount_point" >&2
return 1
fi
if [[ ! -d "$source" ]]; then
echo "Error: Source directory $source does not exist" >&2
return 1
fi
rsync -av --delete "$source/" "$mount_point/"
echo "Sync complete"
}
```