76 lines
2.7 KiB
Markdown
76 lines
2.7 KiB
Markdown
# Email Backup
|
|
|
|
Daily incremental backup of all email accounts to atlantis NAS.
|
|
|
|
## Overview
|
|
|
|
| Property | Value |
|
|
|----------|-------|
|
|
| **Script** | `scripts/gmail-backup-daily.sh` → `scripts/gmail-backup.py` |
|
|
| **Schedule** | Daily at 3:00 AM (cron on homelab-vm) |
|
|
| **Destination** | `/mnt/atlantis_archive/old_emails/` (NFS → atlantis `/volume1/archive/old_emails/`) |
|
|
| **Local copy** | `/tmp/gmail_backup` (non-persistent, fast access) |
|
|
| **Log** | `/tmp/gmail-backup-daily.log` |
|
|
| **Format** | `.eml` files organized by account → folder |
|
|
|
|
## Accounts
|
|
|
|
| Account | Protocol | Host | Directory |
|
|
|---------|----------|------|-----------|
|
|
| your-email@example.com | IMAP SSL | imap.gmail.com:993 | `dvish92/` |
|
|
| lzbellina92@gmail.com | IMAP SSL | imap.gmail.com:993 | `lzbellina92/` |
|
|
| admin@thevish.io | IMAP STARTTLS | 127.0.0.1:1143 (Proton Bridge) | `proton_admin/` |
|
|
|
|
## Behavior
|
|
|
|
- **Incremental**: Only downloads emails not already on disk (checks by filename)
|
|
- **Never deletes**: Emails removed from the source stay in the backup
|
|
- **Auto-reconnects**: Gmail throttles IMAP connections; the script reconnects and continues on disconnect
|
|
- **Proton Bridge required**: admin@thevish.io backup needs Proton Bridge running on homelab-vm (`tmux new-session -d -s bridge '/usr/lib/protonmail/bridge/bridge --cli'`)
|
|
- **Fault tolerant**: If Proton Bridge is down, Gmail accounts still back up. If NFS is unmounted, falls back to local-only backup.
|
|
|
|
## Infrastructure
|
|
|
|
### NFS Mount
|
|
|
|
```
|
|
192.168.0.200:/volume1/archive → /mnt/atlantis_archive (NFSv3, sec=sys)
|
|
```
|
|
|
|
Persisted in `/etc/fstab`. Requires `lan-route-fix.service` to be active (routes LAN traffic via ens18 instead of Tailscale).
|
|
|
|
### Cron
|
|
|
|
```cron
|
|
0 3 * * * /home/homelab/organized/repos/homelab/scripts/gmail-backup-daily.sh >> /tmp/gmail-backup-daily.log 2>&1
|
|
```
|
|
|
|
## Manual Operations
|
|
|
|
```bash
|
|
# Run backup manually
|
|
/home/homelab/organized/repos/homelab/scripts/gmail-backup-daily.sh
|
|
|
|
# Run for a specific destination
|
|
python3 scripts/gmail-backup.py /path/to/output
|
|
|
|
# Check backup status
|
|
find /mnt/atlantis_archive/old_emails -name "*.eml" | wc -l
|
|
|
|
# Check log
|
|
tail -20 /tmp/gmail-backup-daily.log
|
|
|
|
# Verify mount
|
|
mountpoint -q /mnt/atlantis_archive && echo "mounted" || echo "NOT mounted"
|
|
```
|
|
|
|
## Troubleshooting
|
|
|
|
| Issue | Fix |
|
|
|-------|-----|
|
|
| `PermissionError` on NFS | `ssh atlantis "chmod -R a+rwX /volume1/archive/old_emails/"` |
|
|
| NFS mount fails | Check `lan-route-fix.service` is active: `sudo systemctl start lan-route-fix` |
|
|
| Proton account fails | Verify bridge: `tmux attach -t bridge`. Restart if needed. |
|
|
| Gmail IMAP disconnects | Normal — Gmail rate-limits. Script auto-reconnects. |
|
|
| `socket error: EOF` in log | IMAP throttling. Script handles this automatically. |
|