Ontwikkel een Bash of PowerShell Script voor Automatische Server Back-up en Herstel
description
Met deze prompt kun je een betrouwbaar script ontwikkelen dat ervoor zorgt dat je serverdata regelmatig veilig wordt opgeslagen en snel hersteld kan worden bij problemen. Dit voorkomt dataverlies en minimaliseert downtime, wat essentieel is voor continuïteit van je IT-infrastructuur. Het script is volledig aanpasbaar aan je eigen back-up strategie en serveromgeving, waardoor het beter aansluit dan generieke oplossingen.
prompt
Help me een Bash of PowerShell script te maken dat automatisch back-ups van mijn serverdata maakt en indien nodig herstelt. Back-up locaties: <voer de back-up locaties in> Frequentie ...
try_prompt
generate_helper
disclaimerOnPageApi
tags
ai_answers
provider: openai
model: gpt-4.1-nano
Hier is een eenvoudig Bash-script dat automatisch back-ups maakt van je serverdata, deze opslaat in /backups, en bij een crash herstelt. Het script logt alle acties in /var/log/backup.log.
```bash
#!/bin/bash
# Configuratie
BACKUP_DIR="/backups"
LOG_FILE="/var/log/backup.log"
DATA_DIR="/path/naar/serverdata" # Pas dit aan naar de daadwerkelijke data directory
CRASH_FLAG="/tmp/server_crash.flag" # Flagbestand om crash te detecteren
# Functie om te loggen
log() {
echo "$(date '+%Y-%m-%d %H:%M:%S') - $1" >> "$LOG_FILE"
}
# Back-up maken
maak_backup() {
timestamp=$(date '+%Y%m%d_%H%M%S')
backup_file="$BACKUP_DIR/server_backup_$timestamp.tar.gz"
tar -czf "$backup_file" -C "$DATA_DIR" .
if [ $? -eq 0 ]; then
log "Back-up gemaakt: $backup_file"
else
log "Fout bij maken back-up"
fi
}
# Herstellen van back-up
herstel_backup() {
# Selecteer de nieuwste back-up
latest_backup=$(ls -t "$BACKUP_DIR"/server_backup_*.tar.gz | head -n 1)
if [ -f "$latest_backup" ]; then
rm -rf "$DATA_DIR"/*
tar -xzf "$latest_backup" -C "$DATA_DIR"
if [ $? -eq 0 ]; then
log "Herstel voltooid uit: $latest_backup"
else
log "Fout tijdens herstel uit: $latest_backup"
fi
else
log "Geen back-up gevonden voor herstel"
fi
}
# Detectie van crash
detecteer_crash() {
if [ -f "$CRASH_FLAG" ]; then
log "Servercrash gedetecteerd, herstel wordt gestart"
herstel_backup
rm -f "$CRASH_FLAG"
fi
}
# Simulatie van servercrash (bijvoorbeeld door een fout of handmatig)
# In praktijk moet je deze flag zetten bij een crash
# touch "$CRASH_FLAG"
# Main script
detecteer_crash
maak_backup
```
**Gebruik:**
- Pas de variabele `DATA_DIR` aan naar jouw serverdata locatie.
- Plaats dit script bijvoorbeeld als `/usr/local/bin/backup_script.sh`.
- Maak het uitvoerbaar met: `chmod +x /usr/local/bin/backup_script.sh`.
- Plan het bijvoorbeeld via cron voor frequente back-ups, bijvoorbeeld dagelijks:
```
0 2 * * * /usr/local/bin/backup_script.sh
```
**Herstel bij crash:**
- Zet handmatig het bestand `/tmp/server_crash.flag` om een crash te simuleren of te signaleren, of integreer je detectie in je servermonitoringsysteem.
**Logboek:**
- Alle acties worden gelogd in `/var/log/backup.log`.
---
Wil je het script uitbreiden of aanpassen?
provider: deepseek
model: deepseek-chat
Ik zal je helpen een Bash-script te maken voor back-ups. Hier is een uitgebreide oplossing:
```bash
#!/bin/bash
# Backup script voor serverdata
# Auteur: Backup Systeem
# Datum: $(date +%Y-%m-%d)
# Configuratie
BACKUP_DIR="/backups"
LOG_FILE="/var/log/backup.log"
SOURCE_DIRS=("/etc" "/home" "/var/www") # Pas aan naar je eigen mappen
RETENTION_DAYS=30 # Back-ups bewaren voor 30 dagen
# Functie voor logging
log_message() {
echo "$(date '+%Y-%m-%d %H:%M:%S') - $1" | tee -a "$LOG_FILE"
}
# Functie om back-up te maken
create_backup() {
local timestamp=$(date +%Y%m%d_%H%M%S)
local backup_file="${BACKUP_DIR}/backup_${timestamp}.tar.gz"
log_message "Back-up gestart: $backup_file"
# Maak back-up directory aan als deze niet bestaat
mkdir -p "$BACKUP_DIR"
# Maak tar archive met compressie
tar -czf "$backup_file" "${SOURCE_DIRS[@]}" 2>/dev/null
if [ $? -eq 0 ]; then
log_message "Back-up succesvol voltooid: $backup_file"
# Update laatste back-up symlink
ln -sf "$backup_file" "${BACKUP_DIR}/latest_backup.tar.gz"
else
log_message "FOUT: Back-up mislukt"
exit 1
fi
}
# Functie om oude back-ups op te ruimen
clean_old_backups() {
log_message "Opruimen oude back-ups (ouder dan $RETENTION_DAYS dagen)"
find "$BACKUP_DIR" -name "backup_*.tar.gz" -mtime +$RETENTION_DAYS -delete -print | while read file; do
log_message "Verwijderd: $file"
done
}
# Functie om back-up te herstellen
restore_backup() {
local backup_file="$1"
if [ ! -f "$backup_file" ]; then
log_message "FOUT: Back-up bestand niet gevonden: $backup_file"
exit 1
fi
log_message "Herstel gestart vanaf: $backup_file"
# Extract back-up (pas op: overschrijft bestaande bestanden!)
tar -xzf "$backup_file" -C /
if [ $? -eq 0 ]; then
log_message "Herstel succesvol voltooid vanaf: $backup_file"
else
log_message "FOUT: Herstel mislukt"
exit 1
fi
}
# Hoofdscript
case "$1" in
"backup")
create_backup
clean_old_backups
;;
"restore")
if [ -z "$2" ]; then
echo "Gebruik: $0 restore <backup-bestand>"
echo "Voor laatste back-up: $0 restore latest"
exit 1
fi
if [ "$2" = "latest" ]; then
restore_backup "${BACKUP_DIR}/latest_backup.tar.gz"
else
restore_backup "$2"
fi
;;
"list")
echo "Beschikbare back-ups:"
ls -la "$BACKUP_DIR"/backup_*.tar.gz 2>/dev/null || echo "Geen back-ups gevonden"
;;
*)
echo "Gebruik:"
echo " $0 backup - Maak nieuwe back-up"
echo " $0 restore <file> - Herstel vanaf back-up"
echo " $0 restore latest - Herstel vanaf laatste back-up"
echo " $0 list - Toon beschikbare back-ups"
exit 1
;;
esac
```
**Installatie en gebruik:**
1. **Script opslaan:**
```bash
sudo nano /usr/local/bin/backup-system.sh
sudo chmod +x /usr/local/bin/backup-system.sh
```
2. **Cronjob voor automatische back-ups:**
```bash
sudo crontab -e
# Voeg toe:
0 2 * * * /usr/local/bin/backup-system.sh backup
```
3. **Gebruik:**
```bash
# Maak back-up
sudo ./backup-system.sh backup
# Toon back-ups
sudo ./backup-system.sh list
# Herstel vanaf laatste back-up
sudo ./backup-system.sh restore latest
# Herstel vanaf specifieke back-up
sudo ./backup-system.sh restore /backups/backup_20231201_0200.tar.gz
```
**Belangrijke opmerkingen:**
- Pas `SOURCE_DIRS` aan naar je eigen belangrijke mappen
- Test het herstelproces regelmatig
- Zorg voor voldoende schijfruimte in /backups
- Overweeg encryptie voor gevoelige data
- Monitor de logfile: `/var/log/backup.log`
Voor een servercrash scenario zou je dit script kunnen combineren met een opstartscript dat automatisch de laatste back-up herstelt.