User Tools

Site Tools


doc:appunti:linux:sa:restore_bare_metal

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.

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
doc/appunti/linux/sa/restore_bare_metal.txt · Last modified: 2024/09/27 07:25 by niccolo