VPS'de rsync ve cron kullanılarak artımlı yedeklemeler
Giriş
Yedeklemeler, her VPS için vazgeçilmezdir. Yedeklemeler, sizi yanlışlıkla silme, yapılandırma hataları, veri bozulması veya sunucunun güvenliğinin ihlal edilmesinden korur.
Bu kılavuz, aşağıdakileri kullanarak artımlı yedeklemelerin nasıl kurulacağını açıklamaktadır:
- rsync — verimli bir dosya kopyalama aracı
- sabit bağlantılar — her yedeklemede veri tekrarını önlemek için
- cron — otomatik yedeklemeleri zamanlamak için
Sonuç: Her anlık görüntü tam bir yedekleme gibi görünür, ancak yalnızca değiştirilen dosyalar fazladan yer kaplar. Bu yaklaşım basit, güvenilirdir ve en yaygın VPS kurulumları için uygundur.
rsync ile artımlı yedeklemeler nasıl çalışır?
rsync iki temel özellik sunar:
- Yalnızca değiştirilen dosyaların senkronizasyonu
--link-destseçeneği: değişmemiş dosyalar için sabit bağlantılar oluşturur ve ekstra alan tüketmeden birden fazla "tam" yedekleme dizini oluşturulmasına olanak tanır.
Dizin yapısı örneği:
/backups/ daily.0/ - today's backup daily.1/ - yesterday's backup daily.2/ - backup from 2 days ago
Her klasör tam bir yedekleme gibi görünür, ancak yalnızca farklılıklar yer kaplar.
Ön Koşullar
VPS'de:
- Linux kurulumu
- Root veya sudo yetkisine sahip kullanıcı olarak erişim
- Yedekleme anlık görüntüleri için yeterli disk alanı
- İsteğe bağlı: başka bir sunucuya yedekleme yapılıyorsa uzaktan depolama
Gerekirse rsync'i kurun:
sudo apt update sudo apt install rsync
Veritabanı sunucularınızı durdurun veya veri dizinlerini yedeklemeden hariç tutun. rsync aracılığıyla çevrimiçi veritabanı yedeklemesi, veritabanı yedeklemesinin bozulmasına neden olabilir.
Yedekleme dizinlerini oluşturma
Yedeklemeler için bir konum seçin. Genellikle:
- Yerel dosya sistemi:
/backups/ - Harici disk:
/mnt/storage/backups/ - SSH aracılığıyla uzak sunucu:
user@backup-server:/data/backups/
Örnek (yerel):
sudo mkdir -p /backups sudo chmod 700 /backups
Artımlı yedeklemeler için temel rsync komutu
Aşağıda temel rsync komutu verilmiştir:
rsync -a --delete \ --link-dest=/backups/daily.1 \ /source/data/ \ /backups/daily.0/
Açıklama:
-a— arşiv modu (izinleri, sahipleri, zaman damgalarını ve sembolik bağlantıları korur)--delete— kaynakta silinen dosyaları kaldırır--link-dest— önceki anlık görüntüdeki değişmemiş dosyalara sabit bağlantılar oluşturur/source/data/— yedeklemek istediğiniz dizin/backups/daily.0/— bugünün anlık görüntüsü
Günlük anlık görüntüler için rotasyon komut dosyası
Aşağıdakileri yapmak için bir komut dosyası oluşturun:
- Mevcut yedeklemeleri döndürmek
- Yeni bir artımlı yedekleme oluşturmak
- N gün boyunca saklayın (örnek: 7)
Dosya oluşturun:
sudo nano /usr/local/bin/backup_daily.sh
Yapıştır:
#!/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
Kaydet ve çık. Yürütülebilir hale getir:
sudo chmod +x /usr/local/bin/backup_daily.sh
Komut dosyasının üst kısmındaki değişkenleri değiştirerek komut dosyasını ihtiyaçlarınıza göre uyarlayabilirsiniz. Örneğin, kök dosya sisteminin tam yedeğine ihtiyacınız yoksa SOURCE'u belirli bir dizine değiştirin.
Gereksiz dizinleri hariç tutma
Hariç tutma dosyası oluşturun:
sudo nano /etc/backup-exclude.txt
Tipik hariç tutulanlar:
/proc/sys/tmp/run/dev/mnt/media/var/önbellek/yedeklemeler
Cron ile yedeklemeleri planlama
crontab'ı düzenleyin:
sudo crontab -e
Ekle (her gün saat 03:00'da yedekleme):
0 3 * * * /usr/local/bin/backup_daily.sh >/var/log/backup.log 2>&1
Bu, düzenli otomatik anlık görüntülerin alınmasını sağlar.
Uzak bir sunucuya yedekleme (isteğe bağlı)
Tesis dışı yedekleme yapmak istiyorsanız aşağıdaki adımları izleyin. Hedef sunucuda bir hedef klasör oluşturun:
mkdir -p /backups
SSH anahtarlarının yapılandırıldığından emin olun. SSH anahtarınızı oluşturmak için aşağıdaki komutu çalıştırın:
ssh-keygen
<YOUR_REMOTE_USER> kısmını uzak sunucudaki kullanıcı adınızla, <YOUR_REMOTE_SERVER> kısmını ise uzak sunucunuzun etki alanı adıyla değiştirin ve SSH anahtarınızı uzak sunucuya kopyalamak için aşağıdaki komutu çalıştırın:
ssh-copy-id <YOUR_REMOTE_USER>@<YOUR_REMOTE_SERVER>
backup_daily.sh dosyanızın en üstündeki REMOTE_USER ve REMOTE_SERVER değişkenlerinin yorum işaretlerini kaldırın, <YOUR_REMOTE_USER> kısmını uzak sunucudaki kullanıcı adınızla, <YOUR_REMOTE_SERVER> kısmını ise uzak sunucunuzun etki alanı adıyla değiştirin ve uzak yedeklemeyi etkinleştirmek için backup_daily.sh dosyasını kaydedin.
Yedeklemeleri INTROSERV CloudBox'a yükleme
INTROSERV, önemli dosyalarınızın ve verilerinizin güvenli kopyalarını uzak sunuculara otomatik veya manuel olarak kaydetmenize olanak tanıyan bir çevrimiçi depolama hizmeti sunar. Bunu uzak yedekleme depolama alanınız olarak kullanmak için CloudBox web arayüzüne giriş yapın ve profilinize genel SSH anahtarınızı ekleyin. Profil ayarları sağ üst köşede bulunur.

Anahtarınızı sunucuya yüklemek için "Public keys" (Genel anahtarlar) bölümüne genel SSH anahtarınızı girin.

backup_daily.sh dosyanızın en üst kısmındaki REMOTE_USER ve REMOTE_SERVER değişkenlerinin yorum işaretlerini kaldırın, <YOUR_REMOTE_USER> kısmını CloudBox sunucusundaki kullanıcı adınızla, <YOUR_REMOTE_SERVER> ifadesini CloudBox sunucunuzun etki alanı adıyla değiştirin ve uzaktan yedeklemeyi etkinleştirmek için backup_daily.sh dosyasını kaydedin.
Yedeklemeleri test etme
Sisteminize güvenmeden önce yedeklemeleri test edin.
- Komut dosyasını manuel olarak çalıştırın:
sudo /usr/local/bin/backup_daily.sh - Boyutları kontrol edin:
du -sh /backups/*.Yalnızca tek bir büyük yedekleme dosyası olmalıdır. - Dosya bütünlüğünü doğrulayın:
ls -l /backups/daily.0/etc/
Verileri geri yükleme
Herhangi bir dosyayı tek tek geri yükleyebilirsiniz:
cp /backups/daily.2/etc/nginx/nginx.conf /etc/nginx/
Veya her şeyi geri yükleyebilirsiniz:
sudo rsync -a /backups/daily.0/ /
Sistem dizinlerini geri yüklemek, mevcut dosyaların üzerine yazılır.
Güvenlik hususları
- Yedekleme dizinlerinde sıkı izinler kullanın (
chmod 700). - SSH kullanıyorsanız, şifre ile girişi devre dışı bırakın, yalnızca anahtarları kullanın.
- Mümkünse yedekleri sunucuyla aynı diskte saklamayın.
- Gerekirse, LUKS veya şifreli depolama kullanarak uzaktan yedeklemeleri şifreleyin.
İzleme ve günlük kaydı
Günlük kaydı cron'a zaten eklenmiştir: /var/log/backup.log
Düzenli olarak kontrol edin:
tail -f /var/log/backup.log
Sonuç
Cron ile rsync kullanmak şunları sağlar:
- Hızlı artımlı yedeklemeler
- Sabit bağlantılar sayesinde verimli disk kullanımı
- Basit geri yükleme süreci
- Tamamen otomatik zamanlama
Bu yöntem, acemi yöneticiler için güvenilir ve kolaydır ve Linux VPS kurulumlarında mükemmel şekilde çalışır.