Kopie zapasowe przyrostowe na VPS przy użyciu rsync i cron
Wprowadzenie
Kopie zapasowe są niezbędne dla każdego VPS. Chronią przed przypadkowymi usunięciami, błędami konfiguracji, uszkodzeniem danych lub naruszeniem bezpieczeństwa serwera.
Ten podręcznik wyjaśnia, jak skonfigurować kopie zapasowe przyrostowe za pomocą:
- rsync — efektywne narzędzie do kopiowania plików
- twardych linków — aby uniknąć duplikacji danych w każdej kopii zapasowej
- cron — do planowania automatycznych kopii zapasowych
Rezultat: każda migawka wygląda jak pełna kopia zapasowa, ale tylko zmienione pliki zajmują dodatkowe miejsce. To podejście jest proste, niezawodne i odpowiednie dla większości typowych konfiguracji VPS.
Jak działają kopie zapasowe przyrostowe z rsync
rsync oferuje dwie kluczowe funkcje:
- Synchronizacja tylko zmienionych plików
- Opcja
--link-dest: tworzy twarde linki dla niezmienionych plików, umożliwiając posiadanie wielu katalogów "pełnych" kopii zapasowych bez zajmowania dodatkowego miejsca.
Przykład struktury katalogów:
/backups/ daily.0/ - dzisiejsza kopia zapasowa daily.1/ - wczorajsza kopia zapasowa daily.2/ - kopia zapasowa sprzed 2 dni
Każdy folder wygląda jak pełna kopia zapasowa, ale tylko różnice zajmują miejsce.
Wymagania wstępne
Na VPS:
- Instalacja Linuxa
- Dostęp jako root lub użytkownik z sudo
- Wystarczająca ilość miejsca na dysku na migawki kopii zapasowych
- Opcjonalnie: zdalna pamięć masowa, jeśli kopia zapasowa jest tworzona na innym serwerze
Zainstaluj rsync, jeśli to konieczne:
sudo apt update
sudo apt install rsync
Ostrzeżenie: Zatrzymaj serwery baz danych lub wyklucz ich katalogi danych z kopii zapasowej. Kopia zapasowa bazy danych online za pomocą rsync może spowodować uszkodzenie kopii zapasowej bazy danych.
Tworzenie katalogów kopii zapasowych
Wybierz lokalizację dla kopii zapasowych. Zwykle:
- System plików lokalny:
/backups/ - Dysk zewnętrzny:
/mnt/storage/backups/ - Zdalny serwer przez SSH:
user@backup-server:/data/backups/
Przykład (lokalny):
sudo mkdir -p /backups
sudo chmod 700 /backups
Podstawowe polecenie rsync dla kopii zapasowych przyrostowych
Poniżej znajduje się kluczowe polecenie rsync:
rsync -a --delete \ --link-dest=/backups/daily.1 \ /source/data/ \ /backups/daily.0/
Wyjaśnienie:
-a— tryb archiwum (zachowuje uprawnienia, właścicieli, znaczniki czasu, dowiązania symboliczne)--delete— usuwa pliki usunięte w źródle--link-dest— tworzy twarde linki do niezmienionych plików w poprzedniej migawce/source/data/— katalog, który chcesz zarchiwizować/backups/daily.0/— dzisiejsza migawka
Skrypt rotacji dla dziennych migawek
Utwórz skrypt do:
- Rotacji istniejących kopii zapasowych
- Tworzenia nowej kopii zapasowej przyrostowej
- Przechowywania N dni (przykład: 7)
Utwórz plik:
sudo nano /usr/local/bin/backup_daily.sh
Wklej:
#!/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/" # Rotacja 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 # Przygotowanie katalogów kopii zapasowych mkdir -p "$BACKUP_DIR/daily.0" if [ ! -d "$BACKUP_DIR/daily.1" ]; then mkdir -p "$BACKUP_DIR/daily.1" fi # Wykonanie kopii zapasowej przyrostowej 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
Zapisz i wyjdź. Uczyń go wykonywalnym:
sudo chmod +x /usr/local/bin/backup_daily.sh
Możesz zmienić zmienne na początku skryptu, aby dostosować go do swoich potrzeb. Zmień SOURCE na konkretny katalog, jeśli nie potrzebujesz pełnej kopii zapasowej systemu plików root, na przykład.
Wykluczanie niepotrzebnych katalogów
Utwórz plik wykluczeń:
sudo nano /etc/backup-exclude.txt
Typowe wykluczenia:
/proc/sys/tmp/run/dev/mnt/media/var/cache/backups
Planowanie kopii zapasowych za pomocą cron
Edytuj crontab:
sudo crontab -e
Dodaj (kopia zapasowa o 03:00 codziennie):
0 3 * * * /usr/local/bin/backup_daily.sh >/var/log/backup.log 2>&1
To zapewnia regularne automatyczne migawki.
Tworzenie kopii zapasowej na zdalnym serwerze (opcjonalnie)
Jeśli chcesz mieć kopię zapasową poza miejscem, wykonaj następujące kroki. Utwórz folder docelowy na serwerze docelowym:
mkdir -p /backups
Upewnij się, że klucze SSH są skonfigurowane. Wykonaj następne polecenie, aby wygenerować klucz SSH:
ssh-keygen
Zamień <YOUR_REMOTE_USER> na swoją nazwę użytkownika na zdalnym serwerze, <YOUR_REMOTE_SERVER> na nazwę domeny zdalnego serwera i wykonaj następujące polecenie, aby skopiować klucz SSH na zdalny serwer:
ssh-copy-id <YOUR_REMOTE_USER>@<YOUR_REMOTE_SERVER>
Odkomentuj zmienne REMOTE_USER, REMOTE_SERVER na początku pliku backup_daily.sh, zamień <YOUR_REMOTE_USER> na swoją nazwę użytkownika na zdalnym serwerze, <YOUR_REMOTE_SERVER> na nazwę domeny zdalnego serwera i zapisz backup_daily.sh, aby włączyć zdalną kopię zapasową.
Przesyłanie kopii zapasowych do INTROSERV CloudBox
INTROSERV oferuje pamięć online, która pozwala automatycznie lub ręcznie zapisywać bezpieczne kopie ważnych plików i danych na zdalnych serwerach. Aby użyć jej jako zdalnej pamięci kopii zapasowej, zaloguj się do interfejsu webowego CloudBox i dodaj swój publiczny klucz ssh do profilu. Ustawienia profilu znajdują się w prawym górnym rogu.

