5.3. Linuxen kopiak¶
1. Sarrera¶
Linux zerbitzarietan, ondo diseinatutako backup estrategia bat funtsezkoa da datuak, konfigurazioak eta zerbitzuak babesteko. Hemen metodo praktikoak, ohiko tresnak eta kopiak programatu eta berreskuratzeko moduak laburbiltzen dira.
2. Zer babestu behar da Linuxen¶
- Sistemaren konfigurazioa:
/etc,/var/spool/cron, zuk sortutako systemd unitateak. - Aplikazioen eta zerbitzuen datuak:
/var/www,/srv, aplikazioen direktorioak. - Erabiltzaileen datuak:
/homeedo pertsonalizatutako bideak. - Datu-baseak: MySQL/MariaDB, PostgreSQL, etab. (kopia logikoak edo fisikoak modu koordinatuan).
- Log kritikoak beharrezkoak badira:
/var/log(atxikipena eta bolumena kontuan hartuta).
Ez kopiatu zuzeneko pseudo-sistemak: /proc, /sys, /dev, /run, /tmp (salbu behar bezala dakizunean).
3. Metodoak eta tresnak¶
| Tresna | Mota | Erabilera tipikoa | Abantailak | Desabantailak |
|---|---|---|---|---|
rsync |
Formaturik gabe | Direktorio zuhaitzak sinkronizatu lokal/urrun | Azkarra, fitxategi-inkrementala, iragazkiak | Ez dago katalogo/bertsio natiborik |
tar |
Artxiboa | Multzoak paketatu eta konprimitu | Estandarra, berreskuratze erraza | Inkremental konplexuak, artxibo handiak |
| BorgBackup | Errepositorio deduplikatua | Bertsiodun kopiak zifratuak | Deduplikazioa, konpresioa, zifratzea | Errepo eta tresna behar ditu |
| Restic | Errepositorio deduplikatua | Bertsiodun kopiak zifratuak | Erraza, backend anitz | Errepo eta tresna behar ditu |
| LVM snapshots + rsync/tar | Bolumen snapshot | Datu koherenteak "hot" kopiatzea | Bloke mailako koherentzia | LVM eta snapshot kudeaketa behar |
| DB kopiak (mysqldump/pg_dump) | Logikoak | Datu-baseak esportatu | Sinpleak, eramangarriak | Denbora/espazioa tamainaren arabera |
Oharrak: - Ekoizpenean, erabili snapshot-ak (LVM/btrfs/ZFS) edo I/O gelditzeak koherentzia lortzeko. - Datu handietarako/aldaketa maizetarako, baloratu Borg/Restic deduplikazioagatik eta atxikipen eraginkorragatik.
rsync eta tarren erabilera oinarrizkoa¶
- rsync (direktorioak disko/NAS batera sinkronizatzeko):
bash rsync -aHAX --delete /etc /home /var/www /mnt/backup/host1/Adibide honetako parametro nagusiak, modu sinplean: -a→ kopia errekurtsiboa egiten du eta baimenak, jabeak eta datak mantentzen ditu.-HAX→ esteka gogorrak, ACLak eta atributu hedatuek gordetzen ditu (zerbitzarietan lagungarria).--delete→ jatorrian ez dauden fitxategiak helburu-kopiatik ezabatzen ditu./etc /home /var/www→ kopiatuko diren direktorioak./mnt/backup/host1/→ backuparen helburua (disko, USB, NAS, NFS…).
rsync-en aukerei buruz gehiago: https://man7.org/linux/man-pages/man1/rsync.1.html
- tar (backup paketatua eta konprimatua):
bash sudo tar -czpf /mnt/backup/host1/system-$(date +%F).tar.gz \ --exclude=/proc --exclude=/sys --exclude=/dev --exclude=/run --exclude=/tmp /Parametro nagusien azalpen laburra: sudo→ sistema osoa irakurtzeko sarbidea ematen du.-c→ tar artxibo berria sortzen du.-z→ gzip bidez konprimatzen du.-p→ jatorrizko baimenak mantentzen ditu.-f /mnt/backup/host1/system-$(date +%F).tar.gz→ kopiaren fitxategiaren bidea eta izena.--exclude=...→ kopiatu nahi ez diren pseudo-sistemak kanpo uzten ditu./→ fitxategi-sistema osoa paketatzen du (salbuespenak kenduta).
tar-ri buruzko informazio gehiago: https://man7.org/linux/man-pages/man1/tar.1.html
4. Backup estrategiak¶
- Osoa: kopia osoa aldizka (adib. astero).
- rsync data bidez indexatutako karpetara:
bash rsync -aHAX --delete /etc /home /var/www /mnt/backup/host1/$(date +%F)/ - tar osoa konprimatua:
bash sudo tar -czpf /mnt/backup/host1/full-$(date +%F).tar.gz \ --exclude=/proc --exclude=/sys --exclude=/dev --exclude=/run --exclude=/tmp / - Borg/Restic (puntuak osoak dira, deduplikazioarekin):
bash borg create $BORG_REPO::"{hostname}-{now:%F_%H-%M}" /etc /home /var/www # edo restic backup /etc /home /var/www - Inkrementala: azken backupetik egindako aldaketak.
- rsync
--link-desterabiliz bertsio-eraginkortasunerako:bash BASE=/mnt/backup/host1 PREV=$BASE/latest CURR=$BASE/$(date +%F) mkdir -p "$CURR" rsync -aHAX --delete --link-dest="$PREV" /etc /home /var/www "$CURR/" ln -sfn "$(basename "$CURR")" "$BASE/latest" - tar inkrementala zerrenda fitxatearekin:
bash LIST=/mnt/backup/tar.snar sudo tar --listed-incremental="$LIST" -czpf /mnt/backup/incr-$(date +%F).tar.gz \ --exclude=/proc --exclude=/sys --exclude=/dev --exclude=/run --exclude=/tmp / - Borg/Restic: deduplikazioak inkrementalak automatikoki kudeatzen ditu:
bash borg create --stats $BORG_REPO::"{hostname}-{now:%F_%H-%M}" /etc /home /var/www restic backup /etc /home /var/www - Diferentziala: azken osoarekiko aldaketak.
- tar diferentziala (zerrenda berrabiarazi osoa egin ondoren soilik):
bash # Osoa (egoera berrezarri) LIST=/mnt/backup/tar.snar : > "$LIST" && sudo tar --listed-incremental="$LIST" -czpf /mnt/backup/full-$(date +%F).tar.gz / # Ondorengo diferentziala (EZ hutsik utzi LIST) sudo tar --listed-incremental="$LIST" -czpf /mnt/backup/diff-$(date +%F).tar.gz / - Borg/Restic-ek ez dute diferentzial klasikorik; efektua atxikipen politikekin eta azken puntu osoa erabiliz lor daiteke:
bash restic forget --keep-daily 7 --keep-weekly 4 --prune borg prune --keep-daily=7 --keep-weekly=4 --keep-monthly=6 "$BORG_REPO"
Ohiko eredua: astean behin osoa + egunero inkrementalak + 4-6 asteko atxikipena.
5. Helburu ohikoak¶
- Kopietarako dedikatutako disko lokala (ez datu kritikoen bolumen bera).
- NAS/NFS/SMB beste makina/host batean.
- Urruneko zerbitzaria SSH bidez.
- Hodeiko biltegiratzea (Restic/Borg backend urrunekin, rclone, etab.).
3-2-1 araua: 3 kopia, 2 euskarri desberdin, 1 offsite.
6. Backupen programazioa¶
6.1. cron (klasikoa)¶
Root edo zerbitzu-erabiltzaile baten crontab editatu:
sudo crontab -e
Adibidea: rsync eguneroko 21:00etan, logarekin:
0 21 * * * /usr/local/sbin/backup_rsync.sh >> /var/log/backup_rsync.log 2>&1
Beste cron adibideak:
# Borg: egunero 21:15 (BORG_* aldagaiak script-ean)
15 21 * * * /usr/local/sbin/backup_borg.sh >> /var/log/backup_borg.log 2>&1
# Restic: egunero 21:30 ingurune fitxategiarekin
30 21 * * * RESTIC_PASSWORD=**** RESTIC_REPOSITORY=/mnt/backup/restic/host1 \
/usr/local/sbin/backup_restic.sh >> /var/log/backup_restic.log 2>&1
# MySQL dump: egunero 02:30
30 2 * * * mysqldump --single-transaction --routines --events --all-databases \
| gzip > /mnt/backup/db/mysql-$(date +\%F).sql.gz
6.2. systemd timer-ak¶
Zerbitzu unitatea: /etc/systemd/system/backup-rsync.service
[Unit]
Description=Backup rsync egunerokoa
[Service]
Type=oneshot
ExecStart=/usr/local/sbin/backup_rsync.sh
Timerra: /etc/systemd/system/backup-rsync.timer
[Unit]
Description=Backup rsync eguneroko programazioa
[Timer]
OnCalendar=*-*-* 21:00:00
Persistent=true
[Install]
WantedBy=timers.target
Aktibatu:
sudo systemctl daemon-reload
sudo systemctl enable --now backup-rsync.timer
Alternatibak Borg eta Restic-ekin systemd bidez:
Zerbitzua Borg-entzat /etc/systemd/system/backup-borg.service:
[Unit]
Description=Backup Borg egunerokoa
After=network-online.target
Wants=network-online.target
[Service]
Type=oneshot
EnvironmentFile=/etc/borg/backup.env
ExecStart=/usr/local/sbin/backup_borg.sh
Timerra Borg-entzat /etc/systemd/system/backup-borg.timer:
[Unit]
Description=Backup Borg eguneroko programazioa
[Timer]
OnCalendar=*-*-* 21:15:00
RandomizedDelaySec=15m
Persistent=true
[Install]
WantedBy=timers.target
Zerbitzua Restic-entzat /etc/systemd/system/backup-restic.service:
[Unit]
Description=Backup Restic egunerokoa
After=network-online.target
Wants=network-online.target
[Service]
Type=oneshot
EnvironmentFile=/etc/restic/backup.env
ExecStart=/usr/local/sbin/backup_restic.sh
Timerra Restic-entzat /etc/systemd/system/backup-restic.timer:
[Unit]
Description=Backup Restic eguneroko programazioa
[Timer]
OnCalendar=*-*-* 21:30:00
RandomizedDelaySec=15m
Persistent=true
[Install]
WantedBy=timers.target
7. Adibide praktikoak¶
7.1. rsync disko/NASera¶
Script adibidea /usr/local/sbin/backup_rsync.sh:
#!/usr/bin/env bash
set -euo pipefail
SRCs=(/etc /home /var/www)
DEST=/mnt/backup/host1
DATE=$(date +%F)
mkdir -p "$DEST/$DATE"
rsync -aHAX --delete --numeric-ids \
--exclude={'/home/*/.cache','/var/www/cache','/var/log/*','/proc','/sys','/dev','/run','/tmp'} \
"${SRCs[@]}" "$DEST/$DATE/"
# Azken backuperako esteka eguneratu
ln -sfn "$DATE" "$DEST/latest"
NFS/Samba muntaketa egin behar bada, egin rsync baino lehen.
7.2. tar konprimatua salbuespenekin¶
sudo tar --exclude=/proc --exclude=/sys --exclude=/dev --exclude=/run --exclude=/tmp \
-czpf /mnt/backup/host1/system-$(date +%F).tar.gz /
7.3. BorgBackup¶
Errepositorioa hasieratu:
export BORG_REPO=/mnt/backup/borg/host1
export BORG_PASSPHRASE='aldatu-hau'
borg init --encryption=repokey "$BORG_REPO"
Backup sortu:
borg create --stats --progress \
"$BORG_REPO"::"{hostname}-{now:%Y-%m-%d_%H-%M}" \
/etc /home /var/www \
--exclude /home/*/.cache --exclude /var/log --exclude /proc --exclude /sys --exclude /dev --exclude /run --exclude /tmp
Atxikipen/garbiketa politika:
borg prune -v --list "$BORG_REPO" \
--keep-daily=7 --keep-weekly=4 --keep-monthly=6
7.4. Restic¶
export RESTIC_REPOSITORY=/mnt/backup/restic/host1
export RESTIC_PASSWORD='aldatu-hau'
restic init
restic backup /etc /home /var/www --exclude='**/.cache' --exclude=/var/log
restic forget --keep-daily 7 --keep-weekly 4 --keep-monthly 6 --prune
Backend-ak: RESTIC_REPOSITORY izan daiteke sftp:user@host:/ruta, rclone:remote:path, S3, etab.
7.5. Datu-baseen kopiak¶
- MySQL/MariaDB (logikoa):
bash
mysqldump --single-transaction --routines --events --all-databases | \
gzip > /mnt/backup/db/mysql-$(date +%F).sql.gz
- PostgreSQL (logikoa):
bash
sudo -u postgres pg_dumpall | gzip > /mnt/backup/db/pg-$(date +%F).sql.gz
Kopia fisiko koherenteetarako, erabili pg_basebackup (PostgreSQL) edo gelditu/erreplikatu MySQL-en, edo LVM snapshot-ak.
7.6. LVM snapshot + rsync¶
VG=vgdata LV=data SNAP=snap_$(date +%F) SIZE=10G
lvcreate -L $SIZE -s -n $SNAP /dev/$VG/$LV
mkdir -p /mnt/$SNAP
mount /dev/$VG/$SNAP /mnt/$SNAP
rsync -aHAX /mnt/$SNAP/ /mnt/backup/lvm/$LV-$(date +%F)/
umount /mnt/$SNAP
lvremove -y /dev/$VG/$SNAP
8. Berreskurapena¶
-
rsync: kopiaren iturburutik helburura sinkronizatu.
bash rsync -aHAX /mnt/backup/host1/2025-01-10/ /restore/ -
tar: atera baimenak errespetatuz.
bash sudo tar -xzpf system-2025-01-10.tar.gz -C / -
Borg:
bash borg list "$BORG_REPO" borg extract "$BORG_REPO"::host-2025-01-10_21-00 /etc /home -
Restic:
bash restic snapshots restic restore latest --target /restore -
Datu-baseak:
bash # MySQL zcat mysql-2025-01-10.sql.gz | mysql -u root -p # PostgreSQL zcat pg-2025-01-10.sql.gz | sudo -u postgres psql
9. Praktika onak¶
- RPO/RTO definitu eta maiztasuna/atxikipena lerrokatu.
- Zifratzea erabili bidalketan eta atsedenaldian (Borg/Restic, ssh, bolumen zifratua).
- Kopiak egiaztatu: logak,
borg check,restic check, checksumak. - Berreskurapen probak egin aldizka (ez bakarrik kopiak sortu).
- Baimenak bereizi: backup-erako erabiltzaile/gako espezifikoak, gakoak seguru.
- Egoerak/alertak monitorizatu (cron/systemd+mail, Prometheus, etab.).
- Gutxienez kopia bat offsite/hodeian mantendu eta DR probak egin.