Anlık Görüntüler Yedek Değildir — Ve İkisini de İstersiniz
Bir anlık görüntü, kopyaladığı birimle aynı depolama altyapısında yaşayan, o birimin belirli bir andaki kopyasıdır. Bu bir eleştiri değil bir tanımdır ve bir anlık görüntünün tam olarak ne konuda mükemmel olduğunu ve neyi yapamadığını açıklar. Buradaki her plan, yedi günlük saklama süresine sahip saatlik anlık görüntüler içerir, birini geri yüklemek yaklaşık otuz saniye sürer ve bunlar, sunucu işletiminde en sık karşılaşılan tek olaya doğru cevaptır: öğleden sonra saat dörtte bir yapılandırma dosyasını düzenlediniz ve o zamandan beri hizmet başlamadı. Bu başarısızlık türü için başka hiçbir şey buna yaklaşamaz — herhangi bir yedekleme aracından daha hızlıdır, zaten çalışır durumdadır ve size fazladan hiçbir maliyeti yoktur.
Bir anlık görüntünün yapamadığı şey, üzerinde depolandığı şeyden sağ çıkmaktır. Birimle, ana bilgisayarla, hipervizörle ve çoğu tasarımda hesapla aynı kaderi paylaşır. Makineye el konulursa, hesap kapatılırsa, veri merkezi çok kötü bir gün geçirirse, anlık görüntüler de onunla birlikte gider — onlar verinin bir kopyasıdır, bağımsız bir kopyası değildir. Bu ayrım, sizi bilerek tanımlayamayan bir sağlayıcıda akademik bir mesele değildir: sunucunuzu başkasının kayıtlarından yeniden inşa eden bir destek süreci, bir telefon numarasına bağlı bir kurtarma akışı ya da yasal adınızın bağlı olduğu bir faturalama geçmişi yoktur. Aldığınız neyse, elinizde olan odur.
Yedi günlük bir pencere de iki yavaş başarısızlık türünde yardımcı olmaz. Beş hafta önce sildiğiniz dosya, siz fark etmeden çok önce her anlık görüntüden kaybolmuştur. Sessiz bozulma — ince şekilde yanlış veri yazan bozuk bir uygulama, kötü bir geçiş, bir hatayı sadakatle yayan bir eşitleme istemcisi — genellikle bir ay sonra keşfedilir, bu noktada saklanan her kopya artık bozulmayı içeriyordur. Bunları kapsayan şey, daha uzun saklama süresine ve gerçek bir geçmişe sahip yedeklerdir ve bunları tam olarak mevcut durumun sürekli aynaları olmadıkları için kapsarlar.
Burada içselleştirmeye değer çerçeve eskidir ve hâlâ doğrudur. 3-2-1 kuralı, verinin üç kopyasını, iki farklı depolama türünde ve bunlardan birinin saha dışında olmasını ister. Modern ek iki basamak daha ekler — 3-2-1-1-0 — burada fazladan bir, değişmez ya da çevrimdışı olan bir kopyayı; sıfır ise son doğrulamanızdaki hata sayısını belirtir. Basamaklar bir standarttan çok bir anımsatıcıdır, ama gerçekten önemli olan üç özelliği kodlarlar: bağımsızlık, değişmezlik ve işin çalıştığına dair kanıt. Saatlik anlık görüntüler size bu üçünden birini verir.
| Senaryo | Saatlik anlık görüntü | Saha dışı yedek | Neden |
|---|---|---|---|
| Bir saat önce yapılandırmayı bozdunuz | İdeal | Gereksiz | Otuz saniyelik geri alma her geri yüklemeyi geride bırakır. |
| Bu sabah kötü bir paket yükseltmesi | İdeal | İşe yarar | Anlık görüntü, tüm birimi tek bir işlemle geri alır. |
| Beş hafta önce bir dosya silindi | Kayıp | Bunu karşılar | Yedi günlük saklama süresi çoktan doldu. |
| Bir ay sonra fark edilen yavaş bozulma | Kayıp | Bunu karşılar | Saklanan her anlık görüntü zaten bozulmayı içeriyor. |
| Ana bilgisayarın ele geçirilmesi, rootlu saldırgan | Risk altında | Yalnızca-ekleme ise bunu karşılar | Makinedeki kimlik bilgileri, makinenin silebildiği her şeye ulaşır. |
| Hesap kapatıldı ya da makineye el kondu | Kayıp | Bunu karşılar | Anlık görüntüler, kendilerini barındıran altyapıyla aynı kaderi paylaşır. |
| Başka bir sağlayıcıya geçmek istiyorsunuz | Taşınabilir değil | Bunu karşılar | Bir depo her yerde geri yüklenir; bir anlık görüntü yalnızca burada. |
O tabloyu, ikisi arasında seçim yapmak yerine ikisini birden çalıştırmak için bir gerekçe olarak okuyun. Anlık görüntüler sıklığı ve hızı halleder; yedekler bağımsızlığı ve geçmişi halleder. Farklı şeylere mal olurlar, birbiriyle örtüşmeyen şekillerde başarısız olurlar ve ikisinin birleşimi, ikisinden birinin iki katından çok daha güçlüdür.
Geri Kalan Her Şeyi Belirleyen İki Sayı
Herhangi bir araç kurulmadan önce iki rakamı not edin. Kurtarma noktası hedefi (RPO), zaman cinsinden ölçülen, kaybetmeyi göze alabileceğiniz veri miktarıdır — eğer kullanılabilir son kopya altı saatlik ise, RPO'nuz altı saattir ve aradaki altı saatlik iş kaybolmuştur. Kurtarma süresi hedefi (RTO) ise, yeniden kurarken ne kadar süre erişilemez kalmayı göze alabileceğinizdir. Bundan sonraki her şey — zamanlama, yöntem, ikinci kopyanın nerede yaşadığı, ne kadar harcadığınız — bu iki sayıdan çıkar ve yazılımı bunları seçmeden önce seçmek, insanların kimsenin sormadığı bir soruya karmaşık bir cevap bulmasının yoludur.
Gelişigüzel sorulduğunda çoğu kişi sıfır ve sıfır der. Bu bir bütçe değil bir dilektir ve açıkça belirtilmeye değer bir bedeli vardır: sıfıra yakın bir RPO, zamanlanmış kopyalar yerine sürekli çoğaltma anlamına gelir ve sıfıra yakın bir RTO, zaten çalışan sıcak bir ikinci makine anlamına gelir. İkisi de inşa edilebilir ve ikisi de korumaya çalıştığınız şeyin işletim maliyetini kabaca ikiye katlar. Kendi barındırdığınız iş yüklerinin ezici çoğunluğu için dürüst cevaplar, kurtarma noktası için bir saat ile bir gün arasında bir yerde ve kurtarma süresi için birkaç saattir; bu da zamanlanmış şifrelenmiş bir yedekleme ve belgelenmiş bir yeniden kurulumla rahatlıkla karşılanır.
Bu sayılar aynı makinedeki her veri kümesi için de farklıdır ve onları kullanışlı kılan ayrıntı da tam olarak budur. Posta en keskin örnektir: yirmi dakika önce gelen bir mesaj başka hiçbir yerde bulunmaz, yeniden oluşturulamaz ve göndereni onu yeniden göndermesi gerektiğinden habersizdir — bu yüzden bir posta sunucusu, yazılımın kendisi bir öğleden sonra içinde yeniden kurulabilse bile, dakikalar cinsinden ölçülen bir kurtarma noktası ister. Bir Bitcoin düğümü bunu tamamen tersine çevirir: zincir verisi, ağdaki her eşin size seve seve yeniden göndereceği birkaç yüz gigabayttır, dolayısıyla onu yedeklemek büyük ölçüde disk israfıdır; oysa yanındaki cüzdan dosyası kurtarılamaz ve tıpkı bir özel anahtar gibi korunmaya değerdir, çünkü zaten tam olarak odur.
| İş yükü | Gerçekten yerine konamaz | Makul RPO | Makul RTO | Biçim |
|---|---|---|---|---|
| Kişisel site ya da blog | İçerik, TLS hesap anahtarı | 24 h | Bir gün | Gecelik depo, notlardan yeniden kurulum |
| Posta sunucusu | Maildir, DKIM anahtarları, takma adlar | 15 min | 2–4 h | Sık artımlı, bekleyen ikinci makine |
| Nextcloud ya da dosya eşitleme | Veri dizini, veritabanı, yapılandırma | 6–24 h | Bir gün | Bakım modunda döküm ile gecelik |
| Matrix ana sunucusu | Postgres, imzalama anahtarı, medya deposu | 1–6 h | Saatler | Saatlik veritabanı dökümü, gecelik medya |
| Bitcoin ya da Lightning düğümü | Cüzdan, kanal durumu, macaroonlar | Dakikalar (kanal durumu) | Saatler | Zincir verisi yeniden eşitlenir; yalnızca anahtarları yedekleyin |
| Geliştirme kum havuzu | Genellikle hiçbir şey | Yok | Yok | Tek başına anlık görüntüler savunulabilir bir cevaptır |
Bu son satırı yüksek sesle söylemekte fayda var, çünkü yedeklerle ilgili bir rehberin bunu söylememek için bariz bir teşviki vardır. Bazı makinelerin buna ihtiyacı yoktur. Tüm durumu bir git deposundan gelen bir derleme ajanı, tek kullanımlık bir kum havuzu, yapılandırması sürüm kontrolünde yaşayan durum bilgisi tutmayan bir ters proxy — bunlar için plana dahil olan saatlik anlık görüntüler eksiksiz ve savunulabilir bir cevaptır ve doğru miktarda yedekleme mühendisliği hiçtir. Sunucularınızdan hangilerinin bu kategoride olduğunu bilmek, hepsini kötü bir şekilde yedeklemekten daha değerlidir.
Kopyalamanız Gerekenler — Ve Atlamanız Gereken Çok Daha Büyük Yığın
İçgüdü, diskin tamamını imajlamaktır ve kiralık bir sanal makinede bu içgüdü yanlıştır. İşletim sistemi gözden çıkarılabilirdir: burada yeni bir sunucu medyan kırk bir saniyede temin edilir ve paketleri bir dağıtım yansısından yeniden kurmak, onları kendi kopyanızdan geri yüklemekten daha hızlı ve daha güvenilirdir. Gözden çıkarılamaz olan şey şaşırtıcı derecede küçük bir kümedir ve bu kümeyi açıkça adlandırma disiplini işin büyük kısmıdır — bir paragrafta tarif edebileceğiniz bir yedek doğrulayabileceğiniz bir yedektir, oysa tüm diskin bir imajı umut beslediğiniz bir şeydir.
Yerine konamaz küme genellikle dört şeyden oluşur. Birincisi, uygulama verisi: maildir, veri dizini, medya deposu, yükleme klasörü. İkincisi, kendi işlemini gerektiren ve bir sonraki bölümü hak eden veritabanları. Üçüncüsü, sırlar — ve bu, insanların pahalıya mal olana kadar unuttuğu kategoridir. TLS özel anahtarları ve ACME hesap anahtarı, her istemcide parmak izine yeniden güvenmek istemiyorsanız SSH ana bilgisayar anahtarları, olmadan postanızın kimlik doğrulamasının başarısız olmaya başlayacağı DKIM imzalama anahtarı, WireGuard özel anahtarları ve hepsinden önemlisi onion hizmeti özel anahtarı — bu, .onion adresinin ta kendisidir: onu kaybedin, adres kalıcı olarak gider, başvurabileceğiniz hiçbir sicil de yoktur. Dördüncüsü, gerçekten değiştirdiğiniz /etc altındaki bir avuç dosya, artı makinenin davrandığı şekilde davranmasını sağlayan systemd birimleri, cron girdileri ve güvenlik duvarı kural kümesi.
Atlanacak yığın çok daha büyüktür ve bir kez belirtildiğinde çoğunlukla bariz hale gelir. /proc, /sys ve /dev gibi sözde dosya sistemleri, veriden çok çekirdek görünümleridir. Paket önbellekleri, konteyner imajları, sanal ortamlar ve bağımlılık dizinleri, saniyeler içinde bir kilit dosyasından yeniden türetilebilir. Saklama politikanızın ötesindeki günlükler, kötü tekilleşen ve her sonraki çalıştırmayı şişiren bir gürültüdür. Ve büyük, yeniden eşitlenebilir veri kümeleri — blok zinciri durumu, herkese açık bir yansı, yeniden riplenebilecek bir medya kitaplığı — varsayılan yerine açık bir karar hak eder: üç yüz gigabaytlık zincir verisini yedeklemek, hizmet düşük performansla ama işlevsel kalırken ücretsiz çalıştırabileceğiniz bir yeniden eşitlemeden kaçınmak için her ay gerçek para harcamak demektir.
Neredeyse herkesin yetersiz yatırım yaptığı kısım, "neyin içine geri yüklenecek?" sorusunun cevabıdır. Hedefi olmayan veri bir kurtarma değildir. Sunucunuzun nasıl kurulduğu yalnızca hafızanızda ve o zamandan beri kaybettiğiniz bir kabuk geçmişinde yaşıyorsa, depo ne kadar iyi olursa olsun kurtarma süreniz sınırsızdır. Çözüm ucuz ve sıkıcıdır: temin adımlarını bir betik ya da düz metin bir eylem planı olarak saklayın, veriyle birlikte geri yüklenmesi için onu yedekleme deposunun içine koyun ve makineyi her değiştirdiğinizde güncelleyin. Yüz satırlık notlar bile — paketler, sürümler, yapılandırma dosyası konumları, DNS kayıtları, hizmetlerin başlaması gereken sıra — kötü bir haftayı kötü bir öğleden sonraya dönüştürür.
Tam disk şifreleme kullanan herkesin dikkatini çekmeye değer bir ayrıntı: LUKS başlığı ve anahtar yuvaları da yerine konamaz kümenizin bir parçasıdır. Bozulmuş bir başlık, kusursuz sağlam bir diski rastgele gürültüye dönüştürür; başlık birkaç megabayttır ve onu yedeklemenin hiçbir maliyeti yoktur. Onu parola kadar dikkatli saklayın — ikisini birden elinde tutan, diski de elinde tutar.
Veritabanları: Kopyaladığınız Dosya, Veritabanı Değildir
Bu, aksi takdirde yeterli olan bir yedeğin işe yaramaz çıkmasının en yaygın tek yoludur. Bir veritabanı motoru, durumunu bellekte, bir write-ahead ya da redo günlüğünde ve sürekli değiştirilmekte olan veri dosyalarında tutar. Motor çalışırken bu dosyaları kopyalamak, onları farklı anlarda yakalar — bir işlemden önceki bir tablonun dördüncü sayfası, sonraki beşinci sayfası — ve sonuç, tek tek sağlam ama bir arada tutarsız olan bir dosya kümesidir. Acımasız kısmı, böyle bir kopyanın genellikle geri yüklenmesidir. Ayağa kalkar, sorguları yanıtlar ve hasar haftalar sonra bozuk bir indeks ya da motorun uyguladığına yemin ettiği bir kısıtlamayı ihlal eden bir satır olarak ortaya çıkar. Yüksek sesle başarısız olan bir yedek, sessizce başarısız olan bir yedekten çok daha iyidir.
Doğru yaklaşım motora bağlıdır ve her durum için iyi belgelenmiştir. MariaDB ve MySQL için, tek bir tutarlı işlem içinde alınmış bir mantıksal döküm, birkaç on gigabayta kadar olan her şey için doğrudur; bunun ötesinde, Mariabackup, sunucu çalışırken fiziksel bir sıcak kopya gerçekleştirir. PostgreSQL için, pg_dump size taşınabilir bir mantıksal anlık görüntü verir ve arşivlenmiş write-ahead günlükleriyle birleştirilmiş pg_basebackup size belirli bir ana geri yükleme imkânı verir — son dökümün ne zaman çalıştığından bağımsız olarak 14:32'ye geri yükleyebilme yeteneği. SQLite için, yerleşik çevrimiçi yedeklemeyi ya da VACUUM INTO komutunu kullanın; canlı bir veritabanı dosyası üzerinde cp kullanmak tam olarak yukarıda açıklanan hatadır ve SQLite, insanların bunu en sık yaptığı motordur çünkü sıradan bir dosya gibi görünür.
Veritabanı ile onun tarif ettiği dosyalar arasındaki tutarlılık, sorunun ikinci yarısıdır ve özellikle dosya eşitleme ve forum yazılımlarını ısıran yarısı da budur. Veritabanı bir dosyanın belirli bir yolda var olduğunu söyler; dosya sistemi ise baytların yaşadığı yerdir; veritabanını 02:00'de döküp veri dizinini 02:40'ta kopyalarsanız, arada oluşturulan her şey ya satırı olmayan baytlar ya da baytı olmayan bir satır olarak var olur. Bir bakım modu sunan uygulamalar — Nextcloud bunun bariz örneğidir — ikisi de yakalanırken kısaca yazmaları reddederek bunu çözer. Bunun kabul edilemez olduğu yerlerde, tek bir anda alınan bir dosya sistemi ya da birim anlık görüntüsü, size boş zamanınızda kopyalayabileceğiniz tutarlı bir çift verir; bu da saatlik anlık görüntülerin kullandığı numaranın aynısıdır.
Küçük bir operasyonel ayrıntı kendini hemen amorti eder: dökümleri sıkıştırılmadan yazın ve sıkıştırmayı yedekleme aracına bırakın. Hem restic hem borg, içerik tabanlı parçalamayla tekilleştirme yapar, dolayısıyla bir gün arayla alınan iki döküm, parçalarının ezici çoğunluğunu paylaşır ve ikincisini saklamanın maliyeti neredeyse sıfırdır. Önce dökümü sıkıştırın ve başlangıca yakın değişen tek bir bayt, sıkıştırılmış akışın tamamına yayılır, hiçbir parça hiçbir şeyle eşleşmez ve her çalıştırma tam bir kopya saklar. Ekipler, tam olarak bu yüzden depolarının her gün tüm veritabanı boyutu kadar büyüdüğünü rutin olarak fark eder — çözüm, bir kabuk betiğinden tek bir boruyu silmektir.
Son olarak, belirli bir ana geri yükleme imkânına ihtiyacınız olup olmadığına bilinçli olarak karar verin, çünkü bu, günlük dökümün ele alamayacağı bir başarısızlığın cevabıdır. Biri 14:32'de yıkıcı bir sorgu çalıştırırsa ve bunu 17:00'de keşfederseniz, dün geceki dökümü geri yüklemek bir iş gününü kaybettirir. Sürekli arşivleme ise bunun yerine günlüğü 14:31'e kadar yeniden oynatır. Daha fazla depolamaya ve belirgin şekilde daha fazla operasyonel karmaşıklığa mal olur, bu yüzden bu bir varsayılan değildir — ama yazma erişimine sahip bir insanın veriyi siz fark etmeden daha hızlı yok edebileceği her durumda, bu bir olayla bir felaket arasındaki farktır.
Ayrılmadan Önce Şifreleyin: restic, borg ve Kaybetmemeniz Gereken Anahtar
Bu rehberdeki geri kalan her şeyi mümkün kılan özellik, istemci taraflı şifrelemedir: veri, tek bir bayt bile ağı geçmeden önce, hedefin asla görmediği bir anahtar kullanılarak, onu üreten makinede şifrelenir. Bu tek tasarım kararı, yedekleme hedefini güvenilmez bir depolamaya dönüştürür ve güvenilmez depolama her yerde bulunabilir — başka bir ülkedeki ucuz bir sunucu, bir nesne deposu, bir arkadaşın NAS'ı — bunların hiçbiri verinizi okuyabilecek konumda olmadan. Sunucu tarafında şifreleyen sağlayıcılar sizi farklı ve çok daha dar bir tehdit kümesinden korurlar ve bu fark tam olarak, offshore barındırmayı satın alma nedeniniz olan durumlarda en çok önem kazanır.
Restic ve Borg bunun ikisi de doğru şekilde yapar ve aralarındaki seçim gerçekten de birbirine çok yakındır. Restic, hiçbir bağımlılığı olmayan tek parça statik bir ikili dosyadır, uzun bir arka uç listesini yerleşik olarak destekler — SFTP, S3 uyumlu nesne depolama, düz yerel yollar — ve bir konteynerden ya da minimal bir imajdan çalıştırılması bakımından ikisinden daha kolay olanıdır. Borg daha eski ve bazı açılardan daha cerrahi bir araçtır; daha güçlü sıkıştırma seçenekleri, sunucu tarafında mükemmel yalnızca-ekleme desteği ve birçok kişinin üzerine akıl yürütmesi daha kolay bulduğu bir depo biçimi sunar; SSH üzerinden giderken her iki uçta da borg kurulu olmasını ister, bu da bazen meseleyi belirleyen küçük bir kısıtlamadır.
| Özellik | restic | borg |
|---|---|---|
| İstemci taraflı şifreleme | Her zaman açık | Her zaman açık (repokey / keyfile) |
| Tekilleştirme | İçerik tabanlı parçalama, ana bilgisayarlar arası | İçerik tabanlı parçalama, depo başına |
| Arka uçlar | SFTP, S3, B2, Azure, yerel, REST | Karşı uçta borg ile SSH, yerel |
| Yedekleme hedefine kurulum | SFTP için gerekli değil | Gerekli |
| Yalnızca-ekleme zorunluluğu | rest-server --append-only | borg serve --append-only |
| Bir anlık görüntüyü dosya sistemi olarak gezinme | restic mount | borg mount |
| Eşzamanlı istemciler, tek depo | Destekleniyor | Aynı anda tek yazma |
| Doğrulama | check --read-data-subset | check --verify-data |
Hangisini seçerseniz seçin, artık her şey parolaya bağlıdır ve ona bir cüzdanın seed ifadesine gösterdiğiniz özeni göstermeyi hak eder. Yalnızca koruduğu makinede bulunmamalıdır — şifrelediği verinin yanında saklanan bir parola sizi tam olarak hiçbir şeye karşı korumaz, çünkü sunucuyu ele geçiren her senaryo anahtarı da beraberinde götürür. Onu farklı bir cihazdaki bir parola yöneticisine ya da farklı bir binadaki bir kağıda koyun; idealde ise ikisine birden. Borg, depo anahtarını ayrı bir dosyaya dışa aktarmanıza izin verir; restic ise bir deponun birden fazla bağımsız anahtar taşımasına olanak tanır; her iki mekanizma da bir dizi karakteri ezberlemeye bağlı olmayan ikinci bir giriş yolu sunar. Bunu geri alacak bir kurtarma, sıfırlama bağlantısı ya da destek talebi yoktur: anahtarı olmayan şifrelenmiş bir depo rastgele veriden ayırt edilemez — zaten bütün mesele de budur.
Düz rsync ile başka bir sunucuya kopyalamanın neden bir alternatif olmadığını açıkça ortaya koymakta fayda var, çünkü insanların ilk başvurduğu şey budur. Rsync bir ayna kopya üretir ve bir aynanın geçmişi yoktur: bugün bir dosyayı silin, bu gecenin çalıştırması onu orada da sadakatle siler. Tekilleştirmesi yoktur, dolayısıyla otuz günü saklamak, hard link'lerle akıllıca bir şey yapmadığınız sürece otuz kopya anlamına gelir. Bekleme halindeki veri için yerleşik bir şifrelemesi yoktur, bu yüzden hedef her şeyi okuyabilir. Ve kaynağı yeniden okumanın ötesinde bir doğrulama hikayesi de yoktur. Mükemmel bir taşıma aracıdır ama zayıf bir yedekleme yöntemidir ve bu fark, üç hafta önceki sürüme ihtiyaç duyduğunuz gün ortaya çıkar.
Yalnızca-Ekleme, Aksi Takdirde Bir Yedek Değil Kopyadır
Mimariyi belirleyen senaryo işte budur. Biri sunucunuzda root yetkisi ele geçirir — yaması yapılmamış bir uygulama, sızdırılmış bir token ya da düşmanlaşmış bir bağımlılık üzerinden. Artık kendi yedekleme hedefine ait geçerli kimlik bilgilerini elinde tutan bir makinenin içindedirler, çünkü zamanlanmış yedeklemeler tam olarak böyle çalışır. O makinenin silebildiği her şeyi onlar da silebilir ve yedekleri silmek modern bir sızmada sonradan akla gelen bir şey değildir, ilk adımdır. Aynı durum bir saldırgan olmadan da geçerlidir: root olarak çalıştırılan, içinde başıboş bir değişken bulunan iyi niyetli bir betik de bir depoyu budaya budaya hiçe indirmeye fazlasıyla muktedirdir.
Bunu kapatan kontrol, alıcı taraftaki yalnızca-ekleme zorunluluğudur. Bu şekilde yapılandırıldığında istemci yeni anlık görüntüler oluşturabilir ama eskilerini kaldıramaz ya da yeniden yazamaz — bu kısıtlama, istemcinin iyi niyetiyle değil, yedekleme sunucusundaki süreç tarafından zorunlu kılınır. Borg bunu borg serve --append-only ile uygular; bu, hedefin authorized_keys dosyasındaki anahtara sabitlenir, böylece istemci başka bir şey talep edemez. Restic aynı yapıyı --append-only ile birlikte rest-server üzerinden sağlar. Nesne depolamada bunun karşılığı, sürümlemeyle birlikte bir nesne kilidi saklama politikasıdır; bu da aynı sonuca farklı bir mekanizma üzerinden ulaşır.
Bunu taşıyan SSH yapılandırmasını tam olarak doğru kurmakta fayda var, çünkü yük taşıyan satır tam olarak budur. Yedekleme kullanıcısının authorized_keys dosyasında, istemcinin anahtarının başına zorunlu bir komut ve sshd el kitabının belgelediği kısıtlamaları ekleyin: command="borg serve --append-only --restrict-to-path /srv/backups/web01",restrict. Bu tek satır, istemciden çalınan bir anahtarın bir kabuk açamayacağı, bir portu yönlendiremeyeceği, başka bir sunucunun deposuna dokunamayacağı ve hiçbir şeyi silemeyeceği anlamına gelir. Her istemciye kendi anahtarını ve kendi yolunu verin.
Bu da bariz bir soruyu gündeme getirir: istemci hiçbir zaman silemiyorsa, eski anlık görüntüleri kim kaldırıyor? Budama başka bir yerde, belirli bir zamanlamayla ve korunan makinenin hiçbir zaman elinde bulundurmadığı bir kimlik bilgisiyle gerçekleşir. Pratikte bu, yedekleme sunucusunun kendi depolarını yerel bir cron üzerinden budaması ya da üçüncü, küçük bir makinenin ayrıcalıklı anahtarı elinde tutup saklama politikasını haftalık olarak çalıştırması anlamına gelir. Borg'da bilinen bir pürüz vardır — yalnızca-ekleme bir deponun compaction işleminin istemci tarafından değil sunucu tarafında çalıştırılması gerekir — ve yedekleme sunucusunu saklama politikasının sahibi olarak ele almak bunu temiz bir şekilde çözer. İlke şu şekilde genellenebilir: yedekleri yazan makine, onları yok edebilecek makine olmamalıdır.
Saklamanın kendisi, işe yarayan geleneksel bir cevabı olan bir politika meselesidir: son birkaç günlük, dört veya beş haftalık ve altı ila on iki aylık anlık görüntüleri saklayın. Her iki araç da bunu bildirimsel biçimde ifade eder, yani siz istediğiniz şekli belirtirsiniz ve hangi anlık görüntülerin bunu karşıladığına aracın karar vermesine izin verirsiniz. Yavaş bozulmayı yakalayan aylık anlık görüntülerdir ve depo büyüdüğünde insanların ilk kestiği de yine bunlardır — bu ise tam anlamıyla tersine bir yaklaşımdır, çünkü neredeyse hiç değişmeyen bir veri kümesinin sıkıştırılmış, tekilleştirilmiş aylık kopyasının maliyeti neredeyse sıfırdır.
Kimse Sizi Tanımlayamadığında İkinci Kopya Nereye Gider
Saha dışı olmak, 3-2-1 kuralında büyük bir iş yükünü üstlenir ve KYC istemeyen bir sağlayıcıda bu, "başka bir bina" ifadesinden çok daha spesifik bir şey anlamına gelir. Bu, hayatta kalması orijinaliyle aynı şirkete, aynı hesaba, aynı ödeme ilişkisine ya da aynı hukuki yargı alanına bağlı olmayan bir kopya anlamına gelir. Tek bir hesaptaki iki sunucu, veri merkezleri birbirinden ne kadar uzakta olursa olsun, tek bir kaderi paylaşan iki sunucudur: herhangi bir nedenle kapatılan bir hesap ikisini de beraberinde götürür ve bir tüzel kişiye tebliğ edilen bir hukuki belge, o kişinin elinde tuttuğu her şeye ulaşır. Bağımsızlık, yalnızca coğrafyanın değil, ilişkinin bir özelliğidir.
Bunun pratikteki hâli kulağa geldiğinden daha kolaydır, çünkü aynı panel zaten dört yargı alanı sunuyor. Hollanda'da bir üretim sunucusu ve deposunu İzlanda'daki bir Starter katmanına gönderen bir kurulum ayda $8.50'ye mal olur ve kurtarma işleminizi tek bir ulusal sürecin erişiminin dışına çıkarır — çünkü yargı alanları fiilen neye karşı dayandıkları konusunda birbirinden farklıdır, bu eşleştirme yazı tura atmaktan çok bir anlık düşünmeye değer. Depo, kaynağı terk etmeden önce şifrelendiğinden, yedekleme sunucusu tasarım gereği güvenilmez kabul edilir: ikinci konumla satın aldığınız şey gizlilik değil, erişilebilirlik ve hukuki mesafedir. Gizliliğe zaten sahipsiniz.
Gerçek anlamda bağımsız bir üçüncü kopya için en güçlü mimari, bağlantının yönünü tersine çevirir. Sunucunun kimlik bilgilerine sahip olduğu bir hedefe göndermesi yerine, sizin kontrolünüzdeki bir makine — evdeki bir kutu, bir NAS, belirli bir zamanlamayla uyanan bir dizüstü bilgisayar — sunucudan çeker. Bu durumda üretim makinesi hiçbir yedekleme hedefine ait herhangi bir kimlik bilgisi tutmaz; bu da önceki bölümdeki ele geçirilme senaryosunu yalnızca hafifletilmiş değil, yapısal olarak imkânsız hale getirir. Size, belirli bir zamanlamayla erişilebilir ya da uyanık olması gereken bir makineye mal olur; bu yüzden gönderilen bir saha dışı kopyanın yerini almaktan çok onu tamamlar.
| Konum | Maliyet | Sunucu ele geçirilmesine dayanır mı | Hesap kaybına dayanır mı | Notlar |
|---|---|---|---|---|
| Saatlik anlık görüntüler, aynı plan | Dahil | Hayır | Hayır | En hızlı geri alma; yedi günlük pencere |
| İkinci sunucu, ikinci yargı alanı | $8.50/mo'dan itibaren | Evet, yalnızca-ekleme ise | Hayır — aynı hesap | Ucuz hukuki ve fiziksel mesafe |
| Adanmış sunucu, aynalanmış NVMe | $39.50/mo'dan itibaren | Evet, yalnızca-ekleme ise | Hayır — aynı hesap | Birkaç yüz gigabaytı aştığında doğru seçim |
| Sahip olduğunuz donanımdan çekme | Elektrik | Evet, yapısal olarak | Evet | Sunucu hiçbir kimlik bilgisi tutmaz |
| Üçüncü taraf nesne depolama | GB başına | Evet, nesne kilidiyle | Evet | Kendi anonim ödeme yoluna ihtiyaç duyar |
Bu tür bir barındırmaya özgü iki kısıtlamayı süslemeden ifade etmekte fayda var. Hesap kurtarma diye bir şey yoktur: sunacağınız bir kimlik belgesi, kod almak için bir telefon numarası ya da sizin siz olduğunuzu doğrulayabilecek bir temsilci bulunmaz. Bu, kayıt sırasında parasını ödediğiniz özelliğin ta kendisidir ve simetrik olarak işler — bu da parolayı ve eylem planını, ana akım bir sağlayıcıda hiçbir zaman olmadıkları kadar yük taşıyan unsurlar haline getirir. Ve yedekleme hedefinin ödenmesi gerekiyorsa, bunun da anonim şekilde ödenmesi gerekir; aksi halde ikinci kopya, ilkinin kaçınmak üzere tasarlandığı kimlik bağlantısını sessizce yeniden ortaya çıkarır. Her iki makine için de aynı kripto cüzdanından ödeme yapmak sorun değildir; yedeklemeyi bir kartla ödemek ise bir gözden kaçırma değil, bir karardır.
Tatbikat ve İşe Yaramadığını Nasıl Anlarsınız
Yedekleme işleri genellikle dramatik bir şekilde başarısız olmaz. Kademeli olarak başarısız olurlar: bir temizlik sırasında genişletilen bir dışlama deseni, yalnızca bir tarafta değiştirilen bir kimlik bilgisi, hedefte dolan bir disk, bir dağıtım yükseltmesinde kaybolan bir cron girdisi. Bu durumların her birinde makine çalışmaya devam eder, hiçbir uyarı tetiklenmez ve depo sessizce büyümeyi bırakır. Bunu yakalayan tasarım "başarısızlıkta uyar" değildir — artık çalışmayan bir iş kendi başarısızlığını bildiremez — "başarının yokluğunda uyar"dır. Her başarılı çalıştırmanın bir ölü adam anahtarı uç noktasına ping göndermesini sağlayın ve bu uç noktanın, ping zamanında gelmediğinde ses çıkarmasını sağlayın. On dakikalık bir kurulumdur ve bir gün içinde fark etmekle bir geri yükleme sırasında fark etmek arasındaki farkı yaratır.
Bütünlük denetimi ikinci yarıdır. Her iki araç da deponun meta verisinin tutarlı olduğunu ve daha da faydalı olarak, saklanan parçaların gerçekten şifresinin çözülüp özetleriyle eşleştiğini doğrulayabilir. Her şeyi okumak bant genişliği açısından pahalıdır, bu yüzden her ikisi de kısmi bir biçim sunar — restic her çalıştırmada verinin belirli bir yüzdesini kontrol eder, borg ise veriyi talep üzerine doğrular — ve makul bir sıklık, haftalık tam bir meta veri kontrolü ve aylık kısmi bir veri kontrolüdür; bu da bir çeyrek boyunca eksiksiz bir taramanın tamamlanacağı şekilde boyutlandırılır. Depolama gerçekten bozulur ve kontrol etmenin amacı, elinizde hâlâ başka bir kopya varken bunu öğrenmektir.
Bunların hiçbiri geri yükleme yapabileceğinizin kanıtı değildir. Bu kanıtın tam olarak tek bir kaynağı vardır, o da geri yüklemenin kendisidir. Yeni bir sunucu dağıtın — en küçük katman $8.50'dir ve bir saat içinde onu yok edeceksiniz — depoyu bunun içine geri yükleyin ve ardından insanların atladığı kısmı yapın: uygulamayı başlatın ve gerçek verilere bakın. Oturum açın. Geçen aydan bir belge açın. Posta sunucusu üzerinden bir test mesajı gönderin. İçinde dünün satırlarının bulunması gereken bir tabloyu sorgulayın. Dosyaların var olması test değildir; bunların üzerinde çalışan hizmetin çalışması testtir. Bunu yedeklemeyi ilk kurduğunuzda yapın, ardından gerçekten uyduğunuz bir takvim aralığında tekrarlayın, çünkü tatbikat aynı zamanda eylem planını da doğrular ve eylem planı veriden daha hızlı eskir.
| Kontrol | Sıklık | Neyi kanıtlar |
|---|---|---|
| Her çalıştırmadan sonra ölü adam anahtarı pingi | Her çalıştırmada | İş hâlâ çalışıyor ve başarılı oluyor |
| Depo meta veri kontrolü | Haftalık | İndeks ve anlık görüntü yapısı tutarlı |
| Kısmi veri doğrulaması | Aylık | Saklanan parçaların şifresi çözülüyor ve özetleriyle eşleşiyor |
| Canlı makineye tek bir dosya geri yükleme | Aylık | Kimlik bilgileri, parola ve yol hâlâ çalışıyor |
| Tek kullanımlık bir sunucuya tam geri yükleme | Üç ayda bir | Uygulama gerçekten geri geliyor |
| Geri yükleme sırasında eylem planını yeniden okuma | Üç ayda bir | Talimatlar mevcut makineyle örtüşüyor |
Eylem planı kendine ait bir paragrafı hak ediyor, çünkü burada en ucuz kalem o ve en sık eksik olan da o. Sırasıyla yazın: deponun nerede bulunduğu ve ona nasıl ulaşılacağı, parolanın nerede saklandığı, yedek bir makinenin nasıl temin edileceği, hangi paketlerin ve sürümlerin kurulacağı, neyin ve hangi sırayla geri yükleneceği, hangi DNS kayıtlarının değiştirileceği ve işe yaradığının nasıl doğrulanacağı. Onu tarif ettiği makinenin dışında saklayın — deponun kendisinde, bir parola yöneticisinde, kağıt üzerinde — ve onu okuyan kişinin yorgun olduğunu, nahoş bir saatte çalıştığını ve muhtemelen siz olmadığınızı varsayın. Bu son varsayım, bir not yığınını bir meslektaşın ya da bir aile üyesinin uygulayabileceği bir şeye dönüştüren şeydir.
Bir araya getirildiğinde, tasarımın tamamı sıradandır ve erdemi de tam olarak budur: planınızın son birkaç günün kazaları için zaten içerdiği saatlik anlık görüntüler, her gece silinemeyeceği ikinci bir yargı alanına gönderilen şifrelenmiş bir depo, sunucunun hiçbir zaman görmediği bir yerdeki bir parola, iş sessizleştiğinde şikayet eden bir ping ve takvimde yer alan bir prova. Bu listedeki hiçbir şey zor değildir, büyük kısmı bir öğleden sonra sürer ve bütün bunların toplam maliyeti, sıfırdan yeniden kurarken satın alacağınız kahveden bile aylık olarak daha azdır. Bunu şimdi kuruyorsanız, ikinci makinenin temin edilmesi yaklaşık bir dakika sürer — hiç test etmediğiniz geri yüklemeyle başlayın, çünkü size gerçeği söyleyen tek kısım budur.