
I’ve always believed that data protection shouldn’t require a PhD in Systems Administration. That’s why I built My Home Vault—a project that has evolved from a simple Rsync script into a comprehensive, self-healing backup ecosystem.
Today, I’m excited to share the latest milestone, featuring a dedicated ZFS Edition.
Why “My Home Vault” is Different
Most backup tools are either too simple (missing error handling) or too complex (requiring heavy software installation). My Home Vault lives in the “Goldilocks Zone”: it’s a single Bash script that brings enterprise features to your home directory or NAS.
Two Engines, One Mission
Depending on your hardware, you can now choose the “Vault” that fits your needs:
- The Standard Edition: Perfect for USB drives and standard Linux setups. It uses Hard Link Deduplication, meaning if you have 10 identical files, they only take up the space of one.
- The ZFS Edition: Built for power users. This version automates Native ZFS Snapshots, LZ4 Compression, and Dataset Management. It provides atomic, collision-proof backups that are immune to accidental deletion.
Features at a Glance:
- VAULT-FIX Mode: Automatically detects and repairs “bit-rot” using checksum verification.
- 30-Second Wizard: No configuration files to edit manually; the script guides you through setup.
- Crash-Proof: Designed to handle sudden USB disconnects or NAS network drops without corrupting your data.
- Cron-Ready: Fully automated, non-interactive mode for “set-and-forget” peace of mind.
Open Source & Community Driven
My Home Vault is, and always will be, open source. I built this to protect my own life’s work, and I’m proud to share it with the community.
Check out the code on GitHub: 🔗 github.com/waelisa/my-home-vault
Standard Edition vs ZFS Edition – At a Glance
| Feature | my-home-vault.sh | my-home-vault-zfs.sh |
|---|---|---|
| Permission | Regular user | sudo required |
| File System | ext4, btrfs, NTFS, etc. | ZFS only |
| Compression | None (rsync) | LZ4 (built-in) |
| Snapshots | Hard links only | ZFS snapshots + hard links |
| Snapshot Naming | N/A | Atomic (PID + millisecond) |
| Mount Verification | Basic | ZFS dataset check |
| Pool Detection | N/A | Automatic |
| Config File | ~/.my-home-vault.conf | ~/.my-home-vault-zfs.conf |
| Log File Prefix | vault_*.log | vault_zfs_*.log |
| Best For | USB drives, regular disks | NAS, ZFS pools, data integrity |
📋 Common Commands (Both Editions)
bash
# Interactive mode ./my-home-vault.sh # Standard sudo ./my-home-vault-zfs.sh # ZFS # Cron/quiet mode (NAS backup) ./my-home-vault.sh --quiet # Standard sudo ./my-home-vault-zfs.sh --quiet # ZFS # Repair mode (VAULT-FIX) ./my-home-vault.sh --repair # Standard sudo ./my-home-vault-zfs.sh --repair # ZFS # Help ./my-home-vault.sh --help # Standard sudo ./my-home-vault-zfs.sh --help # ZFS # Version info ./my-home-vault.sh --version # Standard sudo ./my-home-vault-zfs.sh --version # ZFS # Re-run setup wizard ./my-home-vault.sh --reconfigure # Standard sudo ./my-home-vault-zfs.sh --reconfigure # ZFS
🎯 Menu Options Comparison
| Option | Standard | ZFS Edition |
|---|---|---|
| 1 | Local Backup | Local Backup (with ZFS snapshot) |
| 2 | Local Restore | Local Restore |
| 3 | NAS Backup | NAS Backup |
| 4 | NAS Restore | NAS Restore |
| 5 | Show Info | Show Info |
| 6 | VAULT-FIX Repair | VAULT-FIX Repair |
| 7 | Test NAS | ZFS Snapshots |
| 8 | Setup SSH Key | Test NAS |
| 9 | Cron Setup | Setup SSH Key |
| 10 | Log Management | Cron Setup |
| 11 | Cleanup Dry-Run | Log Management |
| 12 | Exit | Cleanup Dry-Run |
| 13 | – | Exit |
🔧 ZFS-Specific Commands
bash
# List ZFS snapshots zfs list -t snapshot | grep mhv # Browse snapshot contents ls /tank/mhv_username/.zfs/snapshot/ # Rollback to a snapshot (manual recovery) sudo zfs rollback tank/mhv_username@mhv_20260222_143022_12345 # Check ZFS dataset status zfs get all tank/mhv_username # Check ZFS pool health zpool status tank
📁 File Locations
bash
# Standard Edition
~/.my-home-vault.conf # Configuration
~/.my-home-vault/logs/vault_*.log # Backup logs
~/.my-home-vault/logs/quiet.log # Cron logs
# ZFS Edition
~/.my-home-vault-zfs.conf # Configuration
~/.my-home-vault/logs/vault_zfs_*.log # Backup logs
~/.my-home-vault/logs/quiet.log # Cron logs
# Backup storage (configurable)
/your/backup/drive/MyHomeVault/username/
├── current/ # Symlink to latest backup
└── incremental/ # All backups by date
├── 2026-02-21_14-30-45/
├── 2026-02-22_02-00-01/
└── ...
🔍 Quick Status Checks
bash
# Check last backup status grep "SUCCESS" ~/.my-home-vault/logs/quiet.log # Check last repair status grep -E "corruption|repaired|VAULT-FIX" ~/.my-home-vault/logs/vault_*.log | tail -5 # Show backup versions (Standard) ls -la ~/Backups/username/incremental/ # Show ZFS snapshots (ZFS) zfs list -t snapshot | grep mhv | tail -10 # Check disk space df -h /your/backup/drive
⚙️ Configuration Examples
Standard Edition (~/.my-home-vault.conf)
bash
LOCAL_BACKUP_BASE="/media/username/BackupDrive/MyHomeVault" NAS_IP="192.168.100.10" NAS_USER="username" NAS_BACKUP_PATH="/home/username/MyHomeVault" BW_LIMIT=5000 SSH_TIMEOUT=10 SSH_ALIVE=60 RETENTION_DAYS=14 ENABLE_NOTIFICATIONS="yes" MIN_FREE_SPACE_PERCENT=10
ZFS Edition (~/.my-home-vault-zfs.conf)
bash
USE_ZFS="yes" ZFS_POOL="tank" ZFS_DATASET="tank/mhv_username" ZFS_MOUNTPOINT="/tank/mhv_username" ZFS_COMPRESSION="lz4" ZFS_SNAPSHOT_RETENTION=14 ZFS_SNAPSHOT_PREFIX="mhv" # ... plus all standard settings
🚨 Error Messages & Solutions
| Error | Edition | Solution |
|---|---|---|
❌ ERROR: ZFS Edition requires root/sudo permissions | ZFS | Run with sudo |
Destination is not writable | Both | Check USB drive connection, run sudo mount -o remount,rw /mount/point |
NAS not configured | Both | Run setup wizard or check config file |
No 'current' backup found | Both | Run a backup first |
ZFS dataset not mounted | ZFS | sudo zfs mount tank/mhv_username |
SSH connection failed | Both | Check NAS IP, SSH key setup |
💾 Hardware Recommendations
| Use Case | Standard Edition | ZFS Edition |
|---|---|---|
| USB Drive | Any USB 3.0 drive | Not recommended |
| External HDD | WD Elements, Seagate Expansion | Not recommended |
| NAS (ext4) | WD Red Plus, Seagate IronWolf | Works but no snapshots |
| NAS (ZFS) | N/A | Seagate IronWolf (best for metadata) WD Red Plus (best for compression) |
| Desktop Backup | Any internal drive | ZFS pool with ECC RAM |
📊 Feature Matrix
| Feature | Standard | ZFS |
|---|---|---|
| Auto-drive detection | ✅ | ✅ |
| Incremental backups | ✅ | ✅ |
| Hard links | ✅ | ✅ |
| NAS support | ✅ | ✅ |
| VAULT-FIX repair | ✅ | ✅ |
| Desktop notifications | ✅ | ✅ |
| Cron integration | ✅ | ✅ |
| Log rotation | ✅ | ✅ |
| USB remount | ✅ | ✅ |
| Disk space check | ✅ | ✅ |
| Non-interactive mode | ✅ | ✅ |
| ZFS compression | ❌ | ✅ |
| ZFS snapshots | ❌ | ✅ |
| Atomic naming | ❌ | ✅ |
| Pool detection | ❌ | ✅ |
| Mount verification | ❌ | ✅ |
| ZFS send/receive | ❌ | ✅ |
🎯 Quick Decision Guide
Choose Standard Edition if:
- You’re backing up to USB drives or external HDDs
- Your NAS uses ext4, btrfs, or NTFS
- You don’t have ZFS installed
- You want to run as regular user (no sudo)
Choose ZFS Edition if:
- You have a ZFS pool on your NAS or local system
- You want built-in compression (LZ4)
- You want atomic snapshots with every backup
- You need point-in-time recovery
- You’re willing to use
sudo
🏁 One-Line Installation
bash
# Standard Edition curl -O https://raw.githubusercontent.com/waelisa/my-home-vault/main/my-home-vault.sh chmod +x my-home-vault.sh ./my-home-vault.sh # ZFS Edition curl -O https://raw.githubusercontent.com/waelisa/my-home-vault/main/my-home-vault-zfs.sh chmod +x my-home-vault-zfs.sh sudo ./my-home-vault-zfs.sh
My Home Vault – Your Data, Fortified. 🔐
https://github.com/waelisa/my-home-vault
MIT License · Built with ❤️ for the Linux community