Wstaw swój publiczny klucz SSH w sekcji "Public keys", aby przesłać klucz na serwer.

Odkomentuj zmienne REMOTE_USER, REMOTE_SERVER na początku pliku backup_daily.sh, zamień <YOUR_REMOTE_USER> na swoją nazwę użytkownika na serwerze CloudBox, <YOUR_REMOTE_SERVER> na nazwę domeny serwera CloudBox i zapisz backup_daily.sh, aby włączyć zdalną kopię zapasową.
Testowanie kopii zapasowych
Zanim zaczniesz polegać na swoim systemie, przetestuj kopie zapasowe.
- Uruchom skrypt ręcznie:
sudo /usr/local/bin/backup_daily.sh - Sprawdź rozmiary:
du -sh /backups/*. Powinna być tylko jedna duża kopia zapasowa. - Zweryfikuj integralność plików:
ls -l /backups/daily.0/etc/
Przywracanie danych
Możesz przywrócić dowolny pojedynczy plik:
cp /backups/daily.2/etc/nginx/nginx.conf /etc/nginx/
Lub przywrócić wszystko:
sudo rsync -a /backups/daily.0/ /
Ostrzeżenie: Przywracanie katalogów systemowych nadpisuje bieżące pliki.
Rozważania dotyczące bezpieczeństwa
- Używaj ścisłych uprawnień na katalogach kopii zapasowych (
chmod 700). - Jeśli używasz SSH, wyłącz logowanie hasłem, używaj tylko kluczy.
- Nie przechowuj kopii zapasowych na tym samym dysku co serwer, jeśli to możliwe.
- Szyfruj zdalne kopie zapasowe za pomocą LUKS lub zaszyfrowanej pamięci, jeśli to konieczne.
Monitorowanie i logowanie
Logowanie jest już dodane w cron: /var/log/backup.log
Sprawdzaj regularnie:
tail -f /var/log/backup.log
Podsumowanie
Użycie rsync z cron oferuje:
- Szybkie kopie zapasowe przyrostowe
- Efektywne wykorzystanie dysku dzięki twardym linkom
- Prosty proces przywracania
- W pełni zautomatyzowane planowanie
Ta metoda jest niezawodna i łatwa dla początkujących administratorów i działa doskonale na konfiguracjach VPS z systemem Linux.