De back-ups van je VPS beheren wij, en in je klantaccount herstel je daaruit de hele schijf. Voor losse bestanden, databases en een kopie buiten onze infrastructuur stel je eigen back-ups in. We laten beide zien.
Wat je nodig hebt
- Een VPS bij StormHost met Ubuntu 24.04 of Debian 13
- Een SSH-verbinding als root (handleiding)
- Voor een back-up buiten de VPS een tweede computer of server met toegang via SSH
- Ongeveer 25 minuten
Automatische back-ups van StormHost#
We maken automatisch back-ups van je VPS. Je vindt ze in je klantaccount: Mijn diensten › je VPS › tabblad Back-ups.
- De lijst toont bij elke back-up Aangemaakt (datum en tijd), Grootte en de Opslag waarop die staat.
- Handmatig een back-up maken vanuit je klantaccount is niet mogelijk. Maak daarom vóór een riskante ingreep (een upgrade van het systeem, een grote configuratiewijziging) een eigen back-up volgens de rest van deze handleiding.
- Verschijnt de melding “Een van de back-upopslagen reageert nu niet, de lijst is mogelijk onvolledig”, dan is een deel van de back-ups tijdelijk niet beschikbaar. Probeer het later opnieuw, of stuur ons een bericht.
- Een lid van een gedeelde dienst ziet de back-ups alleen met de machtiging Back-ups en herstel.
De hele VPS herstellen#
Herstellen overschrijft de hele schijf
“De gegevens op de schijf worden onherroepelijk overschreven door de back-up. De VPS wordt tijdens het herstel uitgezet.” Alles wat na het maken van de back-up op de VPS is ontstaan (nieuwe bestellingen op je website, opgeslagen spellen, databases, logs), gaat verloren. Staat er zoiets op de VPS, download het dan eerst (SFTP, mariadb-dump).
- Zoek op het tabblad Back-ups de back-up op aan de hand van de datum in de kolom Aangemaakt.
- Klik op Herstellen.
- Lees de waarschuwing en bevestig die door de schuifregelaar te verslepen (“Schuif om te herstellen”).
- Wacht tot het klaar is. Tijdens het herstellen is de VPS uitgeschakeld en vergrendeld, de console maakt geen verbinding.
- Start de VPS na het herstellen (als die niet vanzelf start) en controleer je services.
Alles herstellen, of losse bestanden?#
| Situatie | Wat je gebruikt |
|---|---|
| Kapot systeem, gehackte VPS, mislukte update | De hele VPS herstellen op het tabblad Back-ups. |
| Een verwijderd of overschreven bestand, een foute wijziging in de configuratie | Je eigen back-up van bestanden (hieronder). Het herstellen van de hele schijf zou ook al het andere terugzetten. |
| Beschadigde of verwijderde gegevens in een database | Je eigen back-up van de database (een export met mariadb-dump). |
| Verhuizen naar een andere VPS of naar een andere provider | Je eigen back-ups, het liefst opgeslagen buiten de VPS. |
De 3-2-1-regel#
Een beproefde regel voor back-ups: 3 kopieën van je gegevens, op 2 verschillende plekken of soorten opslag, waarvan 1 buiten de hoofdinfrastructuur.
Voor een VPS betekent dat:
- De gegevens op de VPS (de oorspronkelijke kopie).
- Onze automatische back-ups (de tweede kopie, buiten jouw VPS).
- Je eigen back-up ergens anders: een NAS thuis, een andere server, cloudopslag (de derde kopie, buiten onze infrastructuur).
De derde kopie beschermt je ook in situaties waarin herstellen in je klantaccount niet helpt: je hebt een oudere toestand nodig, een los bestand, of je wilt verhuizen.
Wat je back-upt#
| Pad / gegevens | Wat erin zit | Opmerking |
|---|---|---|
/etc | De configuratie van het systeem en de services (Nginx, SSH, cron, firewall). | Klein, back-up dit altijd. |
/home, /root | De thuismappen van gebruikers, scripts, SSH-sleutels. | /root/.ssh bevat privésleutels, versleutel de back-up. |
/var/www | Websites. | |
/opt, /srv | Applicaties en gegevens die je hier installeert (bijvoorbeeld Docker Compose-projecten). | |
| Databases | De gegevens van MariaDB/MySQL. | Altijd met een export (mariadb-dump), niet door de map /var/lib/mysql te kopiëren terwijl de database draait, die kopie zou inconsistent zijn. |
| Docker-volumes | De gegevens van containers (/var/lib/docker/volumes). | Exporteer databases in containers, zie Docker en Docker Compose. |
| Gegevens van gameservers | Werelden, configuratie, plugins. | De map hangt af van je installatie. Laat de server de wereld vóór de back-up het liefst opslaan (het commando save-all bij Minecraft). |
| Crontab | Geplande taken. | crontab -l > /root/crontab-zaloha.txt |
Het back-upscript#
Het script maakt elke dag een export van alle databases en een archief van de belangrijke mappen, en verwijdert back-ups die ouder zijn dan 7 dagen.
Maak het scriptbestand aan:
bash nano /usr/local/sbin/zaloha.shPlak de inhoud erin:
/usr/ local/ bashsbin/ zaloha.sh #!/bin/bash set -euo pipefail umask 077 CIL=/var/backups/vps DNES=$(date +%F) UCHOVAT_DNI=7 mkdir -p "$CIL" # 1) databases (alleen als MariaDB/MySQL is geïnstalleerd) if command -v mariadb-dump >/dev/null 2>&1; then mariadb-dump --single-transaction --routines --events --all-databases | gzip > "$CIL/db-$DNES.sql.gz" fi # 2) bestanden tar -czf "$CIL/soubory-$DNES.tar.gz" --ignore-failed-read /etc /home /root /var/www /opt /srv || [ $? -eq 1 ] # 3) oude back-ups verwijderen find "$CIL" -type f -name '*.gz' -mtime +"$UCHOVAT_DNI" -delete echo "$(date '+%F %T') back-up klaar"Sla op (Ctrl+O, Enter), sluit af (Ctrl+X) en maak het script uitvoerbaar:
bash chmod 700 /usr/local/sbin/zaloha.shchmod 700– alleen root mag het script lezen en uitvoeren.
Wat het script doet:
| Regel | Betekenis |
|---|---|
#!/bin/bash | Het script wordt uitgevoerd door de interpreter bash. |
set -euo pipefail | Het script stopt bij de eerste fout (-e), bij het gebruik van een niet-ingestelde variabele (-u) en bij een fout op een willekeurige plek in een keten van commando's met | (pipefail). Zo ontstaat er niet ongemerkt een beschadigde back-up. |
umask 077 | Nieuwe bestanden mag alleen root lezen. Back-ups bevatten wachtwoorden en sleutels. |
CIL=/var/backups/vps | De map voor de back-ups op de VPS (CIL = “doel”). |
DNES=$(date +%F) | De datum van vandaag in de vorm 2026-10-01 (DNES = “vandaag”), die in de bestandsnamen wordt gebruikt (soubory = “bestanden”). |
UCHOVAT_DNI=7 | Hoeveel dagen de back-ups worden bewaard (UCHOVAT_DNI = “dagen bewaren”). Meer dagen = meer schijfruimte. |
command -v mariadb-dump | Kijkt of de database is geïnstalleerd; zo niet, dan wordt de export overgeslagen. |
mariadb-dump … | gzip > … | Een export van alle databases zonder tabellen te vergrendelen, meteen gecomprimeerd. Root logt zonder wachtwoord via de unix socket in op de database. |
tar -czf … /etc /home … | Pakt de genoemde mappen in en comprimeert ze tot één archief. |
--ignore-failed-read | Eindigt niet met een fout als een map niet bestaat of niet te lezen is. |
|| [ $? -eq 1 ] | Tar geeft code 1 terug als een bestand tijdens het lezen is gewijzigd (bijvoorbeeld een log). Dat is niet erg; een echte fout (code 2) stopt het script. |
find … -mtime +7 -delete | Verwijdert archieven die ouder zijn dan 7 dagen. |
Probeer het script handmatig uit:
bash /usr/local/sbin/zaloha.sh ls -lh /var/backups/vpsJe ziet
back-up klaaren de bestandendb-….sql.gzensoubory-….tar.gz. De meldingtar: Removing leading '/' from member namesis normaal: paden worden zonder de eerste schuine streep in het archief opgeslagen.
Schijfruimte
De back-up staat op dezelfde schijf als de gegevens. Die neemt ruimte in, en bij een defecte schijf of een gehackte VPS verdwijnt die samen met de gegevens. Houd de vrije ruimte in de gaten (df -h) en kopieer de back-ups naar een plek buiten de VPS (hoofdstuk Overzetten buiten de VPS).
Automatisch uitvoeren met cron#
Zorg dat cron is geïnstalleerd (staat het er al, dan gebeurt er niets):
bash apt -y install cronOpen de crontab van root:
bash crontab -eKies bij de eerste keer de editor
nano.Voeg aan het einde deze regel toe:
text 30 3 * * * /usr/local/sbin/zaloha.sh >> /var/log/zaloha.log 2>&1Sla op en sluit de editor. Je ziet
crontab: installing new crontab.
Een regel in de crontab heeft vijf tijdvelden en een commando:
| Veld | Toegestane waarden | In het voorbeeld | Betekenis |
|---|---|---|---|
| minuut | 0–59 | 30 | in de 30e minuut |
| uur | 0–23 | 3 | om 3 uur 's nachts |
| dag van de maand | 1–31 | * | elke dag |
| maand | 1–12 | * | elke maand |
| dag van de week | 0–7 (0 en 7 = zondag) | * | elke dag van de week |
| commando | /usr/ | wat er wordt uitgevoerd (altijd met het volledige pad) | |
| omleiding | >> /var/log/zaloha.log 2>&1 | uitvoer en fouten aan het log toevoegen |
Meer voorbeelden van tijden:
| Notatie | Wanneer het wordt uitgevoerd |
|---|---|
0 */6 * * * | elke 6 uur (0:00, 6:00, 12:00, 18:00) |
15 2 * * 0 | elke zondag om 2:15 |
0 4 1 * * | op de eerste dag van de maand om 4:00 |
De tijd volgt de tijdzone van de VPS (timedatectl). Plan back-ups op een moment waarop de server het minst wordt gebruikt.
Overzetten buiten de VPS#
SSH-toegang tot de doelserver voorbereiden#
Je stuurt de back-ups naar een andere server (een NAS thuis met SSH, een andere VPS). In de voorbeelden heeft de doelserver het IP-adres 198.51.100.25, vul in plaats daarvan het adres van je eigen server in.
Maak op de doelserver (Ubuntu of Debian, ingelogd als root) een gebruiker aan en een map waarin die mag schrijven:
adduser zaloha
mkdir -p /srv/zalohy
chown zaloha:zaloha /srv/zalohy
chmod 700 /srv/zalohyadduser zaloha– maakt de gebruikerzalohaaan. Er wordt om een wachtwoord gevraagd (dat heb je nodig in stap 2 hieronder) en om optionele gegevens, die je bevestigt met de toets Enter.mkdir -p /srv/zalohy– de map voor de back-ups.chown zaloha:zaloha– de map wordt eigendom van de gebruikerzaloha, zodat die erin kan schrijven. Zonder dit eindigen zowel rsync als restic met de foutPermission denied.chmod 700– niemand anders mag in de map komen.
Op de doelserver moet inloggen met een wachtwoord zijn toegestaan, in elk geval totdat je de sleutel hebt geüpload (stap 2). Volg bij een NAS de handleiding van het apparaat (gebruiker, gedeelde map, SSH ingeschakeld).
Daarna op de VPS waarvan je een back-up maakt:
Maak een SSH-sleutel zonder wachtwoord aan, die alleen voor de back-ups wordt gebruikt:
bash ssh-keygen -t ed25519 -f /root/.ssh/zaloha -N "" -C "zaloha-vps"-t ed25519– een modern type sleutel.-f /root/.ssh/zaloha– waar de sleutel wordt opgeslagen (er ontstaanzalohaenzaloha.pub).-N ""– geen wachtwoord op de sleutel, zodat cron die zonder jou kan gebruiken.-C "zaloha-vps"– een omschrijving van de sleutel.
Upload de publieke sleutel naar de doelserver (je voert het wachtwoord van de gebruiker
zalohaop de doelserver in):bash ssh-copy-id -i /root/.ssh/zaloha.pub [email protected]Bij de eerste verbinding vraagt SSH
Are you sure you want to continue connecting (yes/no/[fingerprint])?. Typyes: de vingerafdruk van de doelserver wordt opgeslagen in/root/.ssh/known_hostsen cron krijgt die vraag daarna niet meer.Maak een snelkoppeling voor de verbinding. Open
nano /root/.ssh/configen voeg toe:/root/ .ssh/ textconfig Host zalohy HostName 198.51.100.25 User zaloha IdentityFile /root/.ssh/zalohaHost zalohy– de snelkoppeling die je daarna in plaats van het adres gebruikt.HostName– het IP-adres of domein van de doelserver.User– de gebruiker op de doelserver.IdentityFile– de sleutel om mee in te loggen.
Test de verbinding:
ssh zalohymoet zonder wachtwoord inloggen. Log uit met het commandoexit.
Het werken met sleutels in detail: SSH-sleutel.
rsync#
rsync kopieert alleen gewijzigde bestanden en is daardoor ook bij grote back-ups snel. Het moet aan beide kanten geïnstalleerd zijn (apt -y install rsync).
rsync -az /var/backups/vps/ zalohy:/srv/zalohy/vps1/-a– archiefmodus: kopieert recursief en behoudt rechten, tijden en koppelingen.-z– comprimeert de gegevens tijdens de overdracht./var/backups/vps/– wat er wordt gekopieerd. De schuine streep aan het einde betekent “de inhoud van de map”, niet de map zelf.zalohy:/srv/zalohy/vps1/– het doel: de snelkoppeling uit~/.ssh/configen de map op de doelserver.
Neem de overdracht op als laatste regel van het script zaloha.sh, of in de crontab een uur na de back-up:
30 4 * * * rsync -az /var/backups/vps/ zalohy:/srv/zalohy/vps1/ >> /var/log/zaloha.log 2>&1Waarom zonder --delete
De optie --delete zou op het doel alles verwijderen wat op de VPS ontbreekt. Als een aanvaller of een fout de back-ups op de VPS verwijdert, zouden ze bij de volgende run ook op het doel worden verwijderd. Verwijder oude back-ups op de doelserver liever daar, bijvoorbeeld met een eigen cron en find … -mtime +30 -delete.
Bedenk dat een aanvaller die de VPS overneemt, de sleutel zaloha ook rechtstreeks kan gebruiken en de back-ups op het doel kan verwijderen. Daartegen beschermt alleen een kopie waar je vanaf de VPS niet bij kunt: bijvoorbeeld een doelserver die de back-ups zelf ophaalt (rsync uitgevoerd op het doel), of opslag met versiegeschiedenis.
restic (voor gevorderden)#
restic slaat back-ups versleuteld en met deduplicatie op: gegevens die zich herhalen, worden maar één keer opgeslagen, zodat je tientallen dagelijkse versies kunt bewaren met weinig ruimte. Het kan back-ups maken naar een SFTP-server en ook naar cloudopslag.
Installeer restic:
apt -y install restic.Maak een bestand aan met het wachtwoord van de repository en beperk de rechten ervan:
bash nano /root/.restic-heslo chmod 600 /root/.restic-hesloZet in het bestand een lang, willekeurig wachtwoord (wachtwoordgenerator).
Zonder wachtwoord kun je de back-ups niet herstellen
restic versleutelt de gegevens. Raak je het wachtwoord kwijt, dan kan niemand de back-ups nog ontsleutelen, ook jij niet. Bewaar het ook buiten de VPS (in een wachtwoordmanager).
Maak de repository aan op de doelserver:
bash restic -r sftp:zalohy:/srv/zalohy/restic-vps1 --password-file /root/.restic-heslo init-r sftp:– een repository via SFTP;zalohy:/ srv/ zalohy/ restic-vps1 zalohyis de snelkoppeling uit~/.ssh/config.--password-file– het bestand met het wachtwoord, zodat restic er niet om vraagt (nodig voor cron).init– maakt een nieuwe, lege repository aan. Je zietcreated restic repository ….
Maak een back-up (je kunt het commando in het script zetten in plaats van het
tar-archief; laat de export van de database staan):bash restic -r sftp:zalohy:/srv/zalohy/restic-vps1 --password-file /root/.restic-heslo backup /etc /home /root /var/www /opt /srv /var/backups/vpsVerwijder oude versies volgens een regel:
bash restic -r sftp:zalohy:/srv/zalohy/restic-vps1 --password-file /root/.restic-heslo forget --keep-daily 7 --keep-weekly 4 --keep-monthly 6 --pruneforget– verwijdert de versies (snapshots) die de regel niet bewaart.--keep-daily 7– bewaart de laatste versie van elk van de 7 laatste dagen met een back-up.--keep-weekly 4,--keep-monthly 6– daarnaast één versie per week over 4 weken en één per maand over 6 maanden.--prune– verwijdert meteen de gegevens waar geen enkele versie meer naar verwijst (maakt ruimte vrij).
Handige commando's:
Commando (met -r … en --password-file …) | Wat het doet |
|---|---|
snapshots | De lijst met opgeslagen versies, met datum. |
restore latest --target /tmp/obnova | Herstelt de laatste versie naar de map /tmp/obnova. |
restore latest --target /tmp/obnova --include /etc/nginx | Herstelt alleen de gekozen map. |
check | Controleert de integriteit van de repository. |
Een alternatief voor restic is BorgBackup (documentatie (opent in een nieuw venster)), dat volgens een vergelijkbaar principe werkt.
Het herstellen testen#
Een back-up die je nooit hebt geprobeerd te herstellen, is alleen maar hoop. Probeer het ten minste af en toe uit:
Toon de inhoud van het archief:
tar -tzf /var/.backups/ vps/ soubory-2026-10-01. tar. gz | head Pak één bestand uit in een tijdelijke map:
bash mkdir -p /tmp/obnova tar -xzf /var/backups/vps/soubory-2026-10-01.tar.gz -C /tmp/obnova etc/nginx/nginx.conf-x– uitpakken,-z– het formaat gzip,-f– uit een bestand.-C /tmp/obnova– waar wordt uitgepakt (zo wordt het actieve bestand niet overschreven).etc/nginx/nginx.conf– wat er wordt uitgepakt (het pad zonder de eerste schuine streep).
Controleer de export van de database:
zcat /var/moet het begin van een SQL-export tonen.backups/ vps/ db-2026-10-01. sql. gz | head -n 20 Doe een volledige test (de database herstellen, de applicatie starten) op een andere VPS, een test-VPS, niet op je productie-VPS.
Een database herstellen overschrijft de huidige gegevens
Het commando gunzip < db-….sql.gz | mariadb herstelt alle databases uit de back-up en overschrijft hun huidige inhoud. Voer het op een productie-VPS alleen uit als je de toestand uit de back-up echt wilt terugzetten. Hoe je één database herstelt, staat in de handleiding MariaDB op een VPS.
Controle#
- De ochtend na de eerste nacht:
tail /var/log/zaloha.logbevat de regelback-up klaar. ls -lh /var/backups/vpstoont nieuwe bestanden met de datum van vandaag en een redelijke grootte (niet 0 bytes).- Op de doelserver staan dezelfde bestanden (rsync), of
restic snapshotstoont de versie van vandaag.
Als iets niet werkt#
Cron heeft het script niet uitgevoerd#
Controleer of cron draait en wat er in het log is geschreven:
systemctl status cron
journalctl -u cron -n 50Veelvoorkomende oorzaken: in de crontab ontbreekt het volledige pad naar het script, het script heeft geen uitvoerrecht (chmod 700), of je hebt de crontab van een andere gebruiker dan root aangepast (crontab -l toont die).
mariadb-dump: Got error: 1045: "Access denied for user …"#
Het script draait niet als root, of de root van de database gebruikt een wachtwoord in plaats van de unix socket. Voer het script uit vanuit de crontab van root. Heeft root in de database een wachtwoord, sla dat dan op in het bestand /root/.my.cnf, waar mariadb-dump het zelf uit leest:
[client]
user=root
password=<DB_ROOT_PASSWORD>[client]– de groep met opties voor alle clientprogramma's van MariaDB (mariadb,mariadb-dump).user,password– de inloggegevens. Vul in plaats van<DB_ROOT_PASSWORD>het wachtwoord van de databasegebruikerrootin (zonder de punthaken).
Beveilig het bestand met het commando chmod 600 /root/.my.cnf, zodat niemand anders het wachtwoord kan lezen.
De back-up is 0 bytes of verdacht klein#
Het script is halverwege met een fout gestopt. Voer het handmatig uit en lees de fout. Dankzij set -euo pipefail blijft een fout bij de export niet onopgemerkt.
Permission denied (publickey) bij rsync of restic#
De doelserver heeft de sleutel niet geaccepteerd. Controleer ssh zalohy. Vraagt die om een wachtwoord of mislukt het, upload de sleutel dan opnieuw (ssh-copy-id) en controleer of IdentityFile in /root/.ssh/config naar het juiste bestand verwijst.
restic: Fatal: wrong password or no key found#
Het wachtwoord in het bestand /root/.restic-heslo komt niet overeen met de repository. Controleer of er in het bestand geen extra spatie of een ander wachtwoord staat.
restic: Fatal: unable to open config file … Is there a repository at the following location?#
Op het opgegeven pad bestaat geen repository (een typefout in het pad, of je hebt init niet uitgevoerd).
De schijf raakt vol#
De back-ups worden niet verwijderd, of ze zijn te groot. Controleer of de stap find … -delete wordt uitgevoerd, verlaag UCHOVAT_DNI en laat mappen met veel gegevens weg waarvan je op een andere manier een back-up maakt.
Samenvatting
- De back-ups van je VPS beheren wij; op het tabblad Back-ups herstel je de hele schijf, nieuwere gegevens gaan daarbij verloren.
- Losse bestanden en databases herstel je alleen uit je eigen back-ups.
- Maak back-ups van databases met een export via
mariadb-dump, van bestanden met eentar-archief of met restic. - Voer het script uit met cron en stuur de back-ups naar een plek buiten de VPS (rsync zonder
--delete, restic met versleuteling). - Test het herstellen regelmatig.