chroot: guida al comando che permette di recuperare un sistema Linux in panne

Il comando chroot in Linux è uno strumento potente per il recupero di sistemi non avviabili. Gli amministratori possono ripristinare configurazioni danneggiate, correggere pacchetti corrotti e rigenerare file di avvio, senza dover reinstallare il sistema.

Il comando chroot, abbreviazione di “change root”, è utilizzato su GNU/Linux per cambiare la cartella radice (root directory) per un processo e per i suoi processi figli. Permette di creare un ambiente a sé in cui un programma o un utente possono operare, con una struttura di directory distinta da quella del sistema principale. Quando si esegue il comando chroot, si specifica una nuova directory che diventa la radice (“/”) per il processo avviato all’interno di quella directory. Da quel momento in poi, il processo e tutti i suoi figli vedranno quella directory come se fosse la radice del sistema, senza poter accedere alle directory al di fuori di essa, salvo che non siano esplicitamente montate. In questo articolo vediamo come chroot sia una sorta di “coltellino svizzero” per recuperare sistemi Linux che, per varie ragioni, non si avviano più.

L’uso di chroot per la manutenzione e il ripristino dei sistemi Linux

Quando ci si trova dinanzi a un sistema Linux che rifiuta di avviarsi, è facile cadere nella tentazione di reinstallare tutto da zero. Esiste tuttavia una tecnica potente, ma spesso sottovalutata, che può riportare in vita il sistema senza perdere configurazioni o dati: essa fa appunto leva sul comando chroot.

La capacità di chroot, che permette di eseguire comandi in un ambiente “di appoggio” con un file system alternativo, risulta davvero eccellente per il recupero dei sistemi che non si avviano correttamente. Si può ad esempio accedere a un sistema Linux danneggiato montato da una distribuzione live in esecuzione su una chiavetta USB o da un altro computer per poi effettuare aggiornamenti, correzioni sui pacchetti corrotti e rigenerare file di avvio critici.

Quando utilizzare chroot

È possibile guardare all’utilizzo di chroot in molteplici scenari:

  • Sistema che non si avvia dopo un aggiornamento fallito.
  • File di configurazione critici danneggiati.
  • Bootloader corrotto.
  • Recupero di password root perse.

In termini di requisiti, è necessario disporre di un ambiente Linux funzionante, ad esempio una live USB (Ubuntu, Linux Mint,…) e dell’accesso root a tale ambiente, in maniera tale da poter impartire comandi sudo. Come secondo passo, è ovviamente indispensabile identificare le partizioni del sistema danneggiato.

Come recuperare un sistema Linux che non si avvia più

Per cominciare, è necessario avviare il sistema da una chiavetta USB contenente una distribuzione Linux live, così come spiegato in precedenza. In alternativa, è possibile collegare l’unità con il sistema Linux danneggiato a un altro computer funzionante che esegue “il pinguino”.

Avvalendosi dei comandi lsblk, fdisk -l o gparted si può andare alla ricerca delle partizioni del sistema non avviabile, contenute nel percorso /dev. In particolare, si devono cercare la directory root e la cartella /boot.

Supponiamo, per esempio, che /dev/DEVICE1 monti la partizione principale (root) e che /dev/DEVICE2 monti la partizione /boot.

Con i comandi che seguono creiamo dapprima le directory di appoggio per effettuare il recupero del sistema Linux:

sudo mkdir -p /mnt/rescue
sudo mkdir -p /mnt/rescue/boot

Montiamo quindi le partizioni del sistema che manifesta problemi attestandole sui percorsi appena creati:

sudo mount /dev/DEVICE1 /mnt/rescue
sudo mount /dev/DEVICE2 /mnt/rescue/boot

Montaggio dei file system virtuali

I comandi di seguito consentono di montare vari file system necessari per il corretto funzionamento di un sistema operativo Linux, nel contesto di ripristino o di recupero.

Si comincia col montare il file system proc (che contiene informazioni sui processi in esecuzione e altre informazioni di sistema) dalla posizione /proc nella nuova directory /mnt/rescue/proc. In questo modo chroot potrà avere visibilità sulle informazioni relative ai processi del sistema originale.

Si prosegue montando il file system sysfs, che fornisce informazioni sul kernel e sui dispositivi hardware; la directory /dev, dove sono situati i file dei dispositivi hardware; il file system devpts, che gestisce i terminali virtuali, come quelli utilizzati per le sessioni di login.

sudo mount -t proc /proc /mnt/rescue/proc
sudo mount -t sysfs /sys /mnt/rescue/sys
sudo mount --bind /dev /mnt/rescue/dev
sudo mount -t devpts devpts /mnt/rescue/dev/pts

Accesso al sistema con chroot

Adesso, digitando il comando seguente, diventa possibile gestire il sistema Linux danneggiato, operando dall’istanza live in esecuzione. Si possono quindi impartire tutti i comandi come se il sistema fosse realmente avviato dall’installazione originale:

sudo chroot /mnt/rescue /bin/bash

Casi d’uso e comandi utili

In un ambiente GNU/Linux, spno disponibili molteplici comandi utili per risolvere problemi comuni legati a broken packages, alla rigenerazione di initramfs o alla reinstallazione del bootloader GRUB. Giusto per fare qualche esempio.

Per gestire il caso dei broken packages o di aggiornamenti incompleti, sui sistemi Debian/Ubuntu si possono eseguire i seguenti comandi:

apt update per aggiornare l’elenco dei pacchetti, seguito da apt upgrade per installare gli aggiornamenti disponibili. Se ci sono broken packages, dpkg --configure -a può essere utilizzato per sistemare i pacchetti non configurati correttamente, mentre apt --fix-broken install risolve automaticamente le dipendenze mancanti o i pacchetti “rotti”.

Nel caso di un sistema che non si avvia correttamente, potrebbe essere necessario rigenerare initramfs utilizzando il comando update-initramfs -u -k all, che aggiorna il file di inizializzazione per tutti i kernel disponibili. initramfs (Initial RAM File System) è un file system temporaneo caricato in memoria all’avvio del sistema operativo Linux. Contiene i file necessari per avviare il sistema, come i driver di base e gli script di inizializzazione, prima che sia montato il vero e proprio file system del sistema operativo.

Infine, se il sistema ha problemi con il bootloader, è possibile reinstallare GRUB con il comando grub-install /dev/DEVICE, seguito da update-grub per aggiornare la configurazione del bootloader. Al posto di DEVICE bisogna assicurarsi di specificare il nome dell’unità di avvio principale.

Per approfondire l’argomento, date un’occhiata al post di Samuel Lampa e a questo articolo di TurnKey.

Ti consigliamo anche

Link copiato negli appunti