Table of Contents
GNU/Linux Bare Metal Restore
Appunti vari su come recuperare un host che sia andato completamente perso a partire da un backup, cioè come effettuare un bare metal restore.
Partizionamento del disco
In generale si dovrà avere una macchina nuova con un disco vuoto su cui effettuare il restore. È possibile contestualmente aggiornare una macchina con disco partizionato col metodo obsoleto DOS/MBR e un BIOS legacy ad una installazione con disco partizionato GPT e boot EFI.
Dopo aver avviato la macchina con una distribuzione live moderna (es. GRML 2022), si esegue il partizionamento con parted:
parted /dev/sda
Uno schema standard con partizioni per GRUB, una per le immagini EFI e partizioni separate per rootfs, swap, var e home viene realizzato come segue:
mklabel gpt mkpart primary 1.0MB 10.0MB mkpart primary 10.0MB 100.0MB mkpart primary 100.0MB 60.0GB mkpart primary 60.0GB 68.0GB mkpart primary 68.0GB 200.0GB mkpart primary 200.0GB 100% set 1 bios_grub on set 2 boot on set 2 esp on name 3 rootfs name 4 swap name 5 var name 6 home
La partizione bios_grub deve contenere solo il secondo stadio di GRUB, quindi 1 Mb sarebbe già sufficiente, ma si allocano 10 Mb per consentire a parted
di calcolare un corretto allineamento della partizione. La partizione boot esp contiene invece il codice EFI per i vari sistemi operativi installati (in caso di sistemi multiboot); un solo sistema operativo GNU/Linux Debian 11 richiede un BIOS EFI di circa 6 Mb, ma con i moderni dischi da più di un Gigabyte si consiglia di allocare 100 Mb.
Restore da Borg Backup
Se si utilizza Borg backup per effettuare le copie di sicurezza è necessario eseguire il restore dell'ultima versione disponibile.
Copiare una directory da host remoto
Se i file originali sono contenuti semplicemente in una directory di un host remoto è possibile copiarli, ma si devono avere alcune accortezze. Ad esempio scp non va bene perché segue i link simbolici (cioè copia i file e non ricrea i link).
Se si desidera copiare una directory da un host remoto mantenendo i symlink si può ricorrere ad un trucco che utilizza tar. In questo esempio si esegue ssh dalla macchina vuota verso l'host che contiene i dati, quindi è possibile trasferire con tar una intera cartella:
cd / ssh root@backup.server.org 'cd /home/backups/restore/; tar cf - bin' | tar xvf - --numeric-owner
Vedere come si può usare rsync
MySQL
Si deve creare la data directory, assegnare i permessi opportuni e inizializzarla (testato con MariaDB 10.5 su Debian 11 Bullseye):
mkdir /var/lib/mysql chown mysql.mysql /var/lib/mysql/ chmod 700 /var/lib/mysql/ mysql_install_db systemctl start mysql
Quindi è possibile fare il restore del file creato con mysqldump --all-databases:
zcat /home/backups/mysql/20230205.dump.gz | mysql
PostgreSQL
Se la data directory è completamente vuota bisogna crearla con i permessi giusti:
mkdir -p /var/lib/postgresql/13/main mkdir -p /var/log/postgresql/ chown -R postgres.postgres /var/lib/postgresql/ chown -R postgres.postgres /var/log/postgresql/ chown -R postgres.postgres /etc/postgresql/
Quindi va inizializzata:
su - postgres /usr/lib/postgresql/13/bin/initdb -D /var/lib/postgresql/13/main
A questo punto è possibile avviare il servizio:
systemctl start postgresql@13-main
E fare il restore del file creato con pg_dumpall:
su - postgres psql --file=pg_dumpall_20230206.dump