docs: replace auto-generated README with project README

This commit is contained in:
2026-08-12 00:15:32 -05:00
parent f06fa15f17
commit 30dbe8eb40
+78 -1
View File
@@ -1,3 +1,80 @@
# workspace-ageout # workspace-ageout
Hot-to-cold tiering changelog for workspace.rmf44.xyz Hot-to-cold tiering changelog for `workspace.rmf44.xyz`.
## What this is
`workspace.rmf44.xyz` lives on `hawker` (VPS, 237 GB root disk) with user files
stored in `/var/lib/workspace-hot/`. A nightly job ages out files unmodified for
more than 90 days, moving them to dessert NFS at `/mnt/dessert-cold/` (the
durability tier). An hourly disk-pressure safety valve does the same when free
space on hawker drops below 50 GB.
Every aging-out run writes a `changelog/YYYY-MM-DD.txt` entry and commits it to
this repo, so you have a permanent record of what moved where.
## Restoring an aged-out file
Files aged out of the hot tier are NOT deleted — they live on the cold tier
(NFS) on `desslok` at `/slab/container_storage/workspace-cold/`. To restore a
file:
```bash
# on hawker, as tigo:
ssh desslok 'ls -la /slab/container_storage/workspace-cold/path/to/file'
scp desslok:/slab/container_storage/workspace-cold/path/to/file \
/var/lib/workspace-hot/path/to/file
```
Replace `path/to/file` with the relative path shown in the changelog.
## Reading the changelog
```bash
git log --stat # overview
git show HEAD # most recent run
ls changelog/ # all dated entries
```
Each entry looks like:
```
workspace-ageout run: 2026-08-12T03:00:07Z
Threshold: 90 days
Disk before: 184G free
Disk after: 187G free
Reclaimed: 3G
Files aged out: 47
race/files/Projects/old-quarterly-report.docx
race/files/Photos/2025/IMG_4401.jpg
...
Files failed: 0
```
## How it works
- **`/usr/local/bin/workspace-ageout.sh`** runs nightly (cron `0 3 * * *`).
Finds files in `/var/lib/workspace-hot/` with `mtime > 90 days`, rsyncs each
to `/mnt/dessert-cold/` (preserving relative paths), verifies via md5sum, and
deletes from hot. Appdata is excluded.
- **`/usr/local/bin/workspace-pressure.sh`** runs hourly (cron `0 * * * *`).
When `df -BG` on hot shows < 50 GB free, ages out oldest files until 80 GB
free, regardless of mtime.
Both scripts use a `rsync --remove-source-files`-style two-phase move (rsync
first, then delete) so a network blip never causes data loss.
## Where data lives
- **Hot tier:** `/var/lib/workspace-hot/` on hawker (local disk)
- **Cold tier:** `/mnt/dessert-cold/` on hawker → `desslok:/slab/container_storage/workspace-cold/` over NetBird NFS
- **Changelog:** this repo (auto-committed per run)
- **Logs:** syslog via `logger -t workspace-ageout` and `logger -t workspace-pressure`
## Restore UX (per Lord Race, 2026-08-11)
User SSHes to hawker and runs `scp` from desslok. No custom tooling, no plugin.