====== 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. **[[https://grml.org/|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. 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**. ===== Restore da Borg Backup ===== Se si utilizza **Borg backup** per effettuare le copie di sicurezza è necessario eseguire il restore dell'ultima versione disponibile. FIXME ===== 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** FIXME ===== 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