Parola yalnızca ölü makinede kalmıştı
Depo sağlam, şifreli ve kalıcı olarak okunamaz durumdadır. Parolayı — Borg için ayrıca dışa aktarılan anahtarı — ilk anlık görüntüden önce bir parola yöneticisinde ve kağıt üzerinde saklayın.

Şifreli VPS yedekleme: korumasız bir sunucudan, ikinci bir yargı bölgesindeki ikinci bir makinede doğrulanmış şifreli bir depoya altı adım — restic ile Borg karşılaştırması, temiz geri yüklenen veritabanı dump'ları, bir systemd zamanlayıcısı ve ele geçirilmiş bir sunucunun silemeyeceği append-only bir depo. İkinci sunucu ayda $3.90'a mal olur. Debian 12 üzerinde test edildi.
Envanter
Yeniden inşa edilemeyen
Kur
restic veya Borg
Hedef
İkinci bir kale
Başlatın
Depo + ilk çalıştırma
Otomatikleştirin
Dump'lar, zamanlayıcı, saklama
Tatbikat
Geri yükleyin ve süresini ölçün
Yedekler hakkındaki neredeyse her tartışma ilk dakikada yanlış gider, çünkü konuşan iki kişinin kafasındaki arıza farklıdır. Biri ölü bir disk düşünmektedir. Diğeri hesabın ortadan kalktığı bir salı sabahını düşünmektedir. İkisinin de farklı yanıtlara ihtiyacı vardır ve yalnızca birincisini atlatan bir kurulum, ikincisiyle sınanana kadar güvenli hissettirir.
Karşı tasarım yapmaya değer dört başarısızlık modu vardır ve bunlar bir temanın varyasyonları değildir — her biri farklı bir savunmayı alt eder.
Donanım. NVMe arızalanır, host node çöker, dizi aynı anda iki üyesini kaybeder. Herkesin planladığı arıza budur ve modern sanallaştırılmış altyapıda en nadir görülenidir. Yedekli depolama bunu karşılar. Yedekli depolama başka hiçbir şeyi karşılamaz; RAID'in bir yedekleme olmamasının ve hiçbir zaman olmamış olmasının nedeni de budur: her yazmayı sadakatle kopyalar, "her şeyi sil" diyen yazma dahil.
İnsani. Üretime karşı çalıştırılan bir taşıma betiği. Yanlış terminalde bir DROP TABLE. Argümanları ters çevrilmiş bir rsync. Bu, gerçek veri kaybının açık ara en yaygın nedenidir ve buna karşı tek savunma geçmiştir — hatadan öncesine ait, hatanın ulaşamadığı bir yerde tutulan bir kopya. Burada belirleyici olan zamandır: tek kopya otuz saniye geride bir aynaysa, o hatayı zaten içerir.
Kötü niyetli. Biri root erişimi ele geçirir ya da fidye yazılımı yamalanmamış bir uygulama üzerinden içeri sızar. Modern fidye yazılımının yaptığı ilk şey yedekleme yapılandırmasını — kimlik bilgilerini, bağlı paylaşımları, bulut anahtarlarını — aramak ve bulduğunu yok etmektir; çünkü çalışan bir geri yükleme, bir felaketi bir öğleden sonraya indirger. Silme yetkisi olan bir yedekleme kimlik bilgisi, saldırganın da devraldığı bir kimlik bilgisidir. Bu kılavuzun append-only bölümü tam olarak bu başarısızlık için var.
Emanete dayalı. Hiçbir şey bozulmadı ve hiçbir şeye saldırılmadı; sadece erişimi kaybettiniz. Otomatik bir dolandırıcılık sinyali nedeniyle askıya alınan bir hesap, seyahatteyken reddedilen bir kart, bir itiraz, bir uyumluluk incelemesi, sağlayıcıya tebliğ edilen bir emir. Makine sağlam ve erişilemez durumdadır, o hesabın içindeki her anlık görüntü de onunla birlikte erişilemezdir. Bu, bir sağlayıcı içindeki hiçbir yedekliliğin yanıtlayamayacağı bir arızadır ve ciddi bir yedeğin farklı bir çatı altında yaşamasının nedenidir.
| Savunma | Donanım | İnsan hatası | Fidye yazılımı | Kaybedilen hesap |
|---|---|---|---|---|
| RAID / yedekli depolama | Evet | Hayır | Hayır | Hayır |
| Sağlayıcı anlık görüntüsü, aynı hesap | Evet | Kısmen | Hayır | Hayır |
| Saha dışı depo, yazılabilir anahtar | Evet | Evet | Hayır | Evet |
| Saha dışı depo, append-only, farklı yargı bölgesi | Evet | Evet | Evet | Evet |
Son satır, bu kılavuzun geri kalanının inşa ettiği şeydir. Bir üstündeki satırdan daha pahalı değildir — append-only ayarı ücretsizdir ve ikinci yargı bölgesi de birincisiyle aynı olan $3.90'a mal olur.
Tek bir VPS için yeniden ifade edilmiş 3-2-1 kuralı. Verinin üç kopyası, iki farklı tür depolamada, bunlardan biri de site dışında. Klasik formülasyon teyp ve ofis sunucuları çağından gelir ve ruhu, harfinden daha iyi hayatta kalır. Tek bir self-hosted sunucu için şöyle okunur: VPS üzerindeki canlı veri, başka bir yerdeki ikinci bir makinede bir depo ve — gerçekten yerine konamaz herhangi bir şey için — elinizde tutabileceğiniz, evde bir diskte ya da bir çekmecede duran üçüncü bir kopya. Gerçekte önemli olan sayı üç değildir. Veri kaybolmadan önce kaç bağımsız şeyin ters gitmesi gerektiğidir. Sahip olmaya değer asgari sayı ikidir.
İstediğiniz kategori, deduplikasyon yapan, şifreleyen bir anlık görüntü aracı olarak adlandırılır. Her dosyayı içeriğe göre belirlenmiş chunk'lara böler, her chunk'ı veriyi barındıran makinede şifreler ve kaç anlık görüntü ona referans verirse versin sadece bir kez saklar. Bu size aynı anda üç özellik kazandırır: tek bir noktanınkine yakın bir alan karşılığında çok sayıda geri yükleme noktası, kaynaktan asla çıkmayan düz metin ve yalnızca değişeni taşıyan bir aktarım.
Bu alanda iki program hakimdir ve ikisi de mükemmeldir. restic, geniş bir depolama backend'i yelpazesine sahip tek bir statik Go ikili dosyasıdır. BorgBackup ise uzak uçtaki kendi kopyasıyla SSH üzerinden konuşan bir Python programıdır. Aşağıdaki her şey ikisi arasındaki dürüst farktır.
| Özellik | restic | BorgBackup | rsync / rclone |
|---|---|---|---|
| İstemci tarafında şifreleme | Her zaman açık, isteğe bağlı değil | Her zaman açık, isteğe bağlı değil | Yalnızca bir rclone crypt remote üzerinden |
| Tekilleştirme | İçerik tanımlı yığınlar | İçerik tanımlı yığınlar | Yok, ya da hardlink ağaçları |
| Anlık görüntü geçmişi | Evet, saklama politikalarıyla | Evet, saklama politikalarıyla | Şu anın bir aynası |
| Hedef gereksinimleri | Hiçbir şey — SFTP, S3, REST, rclone | Her iki uçta da kurulu Borg | Bir SSH hesabı ya da bir API |
| Append-only zorunluluğu | rest-server veya nesne kilidi üzerinden | Yerleşik, düz SSH üzerinden | Hiçbiri |
| Şunlar için uygun | Neredeyse herkes, çoğu arka uç | Sahip olduğunuz bir SSH makinesi, append-only | Aynalama, yedek değil |
rsync tabloda yer alır çünkü çoğu insanın ilk başvurduğu araçtır ve çünkü gerçekten yanlış araçtır: bir ayna, bir silmeyi sadakatle yeniden üretir ve durağan halde şifreli bir diskin aynası kendisi hiçbir yerde şifreli değildir. Yerini bir yedeğin içinde, arşivin kendisi olarak değil, tamamlanmış bir arşivi taşıyan şey olarak kazanır.
Bu kılavuz, farklılık gösteren her komut için hem restic'i hem de Borg'u gösterir, böylece ikisinden birini izleyebilirsiniz. Tek bir seçim yapılması gereken yerlerde — çözümlü örnek, zamanlayıcı, script — restic kullanılır, çünkü bu durumda hedefin bir SSH hesabından başka hiçbir şeye ihtiyacı olmaz ve bu da ikinci makineyi sıradan tutar.
Tüm dosya sistemini yedeklemek savunulabilir ama israfçı bir seçimdir. Bir sunucunun büyük kısmı bir paket yöneticisi uzaklıkta yeniden oluşturulabilir ve taşıdığınız her gigabayt, depoyu budamayı yavaşlatır, tutmayı pahalılaştırır ve acele ettiğinizde aramayı yavaşlatır. Yararlı olan alıştırma bunun tersidir: yeni bir kurulumun size geri veremeyeceklerini listeleyin.
Tipik bir kendi kendine barındırılan VPS için bu liste kısadır ve her zaman şu beş şeyi içerir:
Listeyi kaynak sunucuda iki dosyaya dönüştürün. Bir include listesi niyeti görünür tutar; bir exclude listesi gürültüyü dışarıda bırakır. İkisi de yedekleme komutu tarafından okunur ve ikisi de yedeğin kendisine dahil olmalıdır.
/etc/backup/include.txt
/etc
/opt
/root
/var/backups
/var/lib/docker/volumes
/home
/etc/backup/exclude.txt
# Caches and rebuildable artefacts
**/node_modules
**/.cache
**/*.tmp
/var/lib/docker/volumes/*/_data/cache
# Log noise — keep the config, drop the volume
/var/log/journal
# Never back up the mount point you restore into
/mnt/restore
O Docker satırıyla ilgili iki not, çünkü insanları yanıltıyor. Named volume'lar /var/lib/docker/volumes altında yaşar ve istediğiniz de budur; bind mount'lar ise koyduğunuz her yerde, genellikle Compose dosyasının yanında yaşar ve /opt tarafından kapsanır. Container imajları veri değildir — bir pull ile geri gelirler ve bunları taşıyan bir yedekleme, ihtiyaç duymadığı gigabaytları taşıyor demektir.
Son olarak, etrafında bir şey inşa etmeden önce sonucu ölçün. Bu sayı hangi depo katmanını sipariş etmeniz gerektiğini ve ilk çalıştırmanın dört dakika mı yoksa kırk dakika mı süreceğini söyler:
du -sh --exclude=/var/lib/docker/overlay2 /etc /opt /root /home /var/lib/docker/volumes
Aracı verinin sahibi olan makineye kurun. Debian ve Ubuntu'da ikisi de paketlenmiştir ve restic için dağıtım paketi genellikle bir iki sürüm geridedir — bu önemlidir, çünkü depo özellikleri ve performans çalışmaları alt sürümlerde gelir. Paketi kurun, sonra restic'in kendini yerinde güncellemesine izin verin:
apt update && apt install -y restic
restic self-update
restic version
Borg için dağıtım paketi doğru seçimdir, çünkü kaynaktaki sürümle hedefteki sürümün birbirini anlaması gerekir ve aynı dağıtım sürümünden eşleşen bir çift bunu elde etmenin en az sancılı yoludur:
apt install -y borgbackup
borg --version
Bir depoya yılların geçmişini emanet etmeden önce büyük sürümler hakkında bir söz: Borg'un depo biçimi ana sürüm hatları arasında değişti ve bir depoyu bu sınırın ötesine taşımak bir yükseltme değil bir dönüştürmedir. Kurduğunuz sürümün sürüm notlarını okuyun ve hedefi kaynakla aynı ana sürüm hattında tutun. restic sürümleri arasında geriye dönük uyumlu kalmıştır ve yeni özellikleri açık bir depo sürümünün ardında ekler, dolayısıyla buradaki benzer endişe daha küçüktür.
İki araçtan hiçbiri kaynakta bir daemon, bir ajan ya da açık bir port gerektirmez. Bunu açıkça söylemekte fayda var: kurduğunuz yedekleme sistemi, koruduğu makineye ne dinleyen bir hizmet ne de yeni bir saldırı yüzeyi ekler. Yaptığı her şey giden yöndedir, bir zamanlamaya bağlı olarak, SSH üzerinden.
Depo sunucusunun tek bir işi vardır ve neredeyse hiçbir gereksinimi yoktur. Çekirdeğe ihtiyacı yoktur, çünkü verinizi hiçbir zaman okumaz — açamadığı şifreli blob'ları tutar. Belleğe ihtiyacı yoktur, çünkü deduplikasyon işi kaynakta gerçekleşir. İhtiyacı olan disk, sabit bir adres ve kaynak makinenin sorunlarının kendisini takip etmediği bir yerdir.
Panelde: Order → VPS → Sentinel, imaj Debian 12 ve — asıl mesele — kaynağın çalıştığı kaleden farklı bir kale. Helsinki çalışıyor, Reykjavík tutuyor. Hesabı açmak için e-posta adresi gerekmez ve fatura Monero, Bitcoin, Lightning ya da desteklenen diğer varlıklardan biriyle ödenir; bu da ikinci makinenin, birincisinin özenle sakındığı kimliği yeniden ortaya çıkarmadığı anlamına gelir.
| Depo hedefi | Aylık | Depolama | Tuttuğu çalışma kümesi | Geri yükleme maliyeti |
|---|---|---|---|---|
| Sentinel | $3.90 | 120 GB NVMe | ~30 GB | Hiçbir şey — ölçümsüz |
| Garrison | $7.90 | 240 GB NVMe | ~70 GB | Hiçbir şey — ölçümsüz |
| Ravelin | $16.90 | 480 GB NVMe | ~150 GB | Hiçbir şey — ölçümsüz |
| Bulwark | $32.90 | 960 GB NVMe | ~300 GB | Hiçbir şey — ölçümsüz |
| S3 sınıfı nesne depolama | ~$0.023/GB | Esnek | Herhangi biri | Ölçülü giden trafik |
Çalışma kümesi sütunu, normal değişim hızıyla bir yıl saklanan günlük anlık görüntüleri varsayar; ağırlıklı olarak yavaş değişen dosyalar tutan bir depo çok daha uzun gider, sıkça yeniden yazılan büyük ikili dosyalarla dolu bir depo ise daha kısa gider. Son satır ölçek için ve insanların o kötü güne kadar unuttuğu bir ayrıntı için oradadır: nesne depolama indirme için de ücret alır ve acil durumda yaptığınız şey de indirmedir.
Hedefte — yetkisiz bir kullanıcı ve bir dizin.
adduser --disabled-password --gecos "" backup
install -d -m 0700 -o backup -g backup /srv/restic/web01
Yedekleme kullanıcısının parolası, sudo yetkisi ve giriş yapabileceği hiçbir şeyi yoktur. Yalnızca bir dizine sahip olmak için var olur. Birden fazla makineyi yedekliyorsanız her kaynak makine için ayrı bir dizin verin — kaynak başına bir depo, bir sunucudaki ele geçirilmenin başka birinin geçmişine dokunmasını engeller.
Kaynakta — başka hiçbir şey için kullanılmayan bir anahtar.
ssh-keygen -t ed25519 -f /root/.ssh/id_backup -N "" -C "backup:web01"
cat /root/.ssh/id_backup.pub
Giriş anahtarınızı yeniden kullanmayın. Bu anahtar diskte şifrelenmemiş halde durur, çünkü gözetimsiz bir zamanlayıcının sabahın üçünde onu kullanması gerekir; bu da tam olarak tek bir hedefe ve tek bir amaca kapsamlandırmak isteyeceğiniz türden bir anahtardır.
Yine hedefte — o anahtarın yapabileceklerini kısıtlayın. Genel anahtarı, önüne bir önek ekleyerek /home/backup/.ssh/authorized_keys dosyasına yapıştırın. SFTP üzerinden restic için:
restrict,from="198.51.100.7" ssh-ed25519 AAAAC3NzaC1lZDI1... backup:web01
restrict seçeneği tek kelimeyle port forwarding, agent forwarding, X11 ve PTY tahsisini kapatır, geriye yalnızca dosya aktarımını bırakır. from= ifadesi anahtarı kaynak adrese sabitler, böylece sunucudan çalınan bir kopyası başka hiçbir yerde işe yaramaz. Borg için bir adım daha ileri gidin ve append-only modunun yaşadığı yer olan komutu zorunlu kılın:
command="borg serve --append-only --restrict-to-path /srv/borg/web01",restrict ssh-ed25519 AAAAC3NzaC1lZDI1... borg:web01
O satır, fidye yazılımına karşı tüm savunmayı tek bir yerde toplar: kaynak ne gönderirse göndersin, hedef yalnızca borg serve'ü çalıştırır, yalnızca o yol içinde ve yalnızca ekleme yapan bir modda. Kaynaktaki bir root kabuğu, geçen ayı silmek için bu anahtarı kullanamaz.
Hedefi kaynakta bir kez adlandırın. Sonraki her komutun kısa olması ve adresin tek bir dosyada yaşaması için bunu /root/.ssh/config içine koyun:
Host rkv-repo
HostName 198.51.100.42
User backup
IdentityFile /root/.ssh/id_backup
IdentitiesOnly yes
Ardından host anahtarını kabul etmek için elle bir kez bağlanın — ssh rkv-repo. Gözetimsiz bir zamanlayıcı bir parmak izi istemine yanıt vermez ve sessizce bir hafta boyunca asılı kalan bir ilk yedekleme klasik bir durumdur. Hedef üzerindeyken, ona sahip olduğunuz diğer her makineyle aynı muameleyi yapın: üzerinde de ilk saat güçlendirme kontrol listesini çalıştırın. Her şeyin bir kopyasını tutar ve tam saati hak eder.
Asla yazmayacağınız bir parola oluşturun. Bir betik tarafından bir dosyadan okunur, dolayısıyla uzunluğun hiçbir maliyeti yoktur ve akılda kalıcı yapmak için bir neden de yoktur:
openssl rand -base64 32 > /root/.restic-pass
chmod 600 /root/.restic-pass
cat /root/.restic-pass
Şimdi durun ve bu diziyi bu sunucu olmayan bir yere kopyalayın. Bir parola yöneticisi, bir çekmecedeki kağıt not, ikinci bir makine — kaynağın kaybını atlatabilecek herhangi bir yer. Bu, kendi barındırdığınız kasaları ve otomasyon motorlarını çökerten aynı hatadır: her şeyin şifresini çözen anahtar, her şeyin yanında saklanır ve ikisi birlikte kaybedilir. Parolası yalnızca koruduğu makinede var olan bir depo, yedek değildir; düzenli görünen bir gürültü yığınıdır.
Sonraki her komutun okuyacağı ortam dosyasını yazın:
/etc/backup/restic.env
RESTIC_REPOSITORY=sftp:rkv-repo:/srv/restic/web01
RESTIC_PASSWORD_FILE=/root/.restic-pass
chmod 600 /etc/backup/restic.env
set -a; . /etc/backup/restic.env; set +a
restic init
Borg için eşdeğer çift — repokey modu şifreleme anahtarını depo içinde, parola tarafından korunacak şekilde saklar; bu kullanışlıdır ve tam da bu yüzden anahtarın bir kopyasını da ayrıca dışa aktarırsınız:
export BORG_REPO=ssh://borg@rkv-repo/srv/borg/web01
export BORG_PASSCOMMAND="cat /root/.restic-pass"
borg init --encryption=repokey-blake2
borg key export :: /root/borg-key.txt # copy this off the server too
İlk anlık görüntü. Herhangi bir şeyi otomatikleştirmeden önce bunu elle çalıştırın, izleyin ve bitmesine izin verin. Yavaş olan budur — her chunk yenidir — ve include listesinin doğru olup olmadığını size söyleyen çalıştırma da budur:
restic backup \
--files-from /etc/backup/include.txt \
--exclude-file /etc/backup/exclude.txt \
--tag nightly --one-file-system --verbose
Kaynak trafik sunuyorsa ve yükleme bağlantıyı doyuruyorsa hız sınırlaması uygulayın. Bayrak saniyede kibibayt alır, dolayısıyla 20000 kabaca 20 MB/s'dir:
restic backup --limit-upload 20000 --files-from /etc/backup/include.txt
Bittiğinde, gerçekte ne aldığınıza bakın. Bu üç komut, şimdi ve altı ay sonra bunların hiçbirini düşünmeyi bıraktığınızda tekrar çalıştırmanız gerekenlerdir:
restic snapshots # the list, with dates and tags
restic stats latest # what the newest snapshot contains
restic ls latest /etc/backup # confirm a path you expected is in there
O üçüncü komut üzerinde durmaya değer. Bozuk yedeklerin yarısı aslında hiç bozuk değildir — bunlar yanlış dizinin eksiksiz, sağlıklı depolarıdır. Bulmayı beklediğiniz bir yolu, tam da ilk anlık görüntüde listelemek, include dosyası hâlâ aklınızdayken bunu yakalar.
Bir kez ifade edilmiş veritabanı kuralı. Çalışan bir veritabanı motoru durumu bellekte tutar ve kendi zamanlamasıyla diske yazar. O sırada dosyalarını okursanız birkaç farklı andan sayfalardan oluşan bir küme elde edersiniz — geri yüklenebilecek, bozuk şekilde geri yüklenebilecek ya da sorunsuz açılıp son bir saati sessizce eksik olan bir şey olarak geri yüklenebilecek bir dosya. Dışarıdan hangisi olduğunu anlamanın bir yolu yoktur. Bu yüzden yedekleme canlı dosyalara hiç dokunmaz: önce bir dump diske yazılır, yedekleme de bu dump'ı alır.
Her şey tek bir betiğe girer. Onu /usr/local/sbin/nb-backup.sh konumuna koyun, çalıştırılabilir yapın ve yedeğin kendisinde de saklayın:
#!/bin/sh
set -eu
# ---- 1. Consistent dumps, written where the include list will find them.
install -d -m 0700 /var/backups/db
# PostgreSQL in a container:
docker exec -t app-db pg_dumpall -U postgres | gzip -9 > /var/backups/db/postgres.sql.gz
# MariaDB / MySQL, InnoDB tables:
# docker exec -t mail-db mariadb-dump --single-transaction --all-databases \
# | gzip -9 > /var/backups/db/mariadb.sql.gz
# SQLite — never a plain file copy:
# sqlite3 /opt/app/data/app.db ".backup '/var/backups/db/app.db'"
# ---- 2. The snapshot.
restic backup \
--files-from /etc/backup/include.txt \
--exclude-file /etc/backup/exclude.txt \
--tag nightly --one-file-system
# ---- 3. Retention, then reclaim the space it freed.
restic forget --keep-daily 7 --keep-weekly 4 --keep-monthly 12 --prune
# ---- 4. Structural check every night; read 5% of the data on Sundays.
restic check
[ "$(date +%u)" = "7" ] && restic check --read-data-subset=5%
echo "backup ok: $(date -u +%FT%TZ)"
O script'teki üç ayrıntı, göründüğünden daha fazla iş yapıyor. Baştaki set -eu, başarısız bir dump'ın çalıştırmayı iptal etmesi anlamına gelir; aksi halde önümüzdeki altı ay boyunca sessizce dünün dump'ının anlık görüntüsü alınırdı. forget ve prune tek bir komuttur, çünkü asla yer geri kazanmayan bir saklama politikası, dolan bir diskten ibarettir. Ve pazar kontrolü yalnızca indeksi değil, gerçek verinin bir dilimini okur — depo bozulması nadirdir, sessizdir ve onu bulan tek şey okumaktır.
Zamanlayıcı. İki küçük unit dosyası. Burada doğru zamanlayıcı cron değil systemd'dir, çünkü bir zamanlayıcı size Persistent özelliğini verir — makine kapalıyken kaçırılan bir çalıştırma, sessizce atlanmak yerine bir sonraki açılışta gerçekleşir — ve çünkü journalctl bundan sonra her çalıştırmanın geçmişini tutar.
/etc/systemd/system/nb-backup.service
[Unit]
Description=Nightly encrypted offsite backup
Wants=network-online.target
After=network-online.target docker.service
[Service]
Type=oneshot
EnvironmentFile=/etc/backup/restic.env
ExecStart=/usr/local/sbin/nb-backup.sh
Nice=10
IOSchedulingClass=idle
/etc/systemd/system/nb-backup.timer
[Unit]
Description=Nightly encrypted offsite backup
[Timer]
OnCalendar=*-*-* 03:00:00
RandomizedDelaySec=45m
Persistent=true
[Install]
WantedBy=timers.target
systemctl daemon-reload
systemctl enable --now nb-backup.timer
systemctl list-timers nb-backup.timer
systemctl start nb-backup.service && journalctl -u nb-backup.service -n 40 --no-pager
Rastgeleleştirilmiş gecikme bir süs değildir. İnternetteki her self-hosted sunucu bakımını tam olarak 03:00'te çalıştırır ve log rotasyonu, sertifika yenilemesi ile container güncellemesiyle aynı saniyede başlayan bir yedekleme, gecesini I/O için onlarla mücadele ederek geçirir. Başlangıcı kırk beş dakikaya yaymak hiçbir şeye mal olmaz ve tüm bir gizemli yavaş gece kategorisini ortadan kaldırır.
Ardından başarısızlığı gürültülü hale getirin. Bu, herkesin atladığı ve yukarıdakilerin herhangi birinin yapmaya değip değmediğine karar veren adımdır. Çalışmayı bırakan bir yedekleme hiçbir şey bildirmez: zamanlayıcı tetiklenmeye devam eder, servis başarısız olmaya devam eder ve gösterge paneli yeşil kalırken son iyi anlık görüntü geçmişe doğru uzaklaşır. Servise, gerçekten göreceğiniz bir şey gönderen bir OnFailure= birimi ekleyin ve ayda bir kez anlık görüntü listesinin en üstüne göz atın. Tek satır, tek alışkanlık.
restic snapshots --latest 3 # is the newest one from last night?
systemctl list-timers nb-backup.timer # is the timer still armed?
İki tatbikat vardır ve farklı sorulara yanıt verirler. Küçüğü "veri gerçekten orada ve okunabilir mi?" sorusunu sorar ve doksan saniye sürer. Büyüğü "servisi geri getirmek gerçekte ne kadar sürer?" sorusunu sorar ve yılda bir kez, bir öğleden sonra sürer. Küçüğünü ayda bir yapın. Büyüğünü en az bir kez yapın, çünkü yanıt hiçbir zaman insanların tahmin ettiği gibi çıkmaz.
Küçük tatbikat. Bir dizini ve bir dump'ı geçici bir yola çekin, ardından bunları canlı olanla karşılaştırın:
install -d -m 0700 /mnt/restore
restic restore latest --target /mnt/restore --include /etc/backup
restic restore latest --target /mnt/restore --include /var/backups/db
diff -r /etc/backup /mnt/restore/etc/backup && echo "config identical"
gzip -t /mnt/restore/var/backups/db/postgres.sql.gz && echo "dump readable"
Araç bunu sunuyorsa daha da iyisi: depoyu salt okunur bağlayın ve bir dosya sistemi gibi gezin. Her anlık görüntü tarihli bir dizin olarak görünür ve hiçbir şeyi geri yüklemeden geçmişte ls ve cat ile gezinebilirsiniz. Bağlamayı yapan makinede FUSE gerekir:
restic mount /mnt/snapshots # then: ls /mnt/snapshots/snapshots/latest/
borg mount :: /mnt/snapshots # the Borg equivalent
Büyük tatbikat. Saatlik olarak geçici bir VPS sipariş edin ve hizmeti yalnızca depodan yola çıkarak bu VPS üzerinde yeniden kurun — hafızadan not yok, canlı sunucudan kopyalanmış dosya yok. Yazılı bir runbook'tan ilerleyin ve ilerledikçe runbook'u düzeltin, çünkü bulduğunuz boşluklar bu alıştırmanın tüm amacıdır. Sıklık sırasına göre sık karşılaşılan bulgular: parola yalnızca ölü makinede kalmıştı; DNS kayıtları hiç yazılmamıştı; bind-mount edilmiş bir dizin tüm include yollarının dışında kalmıştı; geri yükleme, artık varsayılan olmayan bir paket sürümüne ihtiyaç duyuyordu; hangi container'ın önce başlaması gerektiğini kimse bilmiyordu.
Süresini ölçün. Sayıyı, tarihle birlikte runbook'un en üstüne yazın. O sayı — deponun boyutu değil, anlık görüntü sayısı değil — servisin gerçekte ne kadar korunduğunun tek dürüst ölçütüdür.
Ve veriyi ara sıra okuyun. Gece kontrolü yapıyı doğrular: indeksin kendisiyle tutarlı olduğunu ve hiçbir blob'un eksik olmadığını. Blob'ları okumaz. Ayda bir kez, ya da pazar çalıştırmasında, bunların bir kısmını okuyun — dönüşümlü bir yüzde beş, hiçbir zaman uzun bir geceye mal olmadan birkaç ay içinde tüm deponun okunmasını sağlar:
restic check --read-data-subset=5%
borg check --verify-data # the Borg equivalent, slower and thorough
Buraya kadar olan her şey kazalara karşı korur. Bu bölüm bir düşmana karşı korur ve tasarım sorunu bir kez görüldüğünde rahatsız edicidir: kaynak makine her gece depoya ulaşmak zorundadır, bu da kaynak makinenin depo için çalışan bir kimlik bilgisi tuttuğu anlamına gelir. Kaynağa sahip olan kişi o kimlik bilgisine de sahiptir. Kimlik bilgisi silebiliyorsa saldırgan da siler — ve modern fidye yazılımı tam olarak bunu, herhangi bir şeyi şifrelemeden önce ve bilerek yapar, çünkü geri yüklenebilen bir kurban ödeme yapmaz.
Çözüm daha iyi bir parola değildir. Bu, asimetrik bir izindir: kaynak veri ekleyebilir ama hiçbirini kaldıramaz. Bunu kurmanın, doğru yapılması en kolaydan en zora doğru sıralanmış üç yolu.
Bir — SSH üzerinden zorunlu append-only. Burası Borg'un kendi sahasıdır ve sahip olduğunuz bir makinede mevcut en temiz yanıttır. Adım 03'teki authorized_keys girdisi borg serve --append-only'yi zorunlu kılar, böylece yakın uç ne isterse istesin uzak uç silme işlemlerini reddeder. Prune yine de gerçekleşmelidir, ama bu, hedef tarafından, kaynağın etkileyemeyeceği bir zamanlamayla ve kaynağın erişemeyeceği bir hesap tarafından yapılır. Kaynakta root yetkisine sahip bir saldırgan depoyu çöple doldurabilir; ama gelmeden önceki geceye ait arşivi silemez.
İki — append-only bir REST uç noktası. restic'in yol arkadaşı rest-server, aynı özelliğe sahip bir --append-only moduna sahiptir: yeni blob'lar kabul edilir, mevcut olanlar kaldırılamaz. Bunu hedefte TLS arkasında çalıştırın, RESTIC_REPOSITORY'yi sftp: yerine https:// URL'sine yönlendirin; savunmanın şekli aynıdır. Hedefte bir servis daha çalıştırmaya mal olur ve aynı güvenceyi satın alır.
Üç — nesne kilidi. S3 uyumlu depolamada, sürümleme artı bir nesne kilidi saklama süresi, süre dolana kadar silmeyi imkansız kılar; bu bir programla değil depolama katmanıyla zorunlu kılınır. Üçünün en güçlüsüdür ve en pahalısıdır, ayrıca bir sağlayıcı hesabı gerektirir — bu da bu kılavuzun bütünüyle dağıtmaya çalıştığı emanet riskini geri getirir. Üçüncü bir kopya olarak mantıklıdır, tek kopya olarak sakıncalıdır.
Bunlardan hiçbiri uymuyorsa — düz SFTP, yazabilen ve dolayısıyla silebilen bir anahtar — bunun tersini varsaymayın; kaynağın hiç dokunamadığı ikinci, bağımsız bir kopya ekleyin. Push yerine pull kullanın: hedefin kaynağa giriş yapmasına, ihtiyaç duyduğunu okumasına ve saklamasına izin verin. Kimlik bilgileri o zaman açığa çıkmamış makinede yaşar ve kaynaktaki bir saldırgan yedeğe işaret eden hiçbir şey bulamaz. Kurulumu biraz daha fazla iş gerektirir ama riski tam da doğru yönde tersine çevirir.
Hangisini seçerseniz seçin, bunu başka herhangi bir güvenlik kontrolünü doğrulayacağınız gibi doğrulayın — kırmaya çalışarak. Kaynaktan, yedekleme anahtarıyla bir silme işlemi deneyin. Doğru sonuç bir reddir.
borg delete ::name-of-an-old-archive
# → Remote: Repository is in append-only mode. Refusing to delete.
Her hizmetin veri de yapılandırma da olmayan küçük bir durum parçası vardır ve onu kaybetmek hizmete zarar vermez — onu, tesadüfen aynı adı taşıyan başka bir hizmetle değiştirir. Eski bağlantılar kırılır, federasyondaki eşler yeni kimliği reddeder, istemciler yeniden anahtarlanır. Bunlar, bu sitenin kılavuzlarının bulunduğu her yığın için geçerli parçalardır.
Veri dizini, config/config.php ve bir veritabanı dump'ı. Dump için bakım modunu açın, sonrasında kapatın — aksi halde Nextcloud ikisine de aynı anda yazar.
Tüm veri dizini: kopyalanmak yerine .backup ile alınan db.sqlite3, artı rsa_key dosyaları, ekler ve gönderiler.
İmzalama anahtarı, homeserver.yaml, medya deposu ve bir PostgreSQL dump'ı. İmzalama anahtarını kaybederseniz federasyon kimliği sonsuza dek gider.
Posta deposunun kendisi, sanal kullanıcı tabloları ve DKIM özel anahtarları — yeni bir DKIM anahtarı, DNS güncellenene kadar her mesajın imzasız kalması anlamına gelir.
Önce N8N_ENCRYPTION_KEY, ardından PostgreSQL dump'ı. Bu anahtar olmadan veritabanı, her kimlik bilgisi okunamaz durumda olan bir iş akışı listesidir.
Gizli servis dizini. Bu birkaç dosya .onion adresidir — onlar olmadan servis farklı bir adla geri döner ve ona giden her bağlantı ölür.
/etc/wireguard'ın tamamı. Küçük, sıradan ve beş dakikalık bir yeniden kurulumla sahip olduğunuz her cihazı yeniden anahtarlamak arasındaki fark.
Seed ve kanal durumu, node'un kendi koşullarında. Eskimiş kanal verisini geri yüklemek size fon kaybettirebilir — genel bir dosya kopyalama değil, uygulamanın kendi yedekleme prosedürünü izleyin.
Çoğu kişiye yedeğin neden başka bir yerde olması gerektiğini sorun, yanıt yangın, sel ya da elektriğini kaybeden bir veri merkezi olur. Hepsi doğrudur, hepsi giderek nadirleşmektedir ve hepsi yüz kilometrelik bir mesafeyle yanıtlanır. 2026'da işletmeleri gerçekten çökerten arızalar idaridir ve tek başına mesafe bunlara hiçbir çözüm getirmez.
Tek bir hesap tek bir hata noktasıdır. Otomatik bir dolandırıcılık sinyali nedeniyle askıya alma, siz uçaktayken gelen bir ters ibraz, bir uyumluluk incelemesi, bir makineye değil şirkete gönderilen bir kaldırma bildirimi — bunların her biri, anlık görüntüleri tutan sunucu da dahil olmak üzere o hesaba bağlı tüm sunuculara aynı anda ulaşır. Teknik yedeklilik kusursuzdu ve tamamen anlamsızdı. Buna yanıt verebilecek tek yapı, iki farklı sağlayıcı ya da en azından iki farklı yasal çatı altında iki farklı hesaptır.
Tek bir yargı bölgesi tek bir yasal çerçevedir. Dört İskandinav kalesi birbirinin yerine geçmez — İsveç, Finlandiya, Norveç ve İzlanda her biri biraz farklı bir şeyi korur ve Norveç ile İzlanda Avrupa Birliği'nin tamamen dışındadır. Çalışan bir makineyi ve deposunu bu ikisine bölmek, kopyanın yalnızca başka bir yerde olması demek değildir; ikinci, bağımsız bir kurallar bütününün altında olması demektir. İskandinav yargı bölgeleri referansı yasaları tek tek ele alır.
Ve hedef hiçbir şey öğrenmez. Bu, ayrımı bir ödünleşim değil ucuz bir seçenek yapan şeydir. Hem restic hem de Borg, kaynaktan herhangi bir şey çıkmadan önce şifreler, dolayısıyla depo sunucusu anahtarına sahip olmadığı blob'ları saklar. Hangi dosyaları tuttuğunu, kaç tane olduğunu ya da nasıl adlandırıldıklarını bilmez. İkinci bir tarafa güven vermiyorsunuz; kendini okuyamayan bir disk kiralıyorsunuz. Bu aynı zamanda "tam olarak güvenmediğim bir sağlayıcıyı yedekleme hedefi olarak kullanmalı mıyım?" sorusunun da dürüst yanıtıdır — şifreli bir depo için güven neredeyse hiç devreye girmez.
Gecikme bir etken değildir. Helsinki'den Reykjavík'e omurgada 30 ms, Helsinki'den Stockholm'e 8 ms, Stockholm'den Oslo'ya 11 ms. Gecelik bir yedekleme bu sayıların hiçbiriyle ilgilenmez, disk verimiyle sınırlı bir geri yükleme de ilgilenmez. Çifti ağ mesafesi için değil, yasal mesafe için seçin — Nordic bölgeler arasındaki ağ mesafesi yuvarlama hatasından ibarettir.
Açıkça söylenmeye değer bir şey daha var, çünkü bu kılavuzun genel bir sistem yöneticisi blogunda değil de bu sitede olmasının nedeni bu: ikinci makine, birincisinin yanıtladığı her soruyu yeniden açar. Çalışan VPS bir kimlik belgesi olmadan sipariş edilip Monero ile ödendiyse ve ardından onun yedekleme makinesi bir şirket kartı ve bir pasaport taramasıyla sipariş edildiyse, çift tam olarak daha zayıf yarı kadar tanımlanabilir olur. Anonim VPS barındırma üzerine sütun kılavuz üç katmanı ele alır — kayıt, ödeme, ağ — ve bunlar bir yedekleme hedefine de tıpkı bir web sunucusuna uyguladığı kadar harfiyen uygulanır.
Depo sağlam, şifreli ve kalıcı olarak okunamaz durumdadır. Parolayı — Borg için ayrıca dışa aktarılan anahtarı — ilk anlık görüntüden önce bir parola yöneticisinde ve kağıt üzerinde saklayın.
Canlı veri dosyaları dump alınmak yerine kopyalandı. Bir ön yedekleme adımında dump yazın ve dump'ı yedekleyin; dahil etme listesini asla çalışan bir motorun veri dizinine yöneltmeyin.
Ele geçirilmiş bir makinedeki yazılabilir bir kimlik bilgisi, saldırgan için de yazılabilir bir kimlik bilgisidir. Hedefte append-only'yi zorunlu kılın ya da ikinci kopyayı push yerine pull ile alın.
prune olmadan forget, anlık görüntüleri işaretler ama hiçbir alan geri kazanmaz. İkisini birlikte çalıştırın, hedefte boş alan bırakın ve asla container imajlarını ya da node_modules'ü yedeklemeyin.
Zamanlayıcı bir yükseltmeden sonra başarısız oldu ve hiçbir şey bunu bildirmedi. Bir OnFailure= birimi ekleyin ve ayda bir kez anlık görüntü listesinin en üstünü kontrol edin — on saniye sürer.
/opt dışında bir bind mount, bir taşıma sırasında yeri değişen bir birim, amaçlanandan fazlasını eşleştiren bir hariç tutma deseni. Her yeni anlık görüntüde bilinen bir yolu listeleyin ve yığında yapılan her değişiklikten sonra dahil etme dosyasını yeniden okuyun.
Bunu kurarken karşınıza çıkan on soru — ve yalnızca sonradan, bir kez karşınıza çıkan iki soru.
Hayır — bu bir geri alma işlemidir ve yararlıdır, ama tam olarak bir yedeğin var olma nedeni olan anlarda işe yaramaz. Bir anlık görüntü, kopyaladığı sunucuyla aynı sağlayıcı hesabının içinde yaşar. Hesap askıya alınırsa, bir ödeme itiraza uğrarsa, bir destek görevlisi yanlışlıkla bir silme işlemi yaparsa ya da bir saldırgan panel kimlik bilgilerinizi ele geçirirse, anlık görüntü de makineyle birlikte gider. Ayrıca size hiçbir ayrıntı sunmaz: dünden silinmiş tek bir dosyayı çekemezsiniz, yalnızca tüm diski geri alıp o zamandan beri olan her şeyi kaybedebilirsiniz. Anlık görüntüleri saklayın — kötü bir yükseltmeyi geri almanın en hızlı yoludur — ama onları, asıl sorunun ulaşamadığı bir yerde var olan bir kopyayla karıştırmayın. Genel kural: ele geçirilmiş tek bir kimlik bilgisi her iki kopyayı da yok edebiliyorsa, tek bir kopyanız var demektir.
İkisi de istemci tarafında şifreler, ikisi de yığın düzeyinde tekilleştirme yapar, ikisi de olgunlaşmıştır ve ikisi de işi görür. Tek bir statik ikili dosya, SFTP, S3 uyumlu nesne depolama, bir REST sunucusu ya da rclone'un ulaşabildiği herhangi bir yerde yaşayabilen bir depo ve hedefte hiçbir şeyin kurulu olmamasını istiyorsanız restic'i seçin. Hedef kontrolünüzdeki bir SSH makinesiyse, nesne kilidi depolaması olmadan mevcut en güçlü append-only zorunluluğunu istiyorsanız ve biraz daha sıkı sıkıştırmasını seviyorsanız Borg'u seçin. Kararı belirleyen pratik farklar şunlardır: Borg'un her iki uçta da borg kurulu olmasını gerektirir ve yalnızca SSH ya da yerel bir yol konuşur; restic'in depoda kısa süreliğine özel bir kilit alan bir prune geçişine ihtiyacı vardır. Karar veremiyorsanız restic kullanın — hedefte daha az hareketli parça olması herhangi bir kıyaslamadan daha değerlidir.
Üzerinde durduğu diskin boyutundan değil, gerçekte yedeklediğiniz verinin boyutundan yola çıkın. Tipik bir self-hosted yığın, birkaç gigabaytlık veritabanı ve yapılandırma artı kullanıcıların yüklediği her ne varsa ondan oluşur. Deduplikasyon ve sıkıştırma bundan sonra işe yarar: on iki aylık bir saklama politikasıyla 20 GB'lık bir çalışma kümesinin günlük anlık görüntüsü genellikle 40 ile 80 GB arasında bir depoyla sonuçlanır, çünkü yalnızca değişen chunk'lar iki kez saklanır. Bir Sentinel ($3.90/ay, 120 GB NVMe) bunu rahatlıkla karşılar. Birkaç sunucu aynı depo sunucusuna yedekleme yaptığında bir Garrison'a (240 GB, $7.90), çalışma kümesinin kendisi yüzlerce gigabayta ulaştığında ise bir Bulwark'a (960 GB, $32.90) geçin. Depo için boyutlandırın, sonra bunu iki katına çıkarın — boş alanı olmayan bir depo prune yapamaz, prune yapamayan bir depo ise yalnızca büyür.
Onları kopyalayabilirsiniz. Ama geri yükleyemeyebilirsiniz. Siz okurken diske yazan bir veritabanı, size birkaç farklı andan oluşan bir dosya kümesi verir; bu da yırtık bir yedeğin tanımıdır — bozuk bir veritabanı olarak geri yüklenir, ya da daha kötüsü, sorunsuz açılan ama sessizce satır eksik olan bir veritabanı olarak. Çözüm bir dump'tır: PostgreSQL için pg_dump ya da pg_dumpall, InnoDB tabloları üzerinde MariaDB ve MySQL için mariadb-dump --single-transaction, SQLite için sqlite3 db .backup out.db ya da VACUUM INTO. Dump'ı bir dosyaya yazın, ardından dosyayı yedekleyin. Veritabanı her gece dump almak için çok büyükse, alternatifler motor kısaca durdurulurken alınan bir dosya sistemi anlık görüntüsü ya da motorun kendi fiziksel yedekleme aracıdır — ama tek bir VPS'in çalıştırdığı herhangi bir şey için dump doğru ve basit olan seçenektir.
Yedekler gitmiştir. Hem restic hem de Borg istemci tarafında şifreler ve ikisinde de bir kurtarma yolu, bir ana anahtar ya da sizin için bir depoyu açacak bir destek talebi yoktur. Amaç zaten budur: hedef sunucu — sizin olmayan bir sunucu da dahil — asla düz metninizi görmez. Bu aynı zamanda parolanın artık koruduğu her şey kadar değerli bir veri parçası olduğu ve yalnızca yedeklenen makinede yaşamaması gerektiği anlamına gelir. Bunu parola yöneticinize koyun ve fiziksel bir kopyasını başka bir yere koyun. Borg için ayrıca borg key export ile depo anahtarını dışa aktarın ve onu da ayrıca saklayın; repokey modunda anahtar deponun içinde yaşar, dolayısıyla artık erişemediğiniz bir depo anahtarı da beraberinde götürür.
Ona ekleyebilen ama kaldıramayan bir kimlik bilgisi verirsiniz. Bu, tüm alıştırmanın en önemli tek tasarım kararıdır, çünkü modern fidye yazılımı önce yedekleme yapılandırmasını arar ve onu kaynağına kadar takip eder. Bunu elde etmenin üç yolu. SSH üzerinden append-only: hedefin authorized_keys dosyasında, borg serve --append-only --restrict-to-path /srv/borg komutunu zorunlu kılın — kaynak yeni arşivler yazabilir ve eskilerini silemez. REST üzerinden append-only: restic'in rest-server'ını --append-only ile çalıştırın ve depoyu HTTPS üzerinden ona yönlendirin. Nesne kilidi: versiyonlama ve bir saklama kilidi olan S3 uyumlu bir bucket. Düz SFTP bunların hiçbirini vermez — bir depoya yazabilen bir anahtar onu silebilir de — dolayısıyla taşıma yönteminiz SFTP ise, bunu hedef tarafından alınan, pull tabanlı ikinci bir kopyayla eşleştirin; burada saldırganın kaynakta ele geçirdiği kimlik bilgileri erişemez.
Soruyu tersinden sorun: ne kadar işi yeniden yapmaya razısınız? Bu sayı sizin kurtarma noktası hedefinizdir ve aralığı belirler. Kendi barındırdığınız hemen her hizmet için — bir posta sunucusu, bir Nextcloud, bir Matrix ana sunucusu, bir iş akışı motoru — geceleri yeterlidir. Veri işlemsel ve yeniden girişi imkansızsa saatlik yedekleme buna değer. Saklama için gerçekle temas ettiğinde ayakta kalan desen --keep-daily 7 --keep-weekly 4 --keep-monthly 12'dir: bir haftalık ayrıntılı geri alma, bir aylık haftalık kontrol noktaları, bir yıllık aylık kontrol noktaları, kabaca 23 anlık görüntü için. Uzun kuyruk beklenenden daha önemlidir, çünkü yakaladığı arıza ölü bir disk değildir — altı hafta boyunca kimsenin fark etmediği bir bozulma ya da silmedir.
Farklı bir bina teknik asgaridir; farklı bir yargı bölgesi ise çoğu kişinin atladığı ve sonra pişman olduğu kısımdır. Bir yangın, bir sel ya da bir rack düzeyinde arıza tek başına mesafeyle yanıtlanır. Mesafenin yanıtlamadığı şey hukuki ya da ticaridir: bir sağlayıcı tarafından askıya alınan bir hesap, bir ödeme itirazı, aynı şirket çatısı altındaki tüm makinelere ulaşan bir kaldırma bildirimi, tek bir şirkete tebliğ edilen bir emir. Her iki kopya da aynı sağlayıcıda yaşıyorsa, tek bir mektup ikisine de ulaşır. Çifti iki Nordic kale arasında bölmek — Helsinki'de çalışan makine, Reykjavík'te depo, omurgada 30 ms arayla — gecikmeye hiçbir maliyeti olmadan ikinci bir yasal çerçeve satın alır. Veri her durumda kaynaktan çıkmadan önce şifrelenir, dolayısıyla hedef onu tutmaktan hiçbir şey öğrenmez.
Şifreleme darboğaz değildir — modern CPU'lar AES'i bir gigabit bağlantının taşıyabileceğinden daha hızlı işler ve her iki araç da mevcut olduğunda donanım hızlandırmasını kullanır. Darboğaz ilk yüklemedir, çünkü her şey yenidir: 1 Gbps'lik bir yukarı bağlantıda 20 GB'lık bir çalışma kümesi hat hızında birkaç dakika sürer, hedef kısıtlanmışsa ya da dosyalar çok sayıda ve küçükse bu süre daha da uzar. Sonraki her çalıştırma yalnızca değişen yığınları aktarır; tipik bir yığın için bu birkaç on megabayttır ve bir dakikadan kısa sürede biter. İlk çalıştırma bir üretim iş yüküyle rekabet ediyorsa hız sınırlaması uygulayın — restic KiB/s cinsinden --limit-upload alır, Borg --upload-ratelimit alır — ve bunu nice ile ionice altında çalıştırın.
Evet, ve nedeni paranoya değildir — yaygın arızaların sessiz olmasıdır. Bir paket yükseltmesinden sonra tetiklenmeyi bırakan zamanlayıcı. Uploads dizinini sessizce yutan exclude deseni. Yedeklemenin hiç kapsamadığı bir yola yazılan veritabanı dump'ı. Kimsenin okumadığı bir günlüğe haftalarca bütünlük kontrolünü başarısız yazan depo. Bunların hiçbiri kendini duyurmaz; hepsi bir dosyayı geri yükleyip ona bakarak doksan saniyede bulunur. Ayda bir küçük bir geri yükleme yapın — bir veritabanı dump'ını ve bir veri dizinini geçici bir yola çekip diff'leyin — ve yılda bir kez, taze bir VPS üzerinde, süresi ölçülerek tam bir yeniden kurulum yapın. O yeniden kurulumdan çıkan sayı gerçek kurtarma sürenizdir ve nadiren tahmin edeceğiniz sayıdır.
Sentinel — Helsinki, Stockholm, Oslo veya Reykjavík'te, ayda $3.90 karşılığında 120 GB NVMe. Ölçümsüz bant genişliği, yani geri yükleme hiçbir şeye mal olmaz. Kayıt sırasında e-posta yok, kimlik belgesi yok ve tuttuğu verinin tek bir baytını bile okuyamayan bir hedef.
Son inceleme · 2026-08-24 · Kaynaklar · restic ve BorgBackup belgeleri, PostgreSQL ve MariaDB yedekleme kılavuzları, sshd authorized_keys(5), systemd.timer(5) · Kadans · yıllık
This guide is one spoke of a larger series. The pillar walks the three privacy layers end to end — the sibling spokes below dive into the specifics.
Three independent layers — signup, payment, network — explained, legal context included, common mistakes flagged.
SSH keys, ufw, fail2ban, kernel knobs, unattended-upgrades.
Deploy your own MCP server on a no-KYC VPS — TLS, streamable HTTP, OAuth.
Host an MCP server with no ID — the privacy stack, crypto-paid.
Ajanı dizüstü bilgisayarınızdan taşıyın — boyutlandırma, systemd, gizli bilgiler, harcama tavanları.