M-Disc Quick Backup (Verbatim Drive)
Quick runbook for M-Disc cold storage backup when Verbatim USB drive is connected.
1. Pre-Flight Checklist
-
Verbatim external USB DVD/BD drive connected
-
Blank M-Disc (DVD-R or BD-R) ready
-
age key accessible (
~/.config/age/key.txt) -
Sufficient disk space for staging (~25GB for full backup)
2. Phase 1: Connect Drive
2.2. 1.2 Verify Detection
wodim --devices
wodim: Overview of accessible drives (1 found) :
-------------------------------------------------------------------------
0 dev='/dev/sr0' rwrw-- : 'ASUS' 'BW-16D1HT'
-------------------------------------------------------------------------
If no device found:
# Check USB connection
lsusb | grep -i verbatim
# Check block device
lsblk | grep sr
# Check kernel messages
dmesg | tail -20 | grep -i "sr0\|cdrom\|dvd"
3. Phase 2: Create Backup Archives
3.1. 2.1 Create Staging Directory
BACKUP_DATE=$(date +%Y%m%d)
STAGING=~/cold-storage-${BACKUP_DATE}
mkdir -p ${STAGING}
cd ${STAGING}
3.2. 2.2 Create P0-CRITICAL Archive (Keys Only)
tar -cvf p0-critical.tar \
~/.gnupg/ \
~/.ssh/id_* \
~/.config/age/ \
~/.secrets/.metadata/keys/ \
~/.password-store/ \
~/.local/share/gopass/stores/v3/
# Encrypt with age
age -e -i ~/.config/age/key.txt -o P0-CRITICAL-${BACKUP_DATE}.tar.age p0-critical.tar
# Verify
ls -lh P0-CRITICAL-${BACKUP_DATE}.tar.age
3.3. 2.3 Create Full Backup Archive
# Excludes: venv, node_modules, cache, temp
tar --exclude='node_modules' \
--exclude='__pycache__' \
--exclude='.venv' \
--exclude='venv' \
--exclude='.cache' \
--exclude='oil' \
--exclude='.Trash-*' \
-cvf full-backup.tar \
~/.secrets \
~/.gnupg \
~/.password-store \
~/.local/share/gopass/stores/v3 \
~/.ssh \
~/.pki \
~/.config \
~/.ansible \
~/.claude \
~/.terraform.d \
~/.mozilla \
~/atelier \
~/Documents \
~/Pictures \
~/bin \
~/.zsh_history \
~/.bash_history
# Encrypt with age
age -e -i ~/.config/age/key.txt -o FULL-BACKUP-${BACKUP_DATE}.tar.age full-backup.tar
# Verify
ls -lh FULL-BACKUP-${BACKUP_DATE}.tar.age
4. Phase 3: Create Recovery Files
4.1. 3.1 Create Recovery Instructions
cat > RECOVERY-README.txt << 'EOF'
╔══════════════════════════════════════════════════════════════════════════════╗
║ COLD STORAGE ARCHIVE - RECOVERY ║
╠══════════════════════════════════════════════════════════════════════════════╣
║ ║
║ CONTENTS: ║
║ - P0-CRITICAL-*.tar.age Keys and secrets (RESTORE FIRST) ║
║ - FULL-BACKUP-*.tar.age Complete archive ║
║ ║
║ DECRYPT: ║
║ age -d -i ~/.config/age/key.txt FILE.age > FILE.tar ║
║ tar -xvf FILE.tar ║
║ ║
║ RESTORE ORDER: ║
║ 1. Restore P0-CRITICAL first (you need keys to decrypt everything) ║
║ 2. Restore FULL-BACKUP ║
║ ║
╚══════════════════════════════════════════════════════════════════════════════╝
EOF
5. Phase 4: Burn to M-Disc
6. Phase 5: Verify
7. Phase 6: Cleanup
8. Quick Reference
| Task | Command |
|---|---|
Check drive |
|
Create staging |
|
Encrypt with age |
|
Create ISO |
|
Burn |
|
Verify checksums |
|
List encrypted tar |
|
9. Troubleshooting
| Issue | Solution |
|---|---|
|
Drive not detected. Check |
|
Run with sudo: |
Checksum mismatch after burn |
Bad burn. Use new disc, try |
|
Check age key path: |