Postopna varnostna kopiranja na VPS-ju z uporabo rsync in cron
Uvod
Varnostne kopije so bistvene za vsak VPS. Zaščitijo vas pred naključnim brisanjem, napakami pri konfiguraciji, poškodbami podatkov ali ogrožanjem strežnika.
V tem priročniku je pojasnjeno, kako nastaviti inkrementalne varnostne kopije z uporabo:
- rsync — učinkovitega orodja za kopiranje datotek
- trdih povezav — za preprečevanje podvajanja podatkov v vsaki varnostni kopiji
- cron — za načrtovanje avtomatskih varnostnih kopij
Rezultat: vsaka varnostna kopija je podobna popolni varnostni kopiji, vendar dodatni prostor zavzemajo le spremenjene datoteke. Ta pristop je preprost, zanesljiv in primeren za večino običajnih nastavitev VPS-jev.
Kako delujejo inkrementalne varnostne kopije z rsync
rsync ponuja dve ključni funkcionalnosti:
- Sinhronizacijo le spremenjenih datotek
- Opcija
--link-dest: ustvari trdne povezave za nespremenjene datoteke, kar omogoča več »popolnih« imenikov varnostnih kopij, ne da bi porabljali dodatni prostor.
Primer strukture map:
/backups/ daily.0/ - today's backup daily.1/ - yesterday's backup daily.2/ - backup from 2 days ago
Vsaka mapa se prikaže kot popolna varnostna kopija, vendar prostor zavzemajo le razlike.
Predpogoji
Na VPS:
- Namestitev sistema Linux
- Dostop kot root ali uporabnik s sudo
- Dovolj prostora na disku za varnostne posnetke
- Neobvezno: oddaljeno shranjevanje, če varnostno kopirate na drug strežnik
Po potrebi namestite rsync:
sudo apt update sudo apt install rsync
Ustavite strežnike z bazami podatkov ali izključite njihove mape s podatki iz varnostne kopije. Spletno varnostno kopiranje baz podatkov prek rsync lahko povzroči poškodovano varnostno kopijo baze podatkov.
Ustvarjanje map za varnostne kopije
Izberite mesto za varnostne kopije. Običajno:
- Lokalni datotečni sistem:
/backups/ - Zunanji disk:
/mnt/storage/backups/ - Oddaljeni strežnik prek SSH:
user@backup-server:/data/backups/
Primer (lokalno):
sudo mkdir -p /backups sudo chmod 700 /backups
Osnovni ukaz rsync za inkrementalne varnostne kopije
Spodaj je ključni ukaz rsync:
rsync -a --delete \ --link-dest=/backups/daily.1 \ /source/data/ \ /backups/daily.0/
Pojasnilo:
-a— arhivski način (ohranja dovoljenja, lastnike, časovne oznake, simbolične povezave)--delete— odstrani datoteke, ki so bile izbrisane na izvoru--link-dest— ustvari trdne povezave do nespremenjenih datotek v prejšnjem posnetku/source/data/— imenik, ki ga želite varnostno kopirati/backups/daily.0/— današnji posnetek
Skript za rotacijo dnevnih posnetkov
Ustvarite skript za:
- rotacijo obstoječih varnostnih kopij
- Ustvarite novo inkrementalno varnostno kopijo
- Shranjevanje N dni (primer: 7)
Ustvarite datoteko:
sudo nano /usr/local/bin/backup_daily.sh
Prilepite:
#!/bin/bash BACKUP_DIR="/backups/" SOURCE="/" EXCLUDE="/etc/backup-exclude.txt" DAYS="7" #REMOTE_USER="<YOUR_REMOTE_USER>" #REMOTE_SERVER="<YOUR_REMOTE_SERVER>" REMOTE_DIR="/backups/" # Rotate for ((i=DAYS-1; i>=0; i--)); do if [ -d "$BACKUP_DIR/daily.$i" ]; then rm -rf "$BACKUP_DIR/daily.$((i+1))" mv "$BACKUP_DIR/daily.$i" "$BACKUP_DIR/daily.$((i+1))" fi done # Prepare backup directories mkdir -p "$BACKUP_DIR/daily.0" if [ ! -d "$BACKUP_DIR/daily.1" ]; then mkdir -p "$BACKUP_DIR/daily.1" fi # Perform incremental backup rsync -a --delete \ --link-dest="$BACKUP_DIR/daily.1" \ --exclude-from="$EXCLUDE" \ "$SOURCE" "$BACKUP_DIR/daily.0" if [ -n "$REMOTE_USER" ] && [ -n "$REMOTE_SERVER" ] && [ -n "$REMOTE_DIR" ]; then rsync -azv --delete "$BACKUP_DIR" "$REMOTE_USER@$REMOTE_SERVER:$REMOTE_DIR" fi
Shranite in zaprite. Nastavite izvedljivost:
sudo chmod +x /usr/local/bin/backup_daily.sh
Spremenite spremenljivke na vrhu skripta, da ga prilagodite svojim potrebam. Na primer, spremenite SOURCE v določen imenik, če ne potrebujete popolne varnostne kopije korenskega datotečnega sistema.
Izključitev nepotrebnih map
Ustvarite datoteko z izključitvami:
sudo nano /etc/backup-exclude.txt
Tipične izključitve:
/proc/sys/tmp/run/dev/mnt/media/var/cache/varnostne kopije
Načrtovanje varnostnih kopij s cronom
Uredi crontab:
sudo crontab -e
Dodajte (varnostna kopija vsak dan ob 03:00):
0 3 * * * /usr/local/bin/backup_daily.sh >/var/log/backup.log 2>&1
To zagotavlja redne avtomatske varnostne kopije.
Varnostno kopiranje na oddaljeni strežnik (neobvezno)
Če želite varnostno kopijo zunaj lokacije, sledite naslednjim korakom. Ustvarite ciljno mapo na ciljnem strežniku:
mkdir -p /backups
Preverite, ali so SSH ključi pravilno nastavljeni. Izvedite naslednji ukaz za ustvarjanje vašega SSH ključa:
ssh-keygen
Zamenjajte <YOUR_REMOTE_USER> s svojim uporabniškim imenom na oddaljenem strežniku, <YOUR_REMOTE_SERVER> pa z imenom domene vašega oddaljenega strežnika in izvedite naslednji ukaz, da kopirate svoj SSH ključ na oddaljeni strežnik:
ssh-copy-id <YOUR_REMOTE_USER>@<YOUR_REMOTE_SERVER>
Odstranite komentar iz spremenljivk REMOTE_USER in REMOTE_SERVER na vrhu datoteke backup_daily.sh, zamenjajte <YOUR_REMOTE_USER> z vašim uporabniškim imenom na oddaljenem strežniku, <YOUR_REMOTE_SERVER> z imenom domene vašega oddaljenega strežnika ter shranite datoteko backup_daily.sh, da omogočite varnostno kopiranje na oddaljenem strežniku.
Prenos varnostnih kopij v INTROSERV CloudBox
INTROSERV ponuja spletno shranjevanje, ki vam omogoča samodejno ali ročno shranjevanje varnih kopij vaših pomembnih datotek in podatkov na oddaljenih strežnikih. Če ga želite uporabiti kot oddaljeno shranjevališče varnostnih kopij, se prijavite v spletni vmesnik CloudBox in dodajte svoj javni SSH ključ v profil. Nastavitve profila se nahajajo v zgornjem desnem kotu.

