Published multiple files
All checks were successful
Build and Deploy Quartz / build (push) Successful in 20s
All checks were successful
Build and Deploy Quartz / build (push) Successful in 20s
This commit is contained in:
89
content/10-19 LIFE/13 TECH SETUP/13.12 PROCESSES/Backups.md
Normal file
89
content/10-19 LIFE/13 TECH SETUP/13.12 PROCESSES/Backups.md
Normal 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"
|
||||
}
|
||||
```
|
||||
Reference in New Issue
Block a user