System backup (Italiano)
Da Wikipedia:
Con backup, nella sicurezza informatica, si indica un processo di disaster recovery ovvero, in particolare, la messa in sicurezza delle informazioni di un sistema informatico attraverso la creazione di ridondanza delle informazioni stesse (una o più copie di riserva dei dati), da utilizzare come recupero (ripristino) dei dati stessi in caso di eventi malevoli accidentali o intenzionali o semplice manutenzione del sistema.
Un metodo comune e generalmente efficace è quello di seguire la strategia 3-2-1:
- mantenere tre copie dei propri dati;
- usare due differenti tipi di supporto di memorizzazione;
- conservare una copia fuori sede.
Usare gli snapshot Btrfs
Si veda Btrfs#Snapshot, #Snapshot e partizione /boot e Snapper.
Usare gli snapshot LVM
Si veda LVM#Snapshot, Create root filesystem snapshots with LVM e #Snapshot e partizione /boot.
Usare rsync
Si veda rsync#Come strumento di backup.
Usare tar
Si veda Backup completo del sistema con tar.
Usare SquashFS
Si veda Backup completo del sistema con SquashFS.
Backup avviabile
Avere un backup avviabile può essere utile nel caso in cui il file system si corrompa o se un aggiornamento compromette il sistema. Il backup può anche essere utilizzato come ambiente di prova per gli aggiornamenti, abilitando ad esempio il repository testing, ecc. Se il sistema è stato trasferito su una partizione o un disco differente e si desideri avviarlo, il processo è semplice: basta aggiornare il file /etc/fstab del backup e il file di configurazione del boot loader.
Questa sezione presuppone che sia stato eseguito il backup del sistema su un altro disco o partizione, che l'attuale boot loader funzioni correttamente e che si desideri poter avviare anche il backup.
Aggiornare l'fstab
Senza riavviare, modificare il file fstab del backup commentando o rimuovendo ogni voce esistente. Aggiungere una voce per la partizione che contiene il backup come nell'esempio seguente:
/dev/sdaX / ext4 defaults 0 1
Ricordarsi di utilizzare il nome del dispositivo e il tipo di file system corretti.
Aggiornamento del file di configurazione del boot loader
Per Syslinux è sufficiente duplicare la voce corrente, modificando il puntatore affinché faccia riferimento a un disco o a una partizione differente.
syslinux.cfg, è possibile editare temporaneamente il menu durante l'avvio. Quando appare il menu, premendo il tasto Tab si possono cambiare le voci pertinenti. Le partizioni vengono conteggiate a partire da uno, i dischi a partire da zero.Per GRUB si raccomanda di rigenerare automaticamente il file di configurazione principale. Se si desidera installare ex novo tutti i file di GRUB in una posizione diversa da /boot, come ad esempio /mnt/newroot/boot, è necessario utilizzare il flag --boot-directory.
È inoltre necessario verificare la nuova voce di menu in /boot/grub/grub.cfg. Bisogna assicurarsi che l'UUID corrisponda alla nuova partizione, altrimenti il sistema potrebbe ancora avviare quello vecchio. L'UUID di una partizione può essere individuato con lsblk:
$ lsblk -no NAME,UUID /dev/sdXY
dove /dev/sdXY è la partizione desiderata (es. /dev/sdb3). Per elencare gli UUID delle partizioni che GRUB ritiene di poter avviare, si può utilizzare grep:
# grep UUID= /boot/grub/grub.cfg
Primo avvio
Riavviare il computer e selezionare la voce corretta nel boot loader. Questo caricherà il sistema per la prima volta. Tutte le periferiche dovrebbero essere rilevate e le cartelle vuote in / verranno popolate.
Ora è possibile modificare nuovamente /etc/fstab per aggiungere le partizioni e i punti di montaggio precedentemente rimossi.
Snapshot e partizione /boot
Se il file system supporta gli snapshot (ad es. LVM o Btrfs), questi molto probabilmente escluderanno la partizione /boot o la partizione ESP.
È possibile copiare automaticamente la partizione di boot nella partizione di root in occasione di un aggiornamento del kernel tramite un hook di pacman (assicurandosi che il file dell'hook sia di proprietà di root):
/etc/pacman.d/hooks/55-bootbackup_pre.hook
[Trigger] Operation = Upgrade Operation = Install Operation = Remove Type = Path Target = usr/lib/modules/*/vmlinuz [Action] Depends = rsync Description = Backing up pre /boot... When = PreTransaction Exec = /usr/bin/bash -c 'rsync -a --mkpath --delete /boot/ "/.bootbackup/$(date +%Y_%m_%d_%H.%M.%S)_pre"/'
/etc/pacman.d/hooks/95-bootbackup_post.hook
[Trigger] Operation = Upgrade Operation = Install Operation = Remove Type = Path Target = usr/lib/modules/*/vmlinuz [Action] Depends = rsync Description = Backing up post /boot... When = PostTransaction Exec = /usr/bin/bash -c 'rsync -a --mkpath --delete /boot/ "/.bootbackup/$(date +%Y_%m_%d_%H.%M.%S)_post"/'
Automazione
I backup creati solo manualmente sono raramente aggiornati quando se ne presenta la necessità. Pertanto, si consiglia di impostare un processo automatizzato per garantire che le procedure di backup siano eseguite regolarmente. Le soluzioni più comuni sono fornite da systemd/Timers e cron.
Per un backup locale dell'intero sistema che richieda l'accesso in lettura a tutti i file, il timer e il servizio systemd seguenti possono essere utili come modello per i processi di backup automatizzati.
Per utilizzare un'unità timer, abilitarla e avviarla come qualsiasi altra unità.
/etc/systemd/system/backup.timer
[Unit] Description=Timer for backups [Timer] OnCalendar=weekly Persistent=true Unit=backup.service [Install] WantedBy=timers.target
L'esempio seguente è configurato per l'esecuzione con i permessi minimi necessari, impedendo al contempo modifiche da parte degli utenti normali per una maggiore sicurezza.
Si noti che questo esempio bloccherà il processo di spegnimento qualora venisse avviato mentre il backup è in esecuzione. Ciò garantisce che il backup non venga interrotto, ma può causare un ritardo durante lo spegnimento o il riavvio se è necessario salvare molti nuovi file.
/etc/systemd/system/backup.service
[Unit] Description=Backup system [Service] Type=simple User=backupuser AmbientCapabilities=CAP_DAC_READ_SEARCH CapabilityBoundingSet=CAP_DAC_READ_SEARCH DevicePolicy=closed LockPersonality=yes MemoryDenyWriteExecute=yes NoNewPrivileges=yes PrivateDevices=yes PrivateTmp=yes ProtectClock=yes ProtectControlGroups=yes ProtectHome=read-only ProtectHostname=yes ProtectKernelLogs=yes ProtectKernelModules=yes ProtectKernelTunables=yes ProtectProc=invisible ProtectSystem=full RemoveIPC=yes RestrictAddressFamilies=AF_UNIX RestrictNamespaces=yes RestrictRealtime=yes RestrictSUIDSGID=yes SystemCallFilter=@system-service UMask=7007 ExecStart=/usr/local/bin/backup.sh ExecStop=bash -c 'if [ -n "$MAINPID" ]; then tail --pid="$MAINPID" -f /dev/null; fi'
CAP_DAC_READ_SEARCH imposta la capability che consente di bypassare i controlli dei permessi di lettura dei file nel file system; in questo modo, tutti i file nel sistema risulteranno accessibili senza richiedere i permessi di root.
Per i backup remoti, è consentito l'uso di protocolli di rete:
RestrictAddressFamilies=AF_UNIX AF_INET AF_INET6