Vnesite svoj javni SSH ključ v razdelek »Javni ključi«, da ključ naložite na strežnik.

Odstranite komentar iz spremenljivk REMOTE_USER in REMOTE_SERVER na vrhu datoteke backup_daily.sh, nadomestite <YOUR_REMOTE_USER> s svojim uporabniškim imenom na strežniku CloudBox, <YOUR_REMOTE_SERVER> z imenom domene vašega strežnika CloudBox ter shranite datoteko backup_daily.sh, da omogočite oddaljeno varnostno kopiranje.
Preizkušanje varnostnih kopij
Preden se zanesete na svoj sistem, preizkusite varnostne kopije.
- Ročno zaženite skript:
sudo /usr/local/bin/backup_daily.sh - Preverite velikosti:
du -sh /backups/*.Obstajati mora le ena velika varnostna kopija. - Preverite celovitost datotek:
ls -l /backups/daily.0/etc/
Obnavljanje podatkov
Obnovite lahko katero koli posamezno datoteko:
cp /backups/daily.2/etc/nginx/nginx.conf /etc/nginx/
Ali pa obnovite vse:
sudo rsync -a /backups/daily.0/ /
Obnova sistemskih imenikov prepiše trenutne datoteke.
Varnostna navodila
- Uporabite stroga dovoljenja za imenike varnostnih kopij (
chmod 700). - Če uporabljate SSH, onemogočite prijavo z geslom in uporabljajte izključno ključe.
- Če je mogoče, varnostnih kopij ne shranjujte na isti disk kot strežnik.
- Po potrebi šifrirajte oddaljene varnostne kopije z LUKS ali šifriranim pomnilnikom.
Spremljanje in beleženje
Dnevniški vnosi so že dodani v cron: /var/log/backup.log
Redno preverjajte:
tail -f /var/log/backup.log
Zaključek
Uporaba rsync-a s cron-om ponuja:
- hitre inkrementalne varnostne kopije
- Učinkovito izkoriščanje prostora na disku prek trdih povezav
- Preprost postopek obnovitve
- Popolnoma avtomatizirano načrtovanje
Ta metoda je zanesljiva in enostavna za začetnike ter odlično deluje na Linux VPS-jih.