vProject
Bir Kömür Göründü Kaptanım!
İçindekiler:
Giriş — Neden Yedekleme Hayati Önem Taşır?
Neyi Yedeklemeli? Dosya Yapısını Anlamak
Yedekleme Stratejileri — Tam, Artımlı ve Fark Yedekleri
Linux — Manuel Yedekleme Yöntemleri
Linux — Otomatik Backup Scriptleri (Bash)
Windows — Manuel Yedekleme Yöntemleri
Windows — Otomatik Backup Scriptleri (PowerShell)
Windows — Task Scheduler ile Zamanlama
Eklenti Tabanlı Yedekleme Çözümleri
Uzak Sunucuya (Remote) Yedekleme
Bulut Yedekleme — Google Drive, S3, Backblaze B2
Yedekleme Testi ve Geri Yükleme
Yedekleme Takvimi ve En İyi Uygulamalar
Sonuç
1. Giriş — Neden Yedekleme Hayati Önem Taşır?
Bir Minecraft sunucusu işletmek; oyuncuların emek ve zaman harcadığı canlı bir ekosistemi yönetmek demektir. Oyuncular saatler, bazen günler harcayarak inşaatlar yapar, kaynak toplar ve hikayeler oluşturur. Bu emeğin tek bir hata, donanım arızası veya siber saldırı sonucunda yok olması hem sunucu yöneticisi hem de oyuncular için yıkıcı sonuçlar doğurur.
Gerçek hayattan örnekler düşünelim: Bir disk arızası tüm dünya dosyalarını silebilir. Yanlış bir /stop yerine çalıştırılan rm -rf komutu her şeyi bir saniyede bitirebilir. Kötü niyetli bir operatör veya yanlış yapılandırılmış bir eklenti dünya dosyalarını bozabilir. DDoS saldırısı sırasında yaşanan ani kapanma, bölge dosyalarında (region files) kalıcı veri bozulmasına yol açabilir.
> Yedekleme yapmayan sunucu yöneticisi, emniyet kemeri takmayan sürücü gibidir. Kaza olmayabilir; ama olduğunda sonuç felaket olur.
İyi yapılandırılmış bir yedekleme sistemi yalnızca veri kaybını önlemez; aynı zamanda güncelleme testleri sırasında hızlı geri dönüş imkânı sağlar, oyuncu şikayetlerini çözümlemede geçmiş durumu geri yükleme fırsatı verir ve sunucu taşıma süreçlerini kolaylaştırır.
Bu rehberde hem Linux hem de Windows tabanlı Minecraft sunucuları için kapsamlı bir yedekleme altyapısı nasıl kurulur, adım adım açıklıyoruz.
2. Neyi Yedeklemeli? Dosya Yapısını Anlamak
Etkili bir yedekleme planı oluşturmadan önce hangi dosyaların kritik olduğunu anlamak gerekir. Tipik bir Minecraft sunucu dizini şöyle görünür:
/sunucu/
├── server.jar # Sunucu yazılımı (Paper, Purpur vb.)
├── server.properties # Ana yapılandırma dosyası
├── bukkit.yml # Bukkit ayarları
├── spigot.yml # Spigot ayarları
├── paper-global.yml # Paper global ayarları
├── paper-world-defaults.yml # Paper dünya ayarları
├── eula.txt # EULA onayı
├── ops.json # Operatör listesi
├── whitelist.json # Beyaz liste
├── banned-players.json # Yasaklı oyuncular
├── banned-ips.json # Yasaklı IP'ler
├── plugins/ # Tüm eklentiler ve ayarları
│ ├── EssentialsX/
│ ├── LuckPerms/
│ ├── Vault/
│ └── ...
├── world/ # Ana dünya
│ ├── region/ # .mca bölge dosyaları (en büyük kısım)
│ ├── playerdata/ # Oyuncu verileri (envanter, konum vb.)
│ ├── advancements/ # Başarımlar
│ ├── stats/ # İstatistikler
│ └── level.dat # Dünya meta verisi
├── world_nether/ # Nether boyutu
└── world_the_end/ # End boyutu
Kritiklik Sınıflandırması:
Birinci Sınıf — Her Zaman Yedekle:
- world/, world_nether/, world_the_end/ — Oyuncu emeğinin tamamı burada
- plugins/ dizini — Tüm eklenti yapılandırmaları ve veritabanları
- ops.json, whitelist.json, banned-*.json — Yönetim listeleri
- *.yml, *.properties — Sunucu yapılandırması
İkinci Sınıf — Gerektiğinde Yedekle:
- server.jar — İnternetten tekrar indirilebilir; ancak sürüm tutarlılığı için yedeklemek iyi olur
- logs/ — Sorun giderme için önemli; ancak boyutu hızla büyür, eski logları sil
Yedeklemeye Gerek Yok:
- cache/ — Otomatik yeniden oluşturulur
- libraries/ — Sunucu yazılımıyla birlikte yeniden oluşturulur
- tmp/ — Geçici dosyalar
3. Yedekleme Stratejileri — Tam, Artımlı ve Fark Yedekleri
Tam Yedek (Full Backup)
Tüm dosyaların eksiksiz bir kopyasını alır. En basit ve en güvenilir yöntemdir; ancak en fazla depolama alanı ve zaman gerektirir.
Ne zaman kullanılır: Haftalık veya büyük güncellemeler öncesi.
Avantajları: Geri yükleme işlemi tek adımda tamamlanır, bağımsız bir kopya oluşturulur.
Dezavantajları:Büyük dünyalar için depolama maliyeti yüksektir (100 GB+ dünyalar saatlerce sürebilir).
Artımlı Yedek (Incremental Backup)
Yalnızca son yedekten bu yana değişen dosyaları yedekler. Depolama alanı ve süre açısından son derece verimlidir.
Ne zaman kullanılır: Günlük veya saatlik otomatik yedeklemeler için idealdir.
Avantajları: Çok küçük boyutlar ve hızlı tamamlanma süresi.
Dezavantajları: Geri yükleme için tüm artımlı yedek zincirinin eksiksiz olması gerekir. Zincirde bir halka eksikse geri yükleme zorlaşabilir.
Fark Yedeği (Differential Backup)
Son tam yedekten bu yana değişen tüm dosyaları yedekler. Artımlı ve tam yedek arasında bir denge sunar.
Ne zaman kullanılır: Hafta içi günlük yedeklemeler, hafta sonu tam yedek stratejisinde.
Avantajları: Geri yükleme yalnızca iki adım gerektirir (son tam yedek + son fark yedeği).
Dezavantajları: Zamanla boyutu büyür; artımlı kadar verimli değildir.
Önerilen Hibrit Strateji
Küçük ve orta ölçekli Minecraft sunucuları için şu kombinasyon idealdir:
- Her gün saat 04:00'da artımlı yedek
- Her hafta Pazar saat 02:00'da tam yedek
- Her ay ilk günü arşiv tam yedek (uzun vadeli saklama)
- Büyük güncellemeler öncesi manuel tam yedek
4. Linux — Manuel Yedekleme Yöntemleri:
Otomatik sistemler kurmadan önce manuel yedeklemenin temellerini kavramak önemlidir.
Tar ile Yedekleme:
tar (Tape Archive) komutu, Linux'ta en yaygın kullanılan arşivleme aracıdır.
Rsync ile Yedekleme:
rsync, değişen dosyaları tespit edip yalnızca onları kopyaladığı için artımlı yedeklemede tardan çok daha verimlidir.
5. Linux — Otomatik Backup Scriptleri (Bash)
Temel Otomatik Yedekleme Scripti
Aşağıdaki script, sunucu çalışırken güvenli yedek almak için önce Minecraft konsoluna save-all ve save-off komutları gönderir, yedeklemeyi tamamlar, ardından save-on ile normal çalışmaya döner.
Scripti kaydet ve çalıştırılabilir yap:
Gelişmiş Yedekleme Scripti — Bildirim ve Hata Yönetimi:
Büyük sunucular için Discord webhook entegrasyonu, hata kontrolü ve daha kapsamlı raporlama içeren gelişmiş versiyon:
rsync Tabanlı Artımlı Yedekleme Scripti
Büyük dünya dosyaları için (50 GB+) rsync tabanlı artımlı yedekleme çok daha hızlıdır:
Bu yöntemin güzelliği şudur: --link-dest parametresi sayesinde değişmeyen dosyalar hard link olarak saklanır. Bu, disk alanı tüketmeden her yedekte sanki tam kopya varmış gibi görünmesini sağlar; geri yükleme ise her zaman tek klasörden yapılır.
5b. Linux — cron ile Otomatik Zamanlama:
Scriptleri belirli aralıklarla otomatik çalıştırmak için cron kullanılır.
Crontab formatı şöyledir: dakika saat gun_ayda ay gun_haftada komut
Cron ifadelerini test etmek için: [crontab.guru](https://crontab.guru) adresini kullanabilirsiniz.
6. Windows — Manuel Yedekleme Yöntemleri:
Windows üzerinde Minecraft sunucusu çalıştırıyorsanız yedekleme araçları farklıdır; ancak mantık aynıdır. Windows'ta Bash yerine PowerShell ve Komut İstemi (CMD) kullanılır.
Robocopy ile Yedekleme:
robocopy (Robust File Copy), Windows'un yerleşik güçlü dosya kopyalama aracıdır. Değişen dosyaları tespit edip yalnızca onları kopyalar; bu yüzden artımlı yedeklemede xcopyden çok daha verimlidir.
7-Zip ile Sıkıştırılmış Yedek
Windows'ta tar komutu sınırlı desteğe sahiptir; bunun yerine ücretsiz ve açık kaynaklı 7-Zip komut satırı aracı kullanılır.
Windows'ta Dahili ZIP Desteği (PowerShell)
7-Zip kurmak istemiyorsanız PowerShell'in yerleşik Compress-Archive komutuyla ZIP arşivi oluşturabilirsiniz:
> Önemli Not: Compress-Archive büyük klasörlerde (10 GB+) yavaştır ve bellek sorunları yaşayabilir. Büyük sunucular için 7-Zip komut satırı veya robocopy tercih edilmelidir.
7. Windows — Otomatik Backup Scriptleri (PowerShell)
Temel Otomatik Yedekleme Scripti
Aşağıdaki script Windows üzerinde çalışan Minecraft sunucusunu güvenli biçimde yedekler. RCON etkinse save-all ve save-off komutlarını gönderir, ardından save-on ile devam eder.
8. Windows — Task Scheduler ile Zamanlama
Linux'ta cron ne işe yarıyorsa, Windows'ta Task Scheduler (Görev Zamanlayıcı) aynı işi görür.
PowerShell ile Görev Oluşturma (Önerilen)
GUI ile Task Scheduler Kurulumu (Adım Adım):
GUI'yi tercih ediyorsanız şu adımları izleyin:
1. Win + R → taskschd.msc → Enter ile Görev Zamanlayıcı'yı aç
2. Sağ panelden "Temel Görev Oluştur" seçeneğine tıkla
3. Ad olarak MinecraftGunlukYedek yaz → İleri
4. Tetikleyici: Günlük, saat 04:00 → İleri
5. Eylem: Program başlat → İleri
6. Program: powershell.exe
Bağımsız değişken:
7. Bitir → Görev özelliklerinden "En yüksek ayrıcalıklarla çalıştır" kutusunu işaretle
PowerShell Çalıştırma İzni:
Sistemde PowerShell scriptleri engellenmiş olabilir. Script çalıştırmadan önce:
9. Eklenti Tabanlı Yedekleme Çözümleri:
Bash scriptlerine alternatif olarak Minecraft eklentileri de yedekleme işlemini üstlenebilir. Avantajı, sunucuyu durdurmaya gerek kalmadan oyun içinden güvenli yedek alınabilmesidir.
DriveBackupV2:
En popüler Minecraft yedekleme eklentilerinden biri. Google Drive, OneDrive, Dropbox ve FTP'ye doğrudan yedek gönderebilir.
CoreProtect (Blok Yedekleme):
DriveBackupV2'den farklı olarak CoreProtect, blok değişikliklerini veritabanına kaydeder. Bu sayede belirli bir oyuncunun yaptığı tahribatı geri alabilirsiniz.
CoreProtect bir yedekleme aracı değil, denetim (audit) ve geri alma aracıdır. Tam yedekleme sistemiyle birlikte kullanılmalıdır.
Chunky + Snapshot Yaklaşımı
Dünya büyükse Chunky ile dünya sınırını belirleyip bölge içi dosyaları önden oluşturabilirsiniz. Bu yaklaşım yedek boyutunu tahmin edilebilir kılar.
8. Uzak Sunucuya Yedekleme:
Yerel yedekler disk arızasına karşı koruma sağlamaz. Gerçek anlamda güvenlik için yedeklerin farklı bir fiziksel konumda saklanması şarttır.
SSH ile Uzak Sunucuya rsync
SCP ile Tek Dosya Aktarımı:
FTP / SFTP ile Yedekleme:
Barındırma sağlayıcınız FTP erişimi sunuyorsa lftp aracıyla otomatik aktarım yapılabilir:
9. Bulut Yedekleme — Google Drive, S3, Backblaze B2
Backblaze B2 (En Uygun Fiyatlı Seçenek)
Backblaze B2, S3'e kıyasla çok daha ucuz depolama sunar. rclone aracıyla kolayca entegre edilir.
Amazon S3 / DigitalOcean Spaces:
Google Drive (rclone ile):
Entegre Bulut Yedekleme Scripti:
10. Yedekleme Testi ve Geri Yükleme
Yedek almak yeterli değildir. Test edilmemiş yedek, yedek değildir. Ay da bir düzenli geri yükleme testi yapılmalıdır.
Yedekten Geri Yükleme Adımları:
Windows — Yedekten Geri Yükleme Adımları:
Yedek Dosyasını Windows'ta Test Et:
11. Yedekleme Takvimi ve En İyi Uygulamalar:
Önerilen Yedekleme Takvimi
| Sıklık | Zaman | Tür | Saklama Süresi | Konum |
|---|---|---|---|---|
| Saatlik | Her saat başı | rsync artımlı | 24 saat | Yerel disk |
| Günlük | Saat 04:00 | tar.gz tam | 7 gün | Yerel + Bulut |
| Haftalık | Pazar 02:00 | tar.gz tam | 4 hafta | Bulut |
| Aylık | 1'i 01:00 | tar.gz arşiv | 12 ay | Bulut (Cold storage) |
| Güncelleme öncesi | Manuel | tar.gz tam | Kalıcı | Yerel + Bulut |
3-2-1 Yedekleme Kuralı:
Profesyonel veri koruma stratejisinin altın standardı olan 3-2-1 kuralı şunu söyler:
- 3 kopya veri sakla (1 orijinal + 2 yedek)
- 2 farklı medya türünde sakla (örn. yerel SSD + bulut)
- 1 kopya coğrafi olarak farklı konumda olsun (farklı şehir/ülke)
Güvenlik İpuçları:
Yedekleme dizinine yalnızca minecraft kullanıcısının yazma yetkisi olmalıdır. Buluta gönderilecek yedekler şifrelenmelidir. rclone'un --crypt özelliği veya GPG şifreleme kullanılabilir.
# Şifreli dosyanın adı: mc-yedek-2026-05-01.tar.gz.gpg olur
Windows — Disk Alanı İzleme Scripti:
11. Sonuç
Etkili bir Minecraft sunucu yedekleme sistemi kurmak; tek bir script yazmaktan ibaret değil, bütünleşik bir strateji geliştirmektir. Bu rehberde öğrendiklerimizi özetleyelim:
Neyin yedekleneceğini bilin. Dünya dosyaları, plugins dizini ve yapılandırma dosyaları her zaman öncelikli olmalıdır. Cache ve kütüphane klasörleri yedeklemeden hariç tutulabilir.
Hem yerel hem uzak yedek alın. Yerel disk yedek alır ama o disk de arızalanabilir. Bulut yedeklemesi (Backblaze B2, Google Drive, S3) zorunludur. 3-2-1 kuralını benimseyin.
Otomasyonu platforma uygun araçla sağlayın. Linux'ta cron, Windows'ta Task Scheduler kullanın. Her iki platform için hazır scriptleri bu rehberde bulabilirsiniz. Manuel yedekleme unutulur; otomasyon unutmaz.
Sunucu çalışırken güvenli yedek alın. Linux'ta save-all + save-off + yedek + save-on döngüsü; Windows'ta aynı komutlar RCON üzerinden mcrcon.exe aracıyla gönderilir. Bu adım atlanırsa bölge dosyaları bozulabilir.
Yedeklerinizi test edin. Her ay en az bir geri yükleme testi yapın. Test edilmemiş yedek, yedek değildir.
Yedek boyutunu izleyin. Disk dolduğunda yedekleme sistemi sessizce başarısız olur. Disk kullanımını izleyen ve sizi uyaran bir script ekleyin.
Sıfırdan kurduğunuz bir sunucuyu veri kaybı nedeniyle kaybetmek, oyuncu tabanınızı bir daha toparlanmayacak biçimde dağıtabilir. Bu rehberdeki adımları uygulayarak sunucunuzu bu riske karşı koruma altına alın.
Giriş — Neden Yedekleme Hayati Önem Taşır?
Neyi Yedeklemeli? Dosya Yapısını Anlamak
Yedekleme Stratejileri — Tam, Artımlı ve Fark Yedekleri
Linux — Manuel Yedekleme Yöntemleri
Linux — Otomatik Backup Scriptleri (Bash)
Windows — Manuel Yedekleme Yöntemleri
Windows — Otomatik Backup Scriptleri (PowerShell)
Windows — Task Scheduler ile Zamanlama
Eklenti Tabanlı Yedekleme Çözümleri
Uzak Sunucuya (Remote) Yedekleme
Bulut Yedekleme — Google Drive, S3, Backblaze B2
Yedekleme Testi ve Geri Yükleme
Yedekleme Takvimi ve En İyi Uygulamalar
Sonuç
1. Giriş — Neden Yedekleme Hayati Önem Taşır?
Bir Minecraft sunucusu işletmek; oyuncuların emek ve zaman harcadığı canlı bir ekosistemi yönetmek demektir. Oyuncular saatler, bazen günler harcayarak inşaatlar yapar, kaynak toplar ve hikayeler oluşturur. Bu emeğin tek bir hata, donanım arızası veya siber saldırı sonucunda yok olması hem sunucu yöneticisi hem de oyuncular için yıkıcı sonuçlar doğurur.
Gerçek hayattan örnekler düşünelim: Bir disk arızası tüm dünya dosyalarını silebilir. Yanlış bir /stop yerine çalıştırılan rm -rf komutu her şeyi bir saniyede bitirebilir. Kötü niyetli bir operatör veya yanlış yapılandırılmış bir eklenti dünya dosyalarını bozabilir. DDoS saldırısı sırasında yaşanan ani kapanma, bölge dosyalarında (region files) kalıcı veri bozulmasına yol açabilir.
> Yedekleme yapmayan sunucu yöneticisi, emniyet kemeri takmayan sürücü gibidir. Kaza olmayabilir; ama olduğunda sonuç felaket olur.
İyi yapılandırılmış bir yedekleme sistemi yalnızca veri kaybını önlemez; aynı zamanda güncelleme testleri sırasında hızlı geri dönüş imkânı sağlar, oyuncu şikayetlerini çözümlemede geçmiş durumu geri yükleme fırsatı verir ve sunucu taşıma süreçlerini kolaylaştırır.
Bu rehberde hem Linux hem de Windows tabanlı Minecraft sunucuları için kapsamlı bir yedekleme altyapısı nasıl kurulur, adım adım açıklıyoruz.
2. Neyi Yedeklemeli? Dosya Yapısını Anlamak
Etkili bir yedekleme planı oluşturmadan önce hangi dosyaların kritik olduğunu anlamak gerekir. Tipik bir Minecraft sunucu dizini şöyle görünür:
/sunucu/
├── server.jar # Sunucu yazılımı (Paper, Purpur vb.)
├── server.properties # Ana yapılandırma dosyası
├── bukkit.yml # Bukkit ayarları
├── spigot.yml # Spigot ayarları
├── paper-global.yml # Paper global ayarları
├── paper-world-defaults.yml # Paper dünya ayarları
├── eula.txt # EULA onayı
├── ops.json # Operatör listesi
├── whitelist.json # Beyaz liste
├── banned-players.json # Yasaklı oyuncular
├── banned-ips.json # Yasaklı IP'ler
├── plugins/ # Tüm eklentiler ve ayarları
│ ├── EssentialsX/
│ ├── LuckPerms/
│ ├── Vault/
│ └── ...
├── world/ # Ana dünya
│ ├── region/ # .mca bölge dosyaları (en büyük kısım)
│ ├── playerdata/ # Oyuncu verileri (envanter, konum vb.)
│ ├── advancements/ # Başarımlar
│ ├── stats/ # İstatistikler
│ └── level.dat # Dünya meta verisi
├── world_nether/ # Nether boyutu
└── world_the_end/ # End boyutu
Kritiklik Sınıflandırması:
Birinci Sınıf — Her Zaman Yedekle:
- world/, world_nether/, world_the_end/ — Oyuncu emeğinin tamamı burada
- plugins/ dizini — Tüm eklenti yapılandırmaları ve veritabanları
- ops.json, whitelist.json, banned-*.json — Yönetim listeleri
- *.yml, *.properties — Sunucu yapılandırması
İkinci Sınıf — Gerektiğinde Yedekle:
- server.jar — İnternetten tekrar indirilebilir; ancak sürüm tutarlılığı için yedeklemek iyi olur
- logs/ — Sorun giderme için önemli; ancak boyutu hızla büyür, eski logları sil
Yedeklemeye Gerek Yok:
- cache/ — Otomatik yeniden oluşturulur
- libraries/ — Sunucu yazılımıyla birlikte yeniden oluşturulur
- tmp/ — Geçici dosyalar
3. Yedekleme Stratejileri — Tam, Artımlı ve Fark Yedekleri
Tam Yedek (Full Backup)
Tüm dosyaların eksiksiz bir kopyasını alır. En basit ve en güvenilir yöntemdir; ancak en fazla depolama alanı ve zaman gerektirir.
Ne zaman kullanılır: Haftalık veya büyük güncellemeler öncesi.
Avantajları: Geri yükleme işlemi tek adımda tamamlanır, bağımsız bir kopya oluşturulur.
Dezavantajları:Büyük dünyalar için depolama maliyeti yüksektir (100 GB+ dünyalar saatlerce sürebilir).
Artımlı Yedek (Incremental Backup)
Yalnızca son yedekten bu yana değişen dosyaları yedekler. Depolama alanı ve süre açısından son derece verimlidir.
Ne zaman kullanılır: Günlük veya saatlik otomatik yedeklemeler için idealdir.
Avantajları: Çok küçük boyutlar ve hızlı tamamlanma süresi.
Dezavantajları: Geri yükleme için tüm artımlı yedek zincirinin eksiksiz olması gerekir. Zincirde bir halka eksikse geri yükleme zorlaşabilir.
Fark Yedeği (Differential Backup)
Son tam yedekten bu yana değişen tüm dosyaları yedekler. Artımlı ve tam yedek arasında bir denge sunar.
Ne zaman kullanılır: Hafta içi günlük yedeklemeler, hafta sonu tam yedek stratejisinde.
Avantajları: Geri yükleme yalnızca iki adım gerektirir (son tam yedek + son fark yedeği).
Dezavantajları: Zamanla boyutu büyür; artımlı kadar verimli değildir.
Önerilen Hibrit Strateji
Küçük ve orta ölçekli Minecraft sunucuları için şu kombinasyon idealdir:
- Her gün saat 04:00'da artımlı yedek
- Her hafta Pazar saat 02:00'da tam yedek
- Her ay ilk günü arşiv tam yedek (uzun vadeli saklama)
- Büyük güncellemeler öncesi manuel tam yedek
4. Linux — Manuel Yedekleme Yöntemleri:
Otomatik sistemler kurmadan önce manuel yedeklemenin temellerini kavramak önemlidir.
Tar ile Yedekleme:
tar (Tape Archive) komutu, Linux'ta en yaygın kullanılan arşivleme aracıdır.
- Sunucuyu durdur (önemli! Çalışırken yedek alma veri bozulmasına yol açabilir)
- Bu adımı script içinde otomatize edeceğiz
Bash:
# Temel tar yedekleme
tar -czf /yedekler/minecraft-$(date +%Y-%m-%d).tar.gz /sunucu/
# Yalnızca dünya dosyalarını yedekle
tar -czf /yedekler/dunya-$(date +%Y-%m-%d_%H-%M).tar.gz \
/sunucu/world/ \
/sunucu/world_nether/ \
/sunucu/world_the_end/
# Sıkıştırma olmadan (daha hızlı, daha büyük)
tar -cf /yedekler/minecraft-$(date +%Y-%m-%d).tar /sunucu/
# Yedek içeriğini listele (test için)
tar -tzf /yedekler/minecraft-2026-05-01.tar.gz | head -20
tar parametrelerinin anlamı:
- -c — Yeni arşiv oluştur
- -z — gzip ile sıkıştır
- -f — Dosya adını belirt
- -x — Arşivi aç (extract)
- -t — İçeriği listele
Rsync ile Yedekleme:
rsync, değişen dosyaları tespit edip yalnızca onları kopyaladığı için artımlı yedeklemede tardan çok daha verimlidir.
Bash:
bash
# Temel rsync yedekleme
rsync -avz --delete /sunucu/ /yedekler/surekli/
# Uzak sunucuya rsync
rsync -avz --delete /sunucu/ kullanici@uzak-sunucu:/yedekler/minecraft/
# Bant genişliğini sınırlayarak (100 KB/s)
rsync -avz --bwlimit=100 /sunucu/ /yedekler/surekli/
rsync parametrelerinin anlamı:
- -a — Arşiv modu (izinleri, zaman damgalarını korur)
- -v — Ayrıntılı çıktı
- -z — Aktarımda sıkıştır
- --delete — Kaynakta silinenleri hedefte de sil
5. Linux — Otomatik Backup Scriptleri (Bash)
Temel Otomatik Yedekleme Scripti
Aşağıdaki script, sunucu çalışırken güvenli yedek almak için önce Minecraft konsoluna save-all ve save-off komutları gönderir, yedeklemeyi tamamlar, ardından save-on ile normal çalışmaya döner.
Bash:
bash
#!/bin/bash
# ============================================
# Minecraft Sunucu Otomatik Yedekleme Scripti
# Dosya: /usr/local/bin/mc-backup.sh
# ============================================
# --- YAPILANDIRMA ---
SUNUCU_DIZINI="/home/minecraft/sunucu"
YEDEK_DIZINI="/home/minecraft/yedekler"
SCREEN_ADI="minecraft" # screen oturumunun adı
MAX_YEDEK_SAYISI=7 # Kaç yedeği sakla (eskiler silinir)
LOG_DOSYASI="/var/log/mc-backup.log"
TARIH=$(date +%Y-%m-%d_%H-%M-%S)
# --- FONKSİYONLAR ---
log() {
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a "$LOG_DOSYASI"
}
sunucu_komut() {
screen -S "$SCREEN_ADI" -X stuff "$1\n"
}
# --- BAŞLANGIÇ ---
log "=========================================="
log "Yedekleme başlatıldı: $TARIH"
log "=========================================="
# Yedek dizini yoksa oluştur
mkdir -p "$YEDEK_DIZINI"
# Screen oturumu çalışıyor mu kontrol et
if ! screen -list | grep -q "$SCREEN_ADI"; then
log "UYARI: Minecraft sunucu oturumu ($SCREEN_ADI) bulunamadı."
log "Sunucu çalışmıyor, doğrudan yedekleme yapılıyor..."
else
# Oyunculara bildir
log "Oyunculara yedekleme bildirimi gönderiliyor..."
sunucu_komut "say [Sistem] Otomatik yedekleme başlıyor, kısa süre lag yaşanabilir."
sleep 2
# Dünyayı kaydet ve otomatik kaydetmeyi durdur
log "Dünya kaydediliyor..."
sunucu_komut "save-all"
sleep 5
sunucu_komut "save-off"
sleep 3
log "Otomatik kaydetme durduruldu."
fi
# --- YEDEKLEME ---
log "Sıkıştırma başlıyor..."
YEDEK_DOSYASI="$YEDEK_DIZINI/mc-yedek-$TARIH.tar.gz"
tar -czf "$YEDEK_DOSYASI" \
--exclude="$SUNUCU_DIZINI/logs" \
--exclude="$SUNUCU_DIZINI/cache" \
--exclude="$SUNUCU_DIZINI/libraries" \
-C "$(dirname $SUNUCU_DIZINI)" \
"$(basename $SUNUCU_DIZINI)" 2>> "$LOG_DOSYASI"
CIKIS_KODU=$?
# --- SONUÇ ---
if [ $CIKIS_KODU -eq 0 ]; then
BOYUT=$(du -sh "$YEDEK_DOSYASI" | cut -f1)
log "Yedekleme BAŞARILI! Dosya: $YEDEK_DOSYASI | Boyut: $BOYUT"
else
log "HATA: Yedekleme sırasında bir sorun oluştu! Çıkış kodu: $CIKIS_KODU"
fi
# Otomatik kaydetmeyi yeniden etkinleştir
if screen -list | grep -q "$SCREEN_ADI"; then
sunucu_komut "save-on"
sunucu_komut "say [Sistem] Yedekleme tamamlandı."
log "Otomatik kaydetme yeniden etkinleştirildi."
fi
# --- ESKİ YEDEKLERİ SİL ---
log "Eski yedekler temizleniyor (en fazla $MAX_YEDEK_SAYISI yedek saklanır)..."
ls -t "$YEDEK_DIZINI"/mc-yedek-*.tar.gz 2>/dev/null | \
tail -n +$((MAX_YEDEK_SAYISI + 1)) | \
xargs -r rm -v >> "$LOG_DOSYASI" 2>&1
log "Yedekleme işlemi tamamlandı."
log "=========================================="
Scripti kaydet ve çalıştırılabilir yap:
Bash:
sudo nano /usr/local/bin/mc-backup.sh
sudo chmod +x /usr/local/bin/mc-backup.sh
Bash:
# Test et
sudo /usr/local/bin/mc-backup.sh
Gelişmiş Yedekleme Scripti — Bildirim ve Hata Yönetimi:
Büyük sunucular için Discord webhook entegrasyonu, hata kontrolü ve daha kapsamlı raporlama içeren gelişmiş versiyon:
Kod:
bash
#!/bin/bash
# ============================================
# Gelişmiş Minecraft Yedekleme Scripti
# Discord bildirimi + hata yönetimi
# ============================================
# --- YAPILANDIRMA ---
SUNUCU_DIZINI="/home/minecraft/sunucu"
YEDEK_DIZINI="/home/minecraft/yedekler"
UZAK_YEDEK="/mnt/yedek-disk" # İkinci disk veya bağlı depolama
SCREEN_ADI="minecraft"
GUNLUK_MAX=7 # Günlük yedek saklama sayısı
HAFTALIK_MAX=4 # Haftalık yedek saklama sayısı
LOG_DOSYASI="/var/log/mc-backup.log"
# Discord Webhook (boş bırakılırsa bildirim gönderilmez)
DISCORD_WEBHOOK="https://discord.com/api/webhooks/SENIN_WEBHOOK_URL_BURAYA"
TARIH=$(date +%Y-%m-%d_%H-%M-%S)
GUN=$(date +%u) # 7 = Pazar (haftalık yedek günü)
BASLANGIC=$(date +%s)
# --- FONKSİYONLAR ---
log() {
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a "$LOG_DOSYASI"
}
sunucu_komut() {
if screen -list | grep -q "$SCREEN_ADI"; then
screen -S "$SCREEN_ADI" -X stuff "$1\n"
return 0
fi
return 1
}
discord_bildirim() {
local MESAJ="$1"
local RENK="$2" # 65280 = yeşil, 16711680 = kırmızı, 16776960 = sarı
if [ -n "$DISCORD_WEBHOOK" ]; then
curl -s -X POST "$DISCORD_WEBHOOK" \
-H "Content-Type: application/json" \
-d "{
\"embeds\": [{
\"title\": \"Minecraft Yedekleme Sistemi\",
\"description\": \"$MESAJ\",
\"color\": $RENK,
\"footer\": {\"text\": \"$(date '+%d/%m/%Y %H:%M:%S')\"}
}]
}" > /dev/null 2>&1
fi
}
boyut_hesapla() {
du -sh "$1" 2>/dev/null | cut -f1
}
# --- BAŞLANGIÇ ---
log "=========================================="
log "Gelişmiş yedekleme başlatıldı: $TARIH"
# Yedek dizinleri oluştur
mkdir -p "$YEDEK_DIZINI/gunluk"
mkdir -p "$YEDEK_DIZINI/haftalik"
[ -n "$UZAK_YEDEK" ] && mkdir -p "$UZAK_YEDEK"
# Pazar günü haftalık yedek, diğer günler günlük yedek
if [ "$GUN" -eq 7 ]; then
YEDEK_TURU="haftalik"
YEDEK_DOSYASI="$YEDEK_DIZINI/haftalik/mc-haftalik-$TARIH.tar.gz"
log "Yedek türü: HAFTALIK"
else
YEDEK_TURU="gunluk"
YEDEK_DOSYASI="$YEDEK_DIZINI/gunluk/mc-gunluk-$TARIH.tar.gz"
log "Yedek türü: GÜNLÜK"
fi
discord_bildirim "Yedekleme başlatıldı... ($YEDEK_TURU)" "16776960"
# Sunucu çalışıyorsa güvenli kayıt yap
SUNUCU_CALISIYOR=false
if screen -list | grep -q "$SCREEN_ADI"; then
SUNUCU_CALISIYOR=true
sunucu_komut "say §e[Yedekleme] Otomatik yedekleme başladı. Kısa süre lag yaşanabilir."
sleep 2
sunucu_komut "save-all"
sleep 8
sunucu_komut "save-off"
sleep 2
log "Sunucu durduruldu, kayıt kapatıldı."
fi
# --- YEDEKLEME ---
log "Arşiv oluşturuluyor: $YEDEK_DOSYASI"
tar -czf "$YEDEK_DOSYASI" \
--exclude="$SUNUCU_DIZINI/logs/*.gz" \
--exclude="$SUNUCU_DIZINI/cache" \
--exclude="$SUNUCU_DIZINI/libraries" \
--exclude="$SUNUCU_DIZINI/tmp" \
-C "$(dirname $SUNUCU_DIZINI)" \
"$(basename $SUNUCU_DIZINI)" 2>> "$LOG_DOSYASI"
CIKIS_KODU=$?
# Otomatik kaydetmeyi geri aç
if $SUNUCU_CALISIYOR; then
sunucu_komut "save-on"
sleep 1
fi
# --- SONUÇ DEĞERLENDİRME ---
BITIS=$(date +%s)
SURE=$((BITIS - BASLANGIC))
if [ $CIKIS_KODU -eq 0 ]; then
BOYUT=$(boyut_hesapla "$YEDEK_DOSYASI")
log "Yedekleme BAŞARILI! Boyut: $BOYUT | Süre: ${SURE}s"
# Uzak konuma kopyala
if [ -n "$UZAK_YEDEK" ] && [ -d "$UZAK_YEDEK" ]; then
cp "$YEDEK_DOSYASI" "$UZAK_YEDEK/"
log "Uzak konuma kopyalandı: $UZAK_YEDEK"
fi
if $SUNUCU_CALISIYOR; then
sunucu_komut "say §a[Yedekleme] Yedekleme tamamlandı! ($BOYUT)"
fi
discord_bildirim "✅ Yedekleme başarıyla tamamlandı!\nBoyut: $BOYUT\nSüre: ${SURE} saniye\nTür: $YEDEK_TURU" "65280"
else
log "HATA: Yedekleme başarısız! Çıkış kodu: $CIKIS_KODU"
discord_bildirim "❌ Yedekleme BAŞARISIZ!\nHata kodu: $CIKIS_KODU\nLütfen logları kontrol edin!" "16711680"
fi
# --- ESKİ YEDEKLERİ TEMİZLE ---
log "Eski yedekler temizleniyor..."
ls -t "$YEDEK_DIZINI/gunluk"/mc-gunluk-*.tar.gz 2>/dev/null | \
tail -n +$((GUNLUK_MAX + 1)) | xargs -r rm -f
ls -t "$YEDEK_DIZINI/haftalik"/mc-haftalik-*.tar.gz 2>/dev/null | \
tail -n +$((HAFTALIK_MAX + 1)) | xargs -r rm -f
log "Temizlik tamamlandı."
log "=========================================="
rsync Tabanlı Artımlı Yedekleme Scripti
Büyük dünya dosyaları için (50 GB+) rsync tabanlı artımlı yedekleme çok daha hızlıdır:
Bash:
#!/bin/bash
# ============================================
# rsync Tabanlı Artımlı Yedekleme
# ============================================
SUNUCU_DIZINI="/home/minecraft/sunucu"
YEDEK_TABANDIR="/home/minecraft/yedekler/artimli"
SCREEN_ADI="minecraft"
TARIH=$(date +%Y-%m-%d_%H-%M)
YEDEK_HEDEF="$YEDEK_TABANDIR/$TARIH"
SON_YEDEK="$YEDEK_TABANDIR/son-yedek"
# Önceki yedeği referans alarak yalnızca değişenleri kopyala (hard link)
if [ -d "$SON_YEDEK" ]; then
rsync -avz --delete \
--link-dest="$SON_YEDEK" \
--exclude="logs/" \
--exclude="cache/" \
--exclude="libraries/" \
"$SUNUCU_DIZINI/" \
"$YEDEK_HEDEF/"
else
# İlk yedek — referans yok, tam kopyala
rsync -avz --delete \
--exclude="logs/" \
--exclude="cache/" \
"$SUNUCU_DIZINI/" \
"$YEDEK_HEDEF/"
fi
# "son-yedek" sembolik bağlantısını güncelle
rm -f "$SON_YEDEK"
ln -s "$YEDEK_HEDEF" "$SON_YEDEK"
echo "Artımlı yedek tamamlandı: $YEDEK_HEDEF"
echo "Boyut: $(du -sh $YEDEK_HEDEF | cut -f1)"
Bu yöntemin güzelliği şudur: --link-dest parametresi sayesinde değişmeyen dosyalar hard link olarak saklanır. Bu, disk alanı tüketmeden her yedekte sanki tam kopya varmış gibi görünmesini sağlar; geri yükleme ise her zaman tek klasörden yapılır.
5b. Linux — cron ile Otomatik Zamanlama:
Scriptleri belirli aralıklarla otomatik çalıştırmak için cron kullanılır.
Bash:
# Crontab düzenleyicisini aç
crontab -e
Crontab formatı şöyledir: dakika saat gun_ayda ay gun_haftada komut
Bash:
# Her gece saat 04:00'da günlük yedek
0 4 * * * /usr/local/bin/mc-backup.sh >> /var/log/mc-backup-cron.log 2>&1
# Her 6 saatte bir artımlı rsync yedek
0 */6 * * * /usr/local/bin/mc-rsync-backup.sh >> /var/log/mc-rsync.log 2>&1
# Her Pazar saat 02:00'da haftalık tam yedek
0 2 * * 0 /usr/local/bin/mc-haftalik-backup.sh >> /var/log/mc-haftalik.log 2>&1
# Her ayın 1'inde arşiv yedeği
0 1 1 * * /usr/local/bin/mc-arsiv-backup.sh >> /var/log/mc-arsiv.log 2>&1
Cron ifadelerini test etmek için: [crontab.guru](https://crontab.guru) adresini kullanabilirsiniz.
6. Windows — Manuel Yedekleme Yöntemleri:
Windows üzerinde Minecraft sunucusu çalıştırıyorsanız yedekleme araçları farklıdır; ancak mantık aynıdır. Windows'ta Bash yerine PowerShell ve Komut İstemi (CMD) kullanılır.
Robocopy ile Yedekleme:
robocopy (Robust File Copy), Windows'un yerleşik güçlü dosya kopyalama aracıdır. Değişen dosyaları tespit edip yalnızca onları kopyalar; bu yüzden artımlı yedeklemede xcopyden çok daha verimlidir.
Bash:
REM Temel robocopy yedekleme (CMD ile)
robocopy C:\minecraft\sunucu D:\yedekler\surekli /MIR /Z /R:3 /W:5
REM Parametrelerin anlamı:
REM /MIR — Mirror (kaynakta silinenleri hedefte de sil)
REM /Z — Yeniden başlatılabilir mod (bağlantı kopsa devam eder)
REM /R:3 — Hata durumunda 3 kez tekrar dene
REM /W:5 — Tekrar denemeler arasında 5 saniye bekle
REM /XD — Belirli klasörleri hariç tut
REM logs ve cache hariç tüm sunucuyu yedekle
robocopy C:\minecraft\sunucu D:\yedekler\surekli /MIR /Z /XD logs cache libraries
7-Zip ile Sıkıştırılmış Yedek
Windows'ta tar komutu sınırlı desteğe sahiptir; bunun yerine ücretsiz ve açık kaynaklı 7-Zip komut satırı aracı kullanılır.
Bash:
REM 7-Zip'i buradan indir ve kur: https://7-zip.org
REM Tarih değişkeni oluştur
for /f "tokens=1-3 delims=/" %%a in ("%date%") do set TARIH=%%c-%%b-%%a
for /f "tokens=1-2 delims=:" %%a in ("%time%") do set SAAT=%%a-%%b
REM Yedek oluştur (logs, cache, libraries hariç)
"C:\Program Files\7-Zip\7z.exe" a -tgzip ^
D:\yedekler\mc-yedek-%TARIH%_%SAAT%.tar.gz ^
C:\minecraft\sunucu\* ^
-xr!logs -xr!cache -xr!libraries
REM Yalnızca dünya klasörlerini yedekle
"C:\Program Files\7-Zip\7z.exe" a -tgzip ^
D:\yedekler\dunya-%TARIH%.tar.gz ^
C:\minecraft\sunucu\world ^
C:\minecraft\sunucu\world_nether ^
C:\minecraft\sunucu\world_the_end
Windows'ta Dahili ZIP Desteği (PowerShell)
7-Zip kurmak istemiyorsanız PowerShell'in yerleşik Compress-Archive komutuyla ZIP arşivi oluşturabilirsiniz:
Bash:
# Tarih damgalı yedek oluştur
$Tarih = Get-Date -Format "yyyy-MM-dd_HH-mm"
$YedekDosyasi = "D:\yedekler\mc-yedek-$Tarih.zip"
$SunucuDizini = "C:\minecraft\sunucu"
Compress-Archive -Path $SunucuDizini -DestinationPath $YedekDosyasi -Force
$Boyut = [math]::Round((Get-Item $YedekDosyasi).Length / 1MB, 2)
Write-Host "Yedek oluşturuldu: $YedekDosyasi ($Boyut MB)"
> Önemli Not: Compress-Archive büyük klasörlerde (10 GB+) yavaştır ve bellek sorunları yaşayabilir. Büyük sunucular için 7-Zip komut satırı veya robocopy tercih edilmelidir.
7. Windows — Otomatik Backup Scriptleri (PowerShell)
Temel Otomatik Yedekleme Scripti
Aşağıdaki script Windows üzerinde çalışan Minecraft sunucusunu güvenli biçimde yedekler. RCON etkinse save-all ve save-off komutlarını gönderir, ardından save-on ile devam eder.
Bash:
# ============================================
# Minecraft Windows Otomatik Yedekleme Scripti
# Dosya: C:\minecraft\scripts\mc-backup.ps1
# ============================================
# --- YAPILANDIRMA ---
$SunucuDizini = "C:\minecraft\sunucu"
$YedekDizini = "D:\yedekler\minecraft"
$MaxYedekSayisi = 7
$LogDosyasi = "C:\minecraft\logs\backup.log"
$Tarih = Get-Date -Format "yyyy-MM-dd_HH-mm-ss"
# RCON ayarları (server.properties'te enable-rcon=true ise doldur)
$RconHost = "127.0.0.1"
$RconPort = 25575
$RconSifre = "sunucu_rcon_sifren"
# --- FONKSİYONLAR ---
function Yaz {
param($Mesaj)
$Satir = "[$(Get-Date -Format 'yyyy-MM-dd HH:mm:ss')] $Mesaj"
Write-Host $Satir
Add-Content -Path $LogDosyasi -Value $Satir
}
function RconKomut {
param($Komut)
# mcrcon aracını buradan indir: https://github.com/Tiiffi/mcrcon
$McrconYolu = "C:\minecraft\tools\mcrcon.exe"
if (Test-Path $McrconYolu) {
& $McrconYolu -H $RconHost -P $RconPort -p $RconSifre $Komut
}
}
# --- BAŞLANGIÇ ---
Yaz "=========================================="
Yaz "Yedekleme başlatıldı: $Tarih"
New-Item -ItemType Directory -Force -Path $YedekDizini | Out-Null
New-Item -ItemType Directory -Force -Path (Split-Path $LogDosyasi) | Out-Null
# Java süreci çalışıyor mu?
$SunucuCalisiyor = $false
if (Get-Process -Name "java" -ErrorAction SilentlyContinue) {
$SunucuCalisiyor = $true
Yaz "Sunucu çalışıyor, güvenli kayıt yapılıyor..."
RconKomut "say §e[Yedekleme] Otomatik yedekleme başlıyor..."
Start-Sleep -Seconds 2
RconKomut "save-all"
Start-Sleep -Seconds 8
RconKomut "save-off"
Start-Sleep -Seconds 3
}
# --- YEDEKLEME ---
$YedekDosyasi = "$YedekDizini\mc-yedek-$Tarih.zip"
Yaz "Arşiv oluşturuluyor: $YedekDosyasi"
$Baslangic = Get-Date
try {
# Geçici dizine hariç tutarak kopyala, sonra ZIP oluştur
$GeciciDizin = "$env:TEMP\mc-backup-$Tarih"
New-Item -ItemType Directory -Force -Path $GeciciDizin | Out-Null
robocopy $SunucuDizini $GeciciDizin /MIR /Z /R:2 /W:3
/XD "$SunucuDizini\logs" "$SunucuDizini\cache" "$SunucuDizini\libraries"
/NFL /NDL /NJH /NJS | Out-Null
Compress-Archive -Path "$GeciciDizin\*" -DestinationPath $YedekDosyasi -Force
Remove-Item -Recurse -Force $GeciciDizin
$Sure = [math]::Round(((Get-Date) - $Baslangic).TotalSeconds, 1)
$Boyut = [math]::Round((Get-Item $YedekDosyasi).Length / 1MB, 2)
Yaz "Yedekleme BAŞARILI! Boyut: $Boyut MB | Süre: ${Sure}s"
if ($SunucuCalisiyor) {
RconKomut "save-on"
RconKomut "say §a[Yedekleme] Tamamlandı! ($Boyut MB)"
}
} catch {
Yaz "HATA: $_"
if ($SunucuCalisiyor) { RconKomut "save-on" }
exit 1
}
# --- ESKİ YEDEKLERİ TEMİZLE ---
Yaz "Eski yedekler temizleniyor (max $MaxYedekSayisi adet)..."
Get-ChildItem -Path $YedekDizini -Filter "mc-yedek-*.zip" |
Sort-Object LastWriteTime -Descending |
Select-Object -Skip $MaxYedekSayisi |
ForEach-Object { Remove-Item $_.FullName -Force; Yaz "Silindi: $($_.Name)" }
Yaz "Yedekleme tamamlandı."
Yaz "=========================================="
Gelişmiş Script — Discord Bildirimi ile
powershell
# ============================================
# Gelişmiş Windows Yedekleme — Discord + Günlük/Haftalık Ayrımı
# ============================================
$SunucuDizini = "C:\minecraft\sunucu"
$YedekDizini = "D:\yedekler\minecraft"
$GunlukMax = 7
$HaftalikMax = 4
$LogDosyasi = "C:\minecraft\logs\backup.log"
$DiscordWebhook = "https://discord.com/api/webhooks/SENIN_WEBHOOK_URL_BURAYA"
function Yaz { param($M); $S="[$(Get-Date -Format 'HH:mm:ss')] $M"; Write-Host $S; Add-Content $LogDosyasi $S }
function DiscordBildirim {
param($Mesaj, $Renk)
if (-not $DiscordWebhook) { return }
$Govde = @{
embeds = @(@{
title = "Minecraft Yedekleme Sistemi"
description = $Mesaj
color = $Renk
footer = @{ text = (Get-Date -Format "dd/MM/yyyy HH:mm:ss") }
})
} | ConvertTo-Json -Depth 5
Invoke-RestMethod -Uri $DiscordWebhook -Method Post -ContentType "application/json" -Body $Govde -ErrorAction SilentlyContinue
}
$Tarih = Get-Date -Format "yyyy-MM-dd_HH-mm-ss"
# Pazar = haftalık, diğerleri = günlük
if ((Get-Date).DayOfWeek -eq "Sunday") {
New-Item -ItemType Directory -Force "$YedekDizini\haftalik" | Out-Null
$YedekDosyasi = "$YedekDizini\haftalik\mc-haftalik-$Tarih.zip"
$YedekTuru = "haftalik"
} else {
New-Item -ItemType Directory -Force "$YedekDizini\gunluk" | Out-Null
$YedekDosyasi = "$YedekDizini\gunluk\mc-gunluk-$Tarih.zip"
$YedekTuru = "gunluk"
}
Yaz "Yedekleme başladı ($YedekTuru)"
DiscordBildirim "⏳ Yedekleme başlatıldı... ($YedekTuru)" 16776960
$Baslangic = Get-Date
try {
Compress-Archive -Path $SunucuDizini -DestinationPath $YedekDosyasi -Force
$Sure = [math]::Round(((Get-Date) - $Baslangic).TotalSeconds, 1)
$Boyut = [math]::Round((Get-Item $YedekDosyasi).Length / 1MB, 2)
Yaz "BAŞARILI — $Boyut MB — ${Sure}s"
DiscordBildirim "✅ Yedekleme tamamlandı!nBoyut: $Boyut MBnSüre: $Sure saniyenTür: $YedekTuru" 65280
} catch {
Yaz "HATA: $_"
DiscordBildirim "❌ Yedekleme BAŞARISIZ!nHata: $_" 16711680
exit 1
}
# Eski günlük yedekleri temizle
Get-ChildItem "$YedekDizini\gunluk" -Filter "*.zip" |
Sort-Object LastWriteTime -Descending | Select-Object -Skip $GunlukMax | Remove-Item -Force
# Eski haftalık yedekleri temizle
Get-ChildItem "$YedekDizini\haftalik" -Filter "*.zip" |
Sort-Object LastWriteTime -Descending | Select-Object -Skip $HaftalikMax | Remove-Item -Force
Yaz "Temizlik tamamlandı."
8. Windows — Task Scheduler ile Zamanlama
Linux'ta cron ne işe yarıyorsa, Windows'ta Task Scheduler (Görev Zamanlayıcı) aynı işi görür.
PowerShell ile Görev Oluşturma (Önerilen)
Bash:
# Yönetici olarak PowerShell'i açıp çalıştır
$Eylem = New-ScheduledTaskAction
-Execute "powershell.exe"
-Argument "-NonInteractive -ExecutionPolicy Bypass -File C:\minecraft\scripts\mc-backup.ps1"
$Ayarlar = New-ScheduledTaskSettingsSet
-ExecutionTimeLimit (New-TimeSpan -Hours 2)
-RunOnlyIfNetworkAvailable $false
# Günlük yedek — Her gece 04:00
Register-ScheduledTask
-TaskName "MinecraftGunlukYedek"
-Action $Eylem
-Trigger (New-ScheduledTaskTrigger -Daily -At "04:00")
-Settings $Ayarlar
-RunLevel Highest -Force
# Haftalık yedek — Her Pazar 02:00
Register-ScheduledTask
-TaskName "MinecraftHaftalikYedek"
-Action $Eylem
-Trigger (New-ScheduledTaskTrigger -Weekly -DaysOfWeek Sunday -At "02:00")
-Settings $Ayarlar
-RunLevel Highest -Force
Write-Host "Görevler oluşturuldu:"
Get-ScheduledTask | Where-Object { $_.TaskName -like "Minecraft*" } | Select-Object TaskName, State
GUI ile Task Scheduler Kurulumu (Adım Adım):
GUI'yi tercih ediyorsanız şu adımları izleyin:
1. Win + R → taskschd.msc → Enter ile Görev Zamanlayıcı'yı aç
2. Sağ panelden "Temel Görev Oluştur" seçeneğine tıkla
3. Ad olarak MinecraftGunlukYedek yaz → İleri
4. Tetikleyici: Günlük, saat 04:00 → İleri
5. Eylem: Program başlat → İleri
6. Program: powershell.exe
Bağımsız değişken:
Bash:
-NonInteractive -ExecutionPolicy Bypass -File "C:\minecraft\scripts\mc-backup.ps1
PowerShell Çalıştırma İzni:
Sistemde PowerShell scriptleri engellenmiş olabilir. Script çalıştırmadan önce:
Bash:
# Mevcut politikayı kontrol et
Get-ExecutionPolicy
# Yerel scriptlere izin ver
Set-ExecutionPolicy RemoteSigned -Scope LocalMachine
9. Eklenti Tabanlı Yedekleme Çözümleri:
Bash scriptlerine alternatif olarak Minecraft eklentileri de yedekleme işlemini üstlenebilir. Avantajı, sunucuyu durdurmaya gerek kalmadan oyun içinden güvenli yedek alınabilmesidir.
DriveBackupV2:
En popüler Minecraft yedekleme eklentilerinden biri. Google Drive, OneDrive, Dropbox ve FTP'ye doğrudan yedek gönderebilir.
YAML:
# DriveBackupV2 config.yml temel ayarları
backups:
worlds:
enabled: true
delay: 86400 # Saniye cinsinden (86400 = 24 saat)
keep: 7 # Saklanacak yedek sayısı
format: tar.gz
plugins:
enabled: true
delay: 604800 # Haftalık (604800 saniye)
keep: 4
googledrive:
enabled: true
folderId: "GOOGLE_DRIVE_KLASOR_ID"
messages:
backupStart: "&e[Yedekleme] Yedekleme başlatılıyor..."
backupDone: "&a[Yedekleme] Yedekleme tamamlandı! (%time%)"
CoreProtect (Blok Yedekleme):
DriveBackupV2'den farklı olarak CoreProtect, blok değişikliklerini veritabanına kaydeder. Bu sayede belirli bir oyuncunun yaptığı tahribatı geri alabilirsiniz.
YAML:
/co rollback u:oyuncuadi t:1h r:50
# Son 1 saat içinde 50 blok yarıçapındaki değişiklikleri geri al
/co rollback u:oyuncuadi t:2d
# Son 2 gündeki tüm değişiklikleri geri al
CoreProtect bir yedekleme aracı değil, denetim (audit) ve geri alma aracıdır. Tam yedekleme sistemiyle birlikte kullanılmalıdır.
Chunky + Snapshot Yaklaşımı
Dünya büyükse Chunky ile dünya sınırını belirleyip bölge içi dosyaları önden oluşturabilirsiniz. Bu yaklaşım yedek boyutunu tahmin edilebilir kılar.
8. Uzak Sunucuya Yedekleme:
Yerel yedekler disk arızasına karşı koruma sağlamaz. Gerçek anlamda güvenlik için yedeklerin farklı bir fiziksel konumda saklanması şarttır.
SSH ile Uzak Sunucuya rsync
Bash:
# SSH anahtar tabanlı kimlik doğrulamayı ayarla (şifresiz)
ssh-keygen -t ed25519 -C "minecraft-backup"
ssh-copy-id -i ~/.ssh/id_ed25519.pub kullanici@uzak-sunucu
# rsync ile uzak sunucuya yedekleme
rsync -avz --delete \
-e "ssh -i /home/minecraft/.ssh/id_ed25519 -p 22" \
/home/minecraft/yedekler/ \
kullanici@uzak-sunucu:/home/kullanici/mc-yedekler/
SCP ile Tek Dosya Aktarımı:
Bash:
# Tek yedek dosyasını uzak sunucuya gönder
scp /home/minecraft/yedekler/mc-yedek-2026-05-01.tar.gz \
kullanici@uzak-sunucu:/yedekler/
FTP / SFTP ile Yedekleme:
Barındırma sağlayıcınız FTP erişimi sunuyorsa lftp aracıyla otomatik aktarım yapılabilir:
Bash:
# lftp kurulumu
sudo apt install lftp
# FTP'ye yedek gönderme scripti
lftp -u "ftp_kullanici,ftp_sifre" ftp://ftp.sağlayıcı.com << EOF
cd /yedekler/
put /home/minecraft/yedekler/mc-yedek-$(date +%Y-%m-%d).tar.gz
bye
EOF
9. Bulut Yedekleme — Google Drive, S3, Backblaze B2
Backblaze B2 (En Uygun Fiyatlı Seçenek)
Backblaze B2, S3'e kıyasla çok daha ucuz depolama sunar. rclone aracıyla kolayca entegre edilir.
Bash:
# rclone kurulumu
curl https://rclone.org/install.sh | sudo bash
# rclone yapılandırması (interaktif)
rclone config
# "n" (new remote), isim: "b2"
# Backblaze B2'yi seç, Application Key ID ve Key gir
# Yedek dosyasını B2'ye yükle
rclone copy /home/minecraft/yedekler/ b2:minecraft-yedekler/ \
--progress \
--transfers 4
# Belirli gün öncesi dosyaları otomatik sil (30 günlük temizlik)
rclone delete b2:minecraft-yedekler/ \
--min-age 30d
Amazon S3 / DigitalOcean Spaces:
Bash:
# AWS CLI kurulumu
sudo apt install awscli
# Kimlik bilgilerini yapılandır
aws configure
# Yedek dosyasını S3'e yükle
aws s3 cp /home/minecraft/yedekler/mc-yedek-$(date +%Y-%m-%d).tar.gz \
s3://minecraft-yedekler-bucket/
# S3'teki tüm yedekleri listele
aws s3 ls s3://minecraft-yedekler-bucket/
# Yaşam döngüsü kuralı ile 30 günden eski dosyaları otomatik sil
# (AWS konsolundan veya CLI üzerinden lifecycle policy tanımlanır)
Google Drive (rclone ile):
Bash:
# rclone'da Google Drive remote oluştur
rclone config
# "n", isim: "gdrive", Google Drive seç, yetkilendirme adımlarını tamamla
# Google Drive'a yedek yükle
rclone copy /home/minecraft/yedekler/ gdrive:MinecraftYedekler/ \
--progress
# Senkronize et (Drive'da fazladan olanları sil)
rclone sync /home/minecraft/yedekler/ gdrive:MinecraftYedekler/ \
--progress
Entegre Bulut Yedekleme Scripti:
Bash:
#!/bin/bash
# Yerel yedekleme tamamlandıktan sonra buluta yükle
YEDEK_DOSYASI="$1" # Parametre olarak dosya yolu alır
LOG="/var/log/mc-bulut-backup.log"
log() { echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a "$LOG"; }
log "Bulut yüklemesi başlıyor: $YEDEK_DOSYASI"
# Backblaze B2'ye yükle
rclone copy "$YEDEK_DOSYASI" b2:minecraft-yedekler/ --progress >> "$LOG" 2>&1
if [ $? -eq 0 ]; then
log "B2 yüklemesi başarılı."
else
log "HATA: B2 yüklemesi başarısız!"
fi
# Google Drive'a yükle (isteğe bağlı)
# rclone copy "$YEDEK_DOSYASI" gdrive:MinecraftYedekler/ >> "$LOG" 2>&1
# 30 günden eski bulut yedeklerini temizle
rclone delete b2:minecraft-yedekler/ --min-age 30d >> "$LOG" 2>&1
log "Eski bulut yedekleri temizlendi."
10. Yedekleme Testi ve Geri Yükleme
Yedek almak yeterli değildir. Test edilmemiş yedek, yedek değildir. Ay da bir düzenli geri yükleme testi yapılmalıdır.
Yedekten Geri Yükleme Adımları:
Bash:
# 1. Sunucuyu durdur
screen -S minecraft -X stuff "stop\n"
sleep 10
# 2. Mevcut dünyayı yedekle (güvenlik için)
mv /home/minecraft/sunucu/world /home/minecraft/sunucu/world.eski
mv /home/minecraft/sunucu/world_nether /home/minecraft/sunucu/world_nether.eski
mv /home/minecraft/sunucu/world_the_end /home/minecraft/sunucu/world_the_end.eski
# 3. Yedekten aç
tar -xzf /home/minecraft/yedekler/mc-yedek-2026-05-01.tar.gz \
-C /home/minecraft/sunucu/ \
--strip-components=1
# 4. İzinleri düzelt
chown -R minecraft:minecraft /home/minecraft/sunucu/
# 5. Sunucuyu başlat
screen -S minecraft -dm bash -c "cd /home/minecraft/sunucu && java -Xms4G -Xmx8G -jar paper.jar --nogui"
# 6. Geri yükleme başarılıysa eski klasörleri sil
# rm -rf /home/minecraft/sunucu/world.eski
Windows — Yedekten Geri Yükleme Adımları:
Bash:
# 1. Sunucuyu durdur (RCON ile veya pencereyi kapat)
# RCON varsa:
# & "C:\minecraft\tools\mcrcon.exe" -H 127.0.0.1 -P 25575 -p sifre "stop"
# Ardından Java sürecinin kapandığını doğrula:
Start-Sleep -Seconds 10
if (Get-Process -Name "java" -ErrorAction SilentlyContinue) {
Stop-Process -Name "java" -Force
}
# 2. Mevcut dünya klasörlerini yeniden adlandır (güvenlik için)
Rename-Item "C:\minecraft\sunucu\world" "C:\minecraft\sunucu\world.eski"
Rename-Item "C:\minecraft\sunucu\world_nether" "C:\minecraft\sunucu\world_nether.eski"
Rename-Item "C:\minecraft\sunucu\world_the_end" "C:\minecraft\sunucu\world_the_end.eski"
# 3. ZIP yedekten tüm sunucuyu geri yükle
Expand-Archive -Path "D:\yedekler\mc-yedek-2026-05-01.zip"
-DestinationPath "C:\minecraft\sunucu" -Force
# 4. Yalnızca dünya klasörlerini geri yükle (kısmi geri yükleme)
# Yedekten world klasörünü çıkar, mevcut konuma taşı
Expand-Archive -Path "D:\yedekler\mc-yedek-2026-05-01.zip"
-DestinationPath "C:\mc-gecici" -Force
Move-Item "C:\mc-gecici\world" "C:\minecraft\sunucu\world"
Remove-Item "C:\mc-gecici" -Recurse -Force
# 5. Sunucuyu yeniden başlat
Start-Process powershell -ArgumentList "-File C:\minecraft\sunucu\start.ps1"
# 6. Geri yükleme başarılıysa eski klasörleri sil
# Remove-Item "C:\minecraft\sunucu\world.eski" -Recurse -Force
Yedek Dosyasını Windows'ta Test Et:
Bash:
# ZIP arşivinin bütünlüğünü kontrol et
try {
$Arsiv = [System.IO.Compression.ZipFile]::OpenRead("D:\yedekler\mc-yedek-2026-05-01.zip")
Write-Host "Yedek dosyası sağlam. Içindeki dosya sayısı: $($Arsiv.Entries.Count)"
$Arsiv.Dispose()
} catch {
Write-Host "HATA: Yedek dosyası bozuk! $_"
}
# İlk 20 dosyayı listele
Add-Type -AssemblyName System.IO.Compression.FileSystem
$Arsiv = [System.IO.Compression.ZipFile]::OpenRead("D:\yedekler\mc-yedek-2026-05-01.zip")
$Arsiv.Entries | Select-Object -First 20 | ForEach-Object { Write-Host $_.FullName }
$Arsiv.Dispose()
Bash:
# Arşiv bütünlüğünü test et
tar -tzf /home/minecraft/yedekler/mc-yedek-2026-05-01.tar.gz > /dev/null
if [ $? -eq 0 ]; then
echo "Yedek dosyası sağlam."
else
echo "HATA: Yedek dosyası bozuk!"
fi
# İlk 20 satırı listele
tar -tzf /home/minecraft/yedekler/mc-yedek-2026-05-01.tar.gz | head -20
# Yalnızca belirli bir klasörü geri yükle (örn. yalnızca world/)
tar -xzf /home/minecraft/yedekler/mc-yedek-2026-05-01.tar.gz \
--wildcards "*/world/*" \
-C /tmp/test-restore/
11. Yedekleme Takvimi ve En İyi Uygulamalar:
Önerilen Yedekleme Takvimi
| Sıklık | Zaman | Tür | Saklama Süresi | Konum |
|---|---|---|---|---|
| Saatlik | Her saat başı | rsync artımlı | 24 saat | Yerel disk |
| Günlük | Saat 04:00 | tar.gz tam | 7 gün | Yerel + Bulut |
| Haftalık | Pazar 02:00 | tar.gz tam | 4 hafta | Bulut |
| Aylık | 1'i 01:00 | tar.gz arşiv | 12 ay | Bulut (Cold storage) |
| Güncelleme öncesi | Manuel | tar.gz tam | Kalıcı | Yerel + Bulut |
3-2-1 Yedekleme Kuralı:
Profesyonel veri koruma stratejisinin altın standardı olan 3-2-1 kuralı şunu söyler:
- 3 kopya veri sakla (1 orijinal + 2 yedek)
- 2 farklı medya türünde sakla (örn. yerel SSD + bulut)
- 1 kopya coğrafi olarak farklı konumda olsun (farklı şehir/ülke)
Güvenlik İpuçları:
Yedekleme dizinine yalnızca minecraft kullanıcısının yazma yetkisi olmalıdır. Buluta gönderilecek yedekler şifrelenmelidir. rclone'un --crypt özelliği veya GPG şifreleme kullanılabilir.
Bash:
# GPG ile yedek şifreleme
gpg --cipher-algo AES256 --compress-algo 0 \
-c /home/minecraft/yedekler/mc-yedek-2026-05-01.tar.gz
# Şifreli dosyanın adı: mc-yedek-2026-05-01.tar.gz.gpg olur
Windows — Disk Alanı İzleme Scripti:
Bash:
# Yedek disk kullanımını izle
$YedekDizini = "D:\yedekler\minecraft"
$Esik = 85 # %85 dolulukta uyarı ver
$Disk = Get-PSDrive -Name (Split-Path $YedekDizini -Qualifier).TrimEnd(':')
$Kullanim = [math]::Round(($Disk.Used / ($Disk.Used + $Disk.Free)) * 100, 1)
if ($Kullanim -gt $Esik) {
Write-Warning "UYARI: Yedek diski %$Kullanim dolu!"
}
$ToplamBoyut = (Get-ChildItem $YedekDizini -Recurse -ErrorAction SilentlyContinue |
Measure-Object -Property Length -Sum).Sum / 1GB
Write-Host "Disk kullanimi: %$Kullanim"
Write-Host "Yedek klasörü boyutu: $([math]::Round($ToplamBoyut, 2)) GB"
Write-Host "Toplam yedek sayısı: $((Get-ChildItem $YedekDizini -Filter '*.zip' -Recurse).Count)"
bash
#!/bin/bash
# Yedek disk kullanımını izle ve uyar
YEDEK_DIZINI="/home/minecraft/yedekler"
ESIK=85 # %85 dolulukta uyarı ver
KULLANIM=$(df "$YEDEK_DIZINI" | awk 'NR==2 {print $5}' | tr -d '%')
if [ "$KULLANIM" -gt "$ESIK" ]; then
echo "UYARI: Yedek diski %$KULLANIM dolu!"
# Discord bildirimi gönder
fi
echo "Yedek dizini kullanımı: %$KULLANIM"
echo "Toplam yedek sayısı: $(ls $YEDEK_DIZINI/gunluk/*.tar.gz 2>/dev/null | wc -l)"
echo "Toplam yedek boyutu: $(du -sh $YEDEK_DIZINI | cut -f1)"
11. Sonuç
Etkili bir Minecraft sunucu yedekleme sistemi kurmak; tek bir script yazmaktan ibaret değil, bütünleşik bir strateji geliştirmektir. Bu rehberde öğrendiklerimizi özetleyelim:
Neyin yedekleneceğini bilin. Dünya dosyaları, plugins dizini ve yapılandırma dosyaları her zaman öncelikli olmalıdır. Cache ve kütüphane klasörleri yedeklemeden hariç tutulabilir.
Hem yerel hem uzak yedek alın. Yerel disk yedek alır ama o disk de arızalanabilir. Bulut yedeklemesi (Backblaze B2, Google Drive, S3) zorunludur. 3-2-1 kuralını benimseyin.
Otomasyonu platforma uygun araçla sağlayın. Linux'ta cron, Windows'ta Task Scheduler kullanın. Her iki platform için hazır scriptleri bu rehberde bulabilirsiniz. Manuel yedekleme unutulur; otomasyon unutmaz.
Sunucu çalışırken güvenli yedek alın. Linux'ta save-all + save-off + yedek + save-on döngüsü; Windows'ta aynı komutlar RCON üzerinden mcrcon.exe aracıyla gönderilir. Bu adım atlanırsa bölge dosyaları bozulabilir.
Yedeklerinizi test edin. Her ay en az bir geri yükleme testi yapın. Test edilmemiş yedek, yedek değildir.
Yedek boyutunu izleyin. Disk dolduğunda yedekleme sistemi sessizce başarısız olur. Disk kullanımını izleyen ve sizi uyaran bir script ekleyin.
Sıfırdan kurduğunuz bir sunucuyu veri kaybı nedeniyle kaybetmek, oyuncu tabanınızı bir daha toparlanmayacak biçimde dağıtabilir. Bu rehberdeki adımları uygulayarak sunucunuzu bu riske karşı koruma altına alın.
