Inkrementalne varnostne kopije na VPS z uporabo rsync in cron
Uvod
Varnostne kopije so bistvene za vsak VPS. Ščitijo vas pred nenamernimi izbrisi, napakami v konfiguraciji, poškodovanjem podatkov ali kompromitacijo strežnika.
Ta priročnik pojasnjuje, kako nastaviti inkrementalne varnostne kopije z uporabo:
- rsync — učinkovito orodje za kopiranje datotek
- trdih povezav — da se izognete podvajanju podatkov v vsaki varnostni kopiji
- cron — za načrtovanje samodejnih varnostnih kopij
Rezultat: vsak posnetek izgleda kot popolna varnostna kopija, vendar le spremenjene datoteke zavzamejo dodaten prostor. Ta pristop je preprost, zanesljiv in primeren za večino običajnih nastavitev VPS.
Kako delujejo inkrementalne varnostne kopije z rsync
rsync ponuja dve ključni funkciji:
- Sinhronizacija samo spremenjenih datotek
- Možnost
--link-dest: ustvarja trde povezave za nespremenjene datoteke, kar omogoča več "polnih" imenikov varnostnih kopij brez porabe dodatnega prostora.
Primer strukture imenika:
/backups/ daily.0/ - današnja varnostna kopija daily.1/ - včerajšnja varnostna kopija daily.2/ - varnostna kopija od predvčerajšnjim
Vsaka mapa se zdi kot popolna varnostna kopija, vendar le razlike zavzamejo prostor.
Predpogoji
Na VPS:
- Namestitev Linuxa
- Dostop kot root ali uporabnik s sudo
- Dovolj prostora na disku za posnetke varnostnih kopij
- Neobvezno: oddaljeno shranjevanje, če varnostno kopirate na drug strežnik
Namestite rsync, če je potrebno:
sudo apt update
sudo apt install rsync
Opozorilo: Ustavite svoje strežnike baz podatkov ali izključite njihove imenike podatkov iz varnostne kopije. Spletna varnostna kopija baze podatkov prek rsync lahko povzroči poškodovano varnostno kopijo baze podatkov.
Ustvarjanje imenikov za varnostne kopije
Izberite lokacijo 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 rsync ukaz za inkrementalne varnostne kopije
Spodaj je ključni rsync ukaz:
rsync -a --delete \ --link-dest=/backups/daily.1 \ /source/data/ \ /backups/daily.0/
Pojasnilo:
-a— arhivski način (ohranja dovoljenja, lastnike, časovne žige, simbolne povezave)--delete— odstrani datoteke, izbrisane na viru--link-dest— ustvari trde povezave do nespremenjenih datotek v prejšnjem posnetku/source/data/— imenik, ki ga želite varnostno kopirati/backups/daily.0/— današnji posnetek
Rotacijski skript za dnevne posnetke
Ustvarite skript za:
- Rotacijo obstoječih varnostnih kopij
- Ustvarjanje nove inkrementalne varnostne kopije
- Ohranitev 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/" # Rotacija 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 # Priprava imenikov za varnostne kopije mkdir -p "$BACKUP_DIR/daily.0" if [ ! -d "$BACKUP_DIR/daily.1" ]; then mkdir -p "$BACKUP_DIR/daily.1" fi # Izvedba inkrementalne varnostne kopije 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 izstopite. Naredite ga izvedljivega:
sudo chmod +x /usr/local/bin/backup_daily.sh
Spremenite lahko spremenljivke na vrhu skripta, da ga prilagodite svojim potrebam. Spremenite SOURCE na določen imenik, če ne potrebujete popolne varnostne kopije korenskega datotečnega sistema, na primer.
Izključitev nepotrebnih imenikov
Ustvarite datoteko za izključitev:
sudo nano /etc/backup-exclude.txt
Tipične izključitve:
/proc/sys/tmp/run/dev/mnt/media/var/cache/backups
Načrtovanje varnostnih kopij s cron
Uredite crontab:
sudo crontab -e
Dodajte (varnostna kopija ob 03:00 vsak dan):
0 3 * * * /usr/local/bin/backup_daily.sh >/var/log/backup.log 2>&1
To zagotavlja redne samodejne posnetke.
Varnostno kopiranje na oddaljeni strežnik (neobvezno)
Če želite varnostno kopijo izven lokacije, sledite naslednjim korakom. Ustvarite ciljno mapo na ciljnem strežniku:
mkdir -p /backups
Prepričajte se, da so SSH ključi konfigurirani. Izvedite naslednji ukaz za generiranje vašega SSH ključa:
ssh-keygen
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 in izvedite naslednji ukaz za kopiranje vašega SSH ključa na oddaljeni strežnik:
ssh-copy-id <YOUR_REMOTE_USER>@<YOUR_REMOTE_SERVER>
Odkomenirajte spremenljivki REMOTE_USER, REMOTE_SERVER na vrhu vašega 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 in shranite backup_daily.sh za omogočanje oddaljene varnostne kopije.
Nalaganje varnostnih kopij na 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 svoje oddaljeno shranjevanje varnostnih kopij, se prijavite v spletni vmesnik CloudBox in dodajte svoj javni ssh ključ v profil. Nastavitve profila se nahajajo v zgornjem desnem kotu.

Vstavite svoj javni SSH ključ v razdelek "Javni ključi" za nalaganje vašega ključa na strežnik.

Odkomenirajte spremenljivki REMOTE_USER, REMOTE_SERVER na vrhu vašega backup_daily.sh, zamenjajte <YOUR_REMOTE_USER> z vašim uporabniškim imenom na strežniku CloudBox, <YOUR_REMOTE_SERVER> z imenom domene vašega strežnika CloudBox in shranite backup_daily.sh za omogočanje oddaljene varnostne kopije.
Testiranje varnostnih kopij
Preden se zanesete na svoj sistem, testirajte 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
Lahko obnovite katero koli posamezno datoteko:
cp /backups/daily.2/etc/nginx/nginx.conf /etc/nginx/
Ali obnovite vse:
sudo rsync -a /backups/daily.0/ /
Opozorilo: Obnavljanje sistemskih imenikov prepiše trenutne datoteke.
Varnostni premisleki
- Uporabite stroga dovoljenja na imenikih varnostnih kopij (
chmod 700). - Če uporabljate SSH, onemogočite prijavo z geslom, uporabljajte samo ključe.
- Če je mogoče, ne shranjujte varnostnih kopij na isti disk kot strežnik.
- Šifrirajte oddaljene varnostne kopije z uporabo LUKS ali šifriranega shranjevanja, če je potrebno.
Nadzor in beleženje
Beleženje je že dodano v cron: /var/log/backup.log
Redno preverjajte:
tail -f /var/log/backup.log
Zaključek
Uporaba rsync s cron ponuja:
- Hitre inkrementalne varnostne kopije
- Učinkovito uporabo diska prek trdih povezav
- Preprost postopek obnove
- Popolnoma avtomatizirano načrtovanje
Ta metoda je zanesljiva in enostavna za začetnike administratorje ter deluje odlično na linux VPS nastavitvah.