A quick and dirty backup script for saving my VPS. Creates compressed tar backups of specified directories with automatic rotation to save disk space.
Note: This script was created with assistance from aider.chat.
Features
- Backs up multiple directories into a single compressed tar.gz archive
- Automatic backup rotation - keeps only the N most recent backups
- Creates timestamped backup directories for easy identification
- Uses fast compression (gzip -1) to minimize backup time
- Requires sudo access for creating and managing backups in
/backups
Requirements
- zsh shell
- sudo access
- tar with gzip support
Usage
Basic usage - backup directories with default settings (keeps last 2 backups):
sudo ./vps_backup.sh /home/user /etc /var/www
Specify how many backups to keep:
sudo ./vps_backup.sh --keep-n 5 /home/user /etc
Specify a custom output directory:
sudo ./vps_backup.sh --outdir /custom/backup/location /home/user /etc
Combine options:
sudo ./vps_backup.sh --keep-n 3 --outdir /mnt/external/backups /home/user /etc /var/www
Default Behavior
- Output directory:
/backups/YYYY-MM-DD_HH-MM-SS(timestamped) - Backup retention: Keeps the last 2 backups, removes older ones
- Compression: Uses gzip with default compression level (level 6)
- Permissions: Requires sudo to create
/backupsdirectory and write backups
How It Works
- Validates sudo access
- Creates
/backupsdirectory if it doesn't exist - Creates a timestamped subdirectory (or uses custom
--outdir) - Creates a single
backup.tar.gzcontaining all specified directories - Cleans up old backups, keeping only the N most recent backup directories
Warning
This is a quick and dirty script designed for simple VPS backups. For production environments or critical data, consider more robust backup solutions with features like incremental backups, encryption, remote storage, and monitoring.