Appunti vari su come recuperare un host che sia andato completamente perso a partire da un backup, cioè come effettuare un bare metal restore.
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.
Se si utilizza Borg backup per effettuare le copie di sicurezza è necessario eseguire il restore dell'ultima versione disponibile.
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
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
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