Kopie zapasowe przyrostowe na serwerze VPS przy użyciu rsync i cron
Wprowadzenie
Kopie zapasowe są niezbędne dla każdego serwera VPS. Chronią one przed przypadkowym usunięciem danych, błędami konfiguracji, uszkodzeniem danych lub naruszeniem bezpieczeństwa serwera.
W niniejszym podręczniku wyjaśniono, jak skonfigurować kopie zapasowe przyrostowe przy użyciu:
- rsync — wydajnego narzędzia do kopiowania plików
- dowiązania twarde — pozwalające uniknąć powielania danych w poszczególnych kopiach zapasowych
- cron — do planowania automatycznych kopii zapasowych
Wynik: każda kopia przypomina pełną kopię zapasową, ale dodatkowe miejsce zajmują tylko pliki, które uległy zmianie. To podejście jest proste, niezawodne i odpowiednie dla większości typowych konfiguracji serwerów VPS.
Jak działają przyrostowe kopie zapasowe z wykorzystaniem rsync
rsync oferuje dwie kluczowe funkcje:
- Synchronizacja wyłącznie zmienionych plików
- Opcja
--link-dest: tworzy dowiązania twarde dla niezmienionych plików, umożliwiając korzystanie z wielu katalogów „pełnych” kopii zapasowych bez zajmowania dodatkowej przestrzeni dyskowej.
Przykładowa struktura katalogów:
/backups/ daily.0/ - today's backup daily.1/ - yesterday's backup daily.2/ - backup from 2 days ago
Każdy folder wygląda jak pełna kopia zapasowa, ale miejsce zajmują tylko różnice.
Wymagania wstępne
Na serwerze VPS:
- Instalacja systemu Linux
- Dostęp jako root lub użytkownik z uprawnieniami sudo
- Wystarczająca ilość miejsca na dysku na migawki kopii zapasowych
- Opcjonalnie: zdalna pamięć masowa, jeśli kopia zapasowa jest tworzona na innym serwerze
W razie potrzeby zainstaluj rsync:
sudo apt update sudo apt install rsync
Zatrzymaj serwery baz danych lub wyklucz ich katalogi danych z kopii zapasowej. Tworzenie kopii zapasowej bazy danych online za pomocą rsync może spowodować uszkodzenie kopii zapasowej bazy danych.
Tworzenie katalogów kopii zapasowych
Wybierz lokalizację dla kopii zapasowych. Zazwyczaj:
- Lokalny system plików:
/backups/ - Dysk zewnętrzny:
/mnt/storage/backups/ - Serwer zdalny przez SSH:
user@backup-server:/data/backups/
Przykład (lokalnie):
sudo mkdir -p /backups sudo chmod 700 /backups
Podstawowe polecenie rsync do tworzenia kopii przyrostowych
Poniżej znajduje się kluczowe polecenie rsync:
rsync -a --delete \ --link-dest=/backups/daily.1 \ /source/data/ \ /backups/daily.0/
Objaśnienie:
-a— tryb archiwizacji (zachowuje uprawnienia, właścicieli, znaczniki czasu, dowiązania symboliczne)--delete— usuwa pliki usunięte w źródle--link-dest— tworzy twarde dowiązania do niezmienionych plików z poprzedniej kopii/source/data/— katalog, którego kopię zapasową chcesz utworzyć/backups/daily.0/— dzisiejsza migawka
Skrypt rotacji dla codziennych migawek
Utwórz skrypt, który:
- rotację istniejących kopii zapasowych
- Utworzenie nowej kopii przyrostowej
- Zachowanie 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/" # 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
Zapisz i zamknij. Nadaj uprawnienia do uruchamiania:
sudo chmod +x /usr/local/bin/backup_daily.sh
Możesz zmienić zmienne na początku skryptu, aby dostosować go do swoich potrzeb. Na przykład, jeśli nie potrzebujesz pełnej kopii zapasowej systemu plików root, zmień SOURCE na konkretny katalog.
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/kopie_zapasowe
Planowanie kopii zapasowych za pomocą crona
Edytuj plik crontab:
sudo crontab -e
Dodaj (kopia zapasowa codziennie o godz. 03:00):
0 3 * * * /usr/local/bin/backup_daily.sh >/var/log/backup.log 2>&1
Zapewni to regularne, automatyczne tworzenie kopii zapasowych.
Tworzenie kopii zapasowej na serwerze zdalnym (opcjonalnie)
Jeśli chcesz utworzyć kopię zapasową poza lokalizacją, wykonaj poniższe kroki. Utwórz folder docelowy na serwerze docelowym:
mkdir -p /backups
Upewnij się, że klucze SSH są skonfigurowane. Wykonaj następujące polecenie, aby wygenerować swój klucz SSH:
ssh-keygen
Zastąp <YOUR_REMOTE_USER> swoją nazwą użytkownika na serwerze zdalnym, a <YOUR_REMOTE_SERVER> nazwą domeny serwera zdalnego, a następnie wykonaj poniższe polecenie, aby skopiować klucz SSH na serwer zdalny:
ssh-copy-id <YOUR_REMOTE_USER>@<YOUR_REMOTE_SERVER>
Usuń komentarze ze zmiennych REMOTE_USER i REMOTE_SERVER na początku pliku backup_daily.sh, zastąp <YOUR_REMOTE_USER> swoją nazwą użytkownika na serwerze zdalnym, a <YOUR_REMOTE_SERVER> nazwą domeny serwera zdalnego, a następnie zapisz plik backup_daily.sh, aby włączyć tworzenie kopii zapasowych na serwerze zdalnym.
Przesyłanie kopii zapasowych do INTROSERV CloudBox
INTROSERV zapewnia przestrzeń dyskową online, która pozwala automatycznie lub ręcznie zapisywać bezpieczne kopie ważnych plików i danych na serwerach zdalnych. Aby używać jej jako zdalnej przestrzeni do tworzenia kopii zapasowych, zaloguj się do interfejsu internetowego CloudBox i dodaj swój klucz publiczny SSH do profilu. Ustawienia profilu znajdują się w prawym górnym rogu.

Wprowadź swój klucz publiczny SSH w sekcji „Klucze publiczne”, aby przesłać klucz na serwer.

Usuń komentarze ze zmiennych REMOTE_USER i REMOTE_SERVER na początku pliku backup_daily.sh, zastąp <YOUR_REMOTE_USER> swoją nazwą użytkownika na serwerze CloudBox, <YOUR_REMOTE_SERVER> na nazwę domeny serwera CloudBox i zapisz plik backup_daily.sh, aby włączyć zdalne tworzenie kopii zapasowych.
Testowanie kopii zapasowych
Zanim zaczniesz polegać na systemie, przetestuj kopie zapasowe.
- Uruchom skrypt ręcznie:
sudo /usr/local/bin/backup_daily.sh - Sprawdź rozmiary:
du -sh /backups/*.Powinna istnieć tylko jedna duża kopia zapasowa. - Sprawdź 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óć wszystko:
sudo rsync -a /backups/daily.0/ /
Przywracanie katalogów systemowych powoduje nadpisanie bieżących plików.
Kwestie bezpieczeństwa
- Należy stosować restrykcyjne uprawnienia do katalogów kopii zapasowych (
chmod 700). - W przypadku korzystania z SSH wyłącz logowanie za pomocą hasła i używaj wyłącznie kluczy.
- Jeśli to możliwe, nie przechowuj kopii zapasowych na tym samym dysku co serwer.
- W razie potrzeby szyfruj zdalne kopie zapasowe za pomocą LUKS lub szyfrowanej pamięci masowej.
Monitorowanie i rejestrowanie
Rejestracja została już dodana do crona: /var/log/backup.log
Sprawdzaj regularnie:
tail -f /var/log/backup.log
Wniosek
Korzystanie z rsync w połączeniu z cronem zapewnia:
- Szybkie kopie przyrostowe
- Efektywne wykorzystanie miejsca na dysku dzięki dowiązaniom twardym
- Prosty proces przywracania danych
- W pełni zautomatyzowane planowanie
Metoda ta jest niezawodna i łatwa w użyciu dla początkujących administratorów oraz doskonale sprawdza się w środowiskach VPS z systemem Linux.