automatische backups instellen op linux
Automatische Backups Instellen Op Linux
Automatische backups instellen op Linux
Dit artikel legt uit hoe je een geautomatiseerde backup oplossing opzet met rsync en cron of systemd — voor systeembeheerders die een betrouwbare, herhaalbare backupstrategie willen implementeren.
Vereisten
- Linux distributie (getest op Ubuntu 24.04, Debian 12, CentOS 9) - `rsync` versie 3.2.7 of hoger (`rsync --version` controleren) - `cron` of `systemd` (242+) — beide zijn standaard aanwezig op vrijwel elke Linux installatie - Root toegang of sudo rechten voor schrijven naar `/usr/local/bin/` en `/var/log/` - Bestemmingslocatie voor backups: externe schijf (gemount), NAS of externe server (via SSH)
Stappen
1. Maak een backup script aan
Open een nieuw bestand `/usr/local/bin/backup.sh`:
```bash sudo nano /usr/local/bin/backup.sh ```
Voeg de volgende inhoud toe:
```bash #!/bin/bash rsync -avz --delete /pad/naar/data/ /pad/naar/backup/ ```
- `-a`: archive mode (behoudt permissies, symlinks, timestamps) - `-v`: verbose output - `-z`: comprimeert data tijdens transport - `--delete`: verwijdert bestanden uit backup die niet meer in bron bestaan
2. Voeg logging en uitzonderingen toe
Pas het script aan zodat het output naar een logbestand schrijft:
```bash #!/bin/bash rsync -avz --delete --exclude='.cache' --exclude='*.tmp' \ /pad/naar/data/ /pad/naar/backup/ >> /var/log/backup.log 2>&1 ```
`2>&1` stuurt foutmeldingen naar hetzelfde logbestand als normale output.
3. Maak het script uitvoerbaar
```bash sudo chmod +x /usr/local/bin/backup.sh ```
4. Plan de backup met cron
Open de crontab voor root:
```bash sudo crontab -e ```
Voeg deze regel toe voor een dagelijkse backup om 2:00 uur:
``` 0 2 * /usr/local/bin/backup.sh ```
Tijd formaat: minuut, uur, dag, maand, weekdag. `0 2 *` betekent elke dag om 02:00.
5. Alternatief: plan de backup met systemd timer
Maak een service unit aan `/etc/systemd/system/backup.service`:
```ini [Unit] Description=Dagelijkse rsync backup
[Service] Type=oneshot ExecStart=/usr/local/bin/backup.sh ```
Maak een timer unit aan `/etc/systemd/system/backup.timer`:
```ini [Unit] Description=Timer voor dagelijkse backup
[Timer] OnCalendar=daily Persistent=true
[Install] WantedBy=timers.target ```
Start en activeer de timer:
```bash sudo systemctl daemon-reload sudo systemctl enable backup.timer sudo systemctl start backup.timer ```
6. Test het script handmatig
```bash sudo /usr/local/bin/backup.sh ```
7. Voeg incrementele rotatie toe (optioneel)
Voor een robuustere strategie met dagelijkse, wekelijkse en maandelijkse snapshots, gebruik je rsync met hardlinks. Vervang de inhoud van `backup.sh` door:
```bash #!/bin/bash DATE=$(date +%Y-%m-%d) BACKUP_DIR="/pad/naar/backups/$DATE" LATEST="/pad/naar/backups/latest"
mkdir -p "$BACKUP_DIR" rsync -avz --delete --link-dest="$LATEST" \ /pad/naar/data/ "$BACKUP_DIR"
rm -f "$LATEST" ln -s "$BACKUP_DIR" "$LATEST" ```
`--link-dest` gebruikt hardlinks naar de vorige backup voor bestanden die niet veranderd zijn — dit bespaart schijfruimte terwijl je toch meerdere versies behoudt.
Verificatie
Controleer of de backup draait zoals gepland:
```bash Voor cron: crontab -l | grep backup
Voor systemd timer: sudo systemctl status backup.timer
Bekijk de laatste regels van het log: tail -20 /var/log/backup.log
Controleer of het doelmappaden bestaan en de juiste bestanden bevatten: ls -la /pad/naar/backup/ ```
Veelgestelde problemen
1. backup.log bevat foutmeldingen over 'Permission denied'
Het script draait niet met de juiste rechten of de bronbestemming is niet toegankelijk. Zorg dat het script als root draait (gebruik `sudo crontab -e` in plaats van `crontab -e` zonder sudo) en controleer of de doelmount gemount is.
2. rsync failt met 'Connection refused' bij externe bestemming
SSH access naar de externe server werkt niet. Test eerst handmatig: `rsync -avz testfile gebruiker@externeserver:/pad/`. Voeg zo nodig SSH-sleutels toe met `ssh-keygen` en `ssh-copy-id`.
3. Backups draaien niet op het geplande tijdstip
Gebruik `systemctl list-timers` om te controleren of de timer geactiveerd is. Bij cron controleer je het syslog: `grep CRON /var/log/syslog`. De meest voorkomende oorzaak is dat de systeemtijd niet klopt of dat de cron daemon niet draait.
Heb je een specifiek use case, zoals backups naar een S3 bucket of encrypted backups? Dan zijn er aanpassingen nodig op bovenstaand script — de basis blijft hetzelfde.