rsync snapshot -varmuuskopiointi käytännössä: --link-dest, retention ja sudenkuopat

Posted on Jan 7, 2026

Miksi rsync snapshotteihin?

Moni ajattelee varmuuskopiointia kahdella tavalla:

  • joko kopioidaan kaikki aina uudestaan
  • tai luotetaan johonkin mustaan laatikkoon

rsync tarjoaa kolmannen vaihtoehdon: yksinkertaisen, läpinäkyvän ja tehokkaan snapshot-mallin, joka ei vaadi erikoistyökaluja.


Perusidea lyhyesti

Snapshot-mallissa:

  • jokainen varmuuskopiointi näyttää täydeltä kopiolta
  • todellisuudessa vain muuttuneet tiedostot vievät tilaa
  • muuttumattomat tiedostot ovat kovia linkkejä

Tämä saavutetaan --link-dest-valitsimella.


Hakemistorakenne

Yksi kone, yksi rakenne:

backups/
└── host1/
    ├── 2026-01-05/
    ├── 2026-01-06/
    └── latest -> 2026-01-06/

jokainen päivä on oma snapshot

  • latest osoittaa viimeisimpään
  • palautus on aina helppoa

Ensimmäinen ajo (täysi kopio)

Kun aiempaa snapshotia ei ole:

rsync -a --delete \
  /source/ \ /backups/host1/2026-01-06

Tämä kopioi kaiken normaalisti.

Kun edellinen snapshot on olemassa:

rsync -a --delete \
  --link-dest=/backups/host1/latest \ /source/ \ /backups/host1/2026-01-07/

Mitä tapahtuu:

  • muuttuneet tiedostot kopioidaan
  • muuttumattomat linkitetään
  • levytila säästyy
  • jokainen snapshot on silti itsenäinen

Miksi –delete on tärkeä

Ilman –delete-valitsinta:

  • poistetut tiedostot jäävät kummittelemaan
  • snapshot ei vastaa todellista tilannetta

–delete varmistaa, että snapshot vastaa lähdejärjestelmän tilaa kyseisenä päivänä.

Excludet – kriittinen osa

Kaikkea ei pidä varmuuskopioida.

Tyypilliset poissuljettavat:

--exclude='.cache/**' \
--exclude='/proc/**' \
--exclude='/sys/**' \
--exclude='/dev/**' \
--exclude='/run/**' \
--exclude='/tmp/**'

Erityisesti:

  • .cache → turhaa, muuttuu jatkuvasti
  • virtuaaliset fs:t → eivät kuulu backupiin

Excludes.txt – siistimpi ratkaisu

Pitkät exclude-listat kannattaa siirtää tiedostoon:

.cache/**
/proc/**
/sys/**
/dev/**
/run/**
/tmp/**

ja käyttää

rsync -a --delete \
  --link-dest=... \
  --exclude-from=excludes.txt \
  /source/ /dest/

Tämä tekee skriptistä luettavan ja huollettavan.

Retention – vanhojen snapshotien siivous

Snapshotit eivät ole ikuisia.

Yksinkertainen retention:

find /backups/host1 \
  -maxdepth 1 \
  -type d \
  -name "20*" \
  -mtime +30 \
  -exec rm -rf {} \;

Tämä:

  • säilyttää 30 päivää
  • ei koske latest-symlinkkiin
  • on helppo ymmärtää

Palautus on koko idean ydin

Yksittäinen tiedosto:

cp /backups/host1/latest/etc/config.conf /etc/config.conf

Koko järjestelmä:

rsync -a /backups/host1/latest/ /

Ei restore-ohjelmia. Ei formaatteja. Ei tulkintaa.

Yleiset sudenkuopat

1️⃣ Unohdetaan –link-dest

→ kaikki vie täyden tilan

2️⃣ Snapshotit sekoitetaan

→ pidä aina yksi kone = yksi hakemisto

3️⃣ Backup-levy ei ole mountattu

→ backup menee väärään paikkaan

Ratkaisu:

  • tarkista mountpoint
  • keskeytä ajo jos ei ole kiinni

Milloin rsync EI riitä

rsync ei ole

  • block-level snapshot
  • image backup
  • ransomware-suoja

Siksi hyvä malli on:

  • rsync snapshotit päivittäin
  • full image backup harvemmin (esim. kuukausittain)

Yhteenveto

rsync snapshot-malli toimii, koska se on:

  • yksinkertainen
  • läpinäkyvä
  • nopea
  • helposti palautettava

Jos ymmärrät:

  • –link-dest
  • hyvän hakemistorakenteen
  • järkevän retentionin

…sinulla on varmuuskopiointi, johon voi oikeasti luottaa.

Ja mikä parasta:

et tarvitse mitään muuta kuin rsyncin.