Recovery di un sistema Debian attraverso chroot

Da Guide@Debianizzati.Org.
Versione del 14 nov 2015 alle 10:13 di HAL 9000 (discussione | contributi)
(diff) ← Versione meno recente | Versione attuale (diff) | Versione più recente → (diff)
Vai alla navigazione Vai alla ricerca
Debian-swirl.png Versioni Compatibili

Tutte le versioni supportate di Debian

Introduzione

Durante la lunga vita di una Debian box può capitare a volte di trovarsi nell'impossibilità di avviare correttamente il sistema. Infatti una errata modifica a un file di vitale importanza o un bug in qualche pacchetto fondamentale per il corretto funzionamento del sistema possono portare al completo fallimento dell'avvio della macchina.

Ci si ritrova pertanto nella condizione di non avere a disposizione alcuno strumento utile per interfacciarsi col sistema e tentare di risolvere i problemi occorsi; nessuno strumento grafico e nessuna shell disponibile: che fare?
In questi momenti in cui tutto sembra perduto, arriva in soccorso la nostra ultima ancora di salvezza: chroot

Per utilizzare chroot abbiamo bisogno innanzitutto di una shell funzionante che, data l'impossibilità di avviare il sistema, dovremo ottenere in qualche altro modo.
I modi per avviare una shell possono essere vari:

  • Da una installazione funzionante presente su altra partizione o altro disco della macchina;
  • Da una distribuzione live;
  • Da una qualsiasi immagine d'installazione di Debian;

In questa guida si è scelto di utilizzare una immagine .iso di Debian, in particolare la "mini.iso" della netboot che consente, scaricando pochi megabyte, di avere a disposizione la famosa shell di cui abbiamo bisogno.
Ovviamente gli altri due metodi sono altrettanto validi se si ha a disposizione un'altra distribuzione accessibile sul sistema o se si vuole avere a disposizione un intero ambiente grafico in cui muoversi con più agio. Per entrambi i metodi i comandi da impartire, da terminale o da emulatore di terminale, sono quelli descritti nel paragrafo Accesso tramite chroot
È inutile però precisare che gli orpelli grafici sono in questo caso del tutto superflui in quanto l'unica cosa di cui si ha bisogno è una shell funzionante.

Ottenere una shell

Per evitare possibili problemi, è necessario innanzitutto scaricare l'immagine per la stessa architettura (amd64, i386, etc.) del sistema a cui vogliamo accedere; quindi avviare il sistema da CD/DVD o da pendrive su cui ci si è premuniti di inserire la .iso d'installazione Debian.

  1. Scegliere all'avvio "Advanced options -> Rescue mode"
  2. Proseguire normalmente scegliendo la localizzazione (utile per il layout della tastiera italiana), il mirror dei pacchetti e settando la configurazione di rete (anche questa utile se si ha bisogno di una connessione funzionante).
  3. Nel momento in cui appare la schermata "Avviare il modo ripristino", arrestarsi e premere Alt+F2 seguito da [Invio].

Ora abbiamo ottenuto la tanto agognata shell attraverso cui accedere al sistema che, in questo caso, sarà la leggerissima ash tramite Busybox, perfettamente funzionale ai nostri scopi.

Accesso tramite chroot

Iniziamo a creare un punto di mount in cui montare la partizione di root:

# mkdir /media/mychroot

Quindi individuare la partizione di root che vogliamo montare:

# fdisk -l

e, supponendo che essa sia individuata dal device sda1, montarla con:

# mount /dev/sda1 /media/mychroot

A questo punto è possibile accedere a tutti i file della directory root del sistema non avviabile. Ad esempio, per modificare il file /etc/network/interfaces:

# nano /media/mychroot/etc/network/interfaces
Warning.png ATTENZIONE
Se si ha la necessità di utilizzare le directory /var /boot /tmp /home o altre, residenti su partizioni separate da quella di root "/", bisogna individuare il rispettivo device e montarle una ad una dopo aver creato per ciascuna di loro un punto di mount


Se si vogliono compiere operazioni più complesse di una semplice modifica di un file (aggiornamento del sistema, operazioni sui pacchetti, operazioni sul filesystem etc.), bisogna utilizzare necessariamente chroot.
Prima di far questo, servirà montare alcune directory necessarie al funzionamento dei comandi impartiti nella nuova root directory:

# mount --rbind /dev /media/mychroot/dev
# mount --rbind /sys /media/mychroot/sys
# mount --rbind /proc /media/mychroot/proc

Adesso, se non sono comparsi errori, è tutto pronto per entrare nella nuova root directory attraverso chroot:

# chroot /media/mychroot /bin/bash --login

Chroot su LVM

Nel caso utilizzassimo un LVM i passi da compiere sono quasi gli stessi.
Iniziamo a creare un punto di mount:

# mkdir /media/mychroot

Cerchiamo tutti i gruppi di volumi, e poi ne attiviamo tutti i volumi logici:

# vgscan
# vgchange -ay

Questa parte può essere effettuata in automatico dal sistema, non è sempre strettamente necessaria. Può esserlo però per esempio se i volumi logici sono contenuti in una partizione criptata: in tal caso sarebbe necessario prima sbloccare la partizione e poi attivare manualmente i volumi logici come mostrato.

Quindi individuiamo il volume logico associato al filesystem di root (in questo esempio il VG si chiama "debian") con il comando "lvdisplay":

# lvdisplay | more
--- Logical volume ---
LV Path        /dev/debian/root
LV Name        root
VG Name        debian
...
...

Montiamo il volume logico di root:

# mount /dev/debian/root /media/mychroot

Montiamo come prima alcune directory necessarie:

# mount --rbind /dev /media/mychroot/dev
# mount --rbind /sys /media/mychroot/sys
# mount --rbind /proc /media/mychroot/proc

E infine il chroot :

# chroot /media/mychroot /bin/bash --login

Conclusioni

Adesso è come se stessimo operando all'interno della Debian box ed è possibile effettuare tutte le operazioni necessarie al ripristino del sistema Debian danneggiato.
Per uscire da chroot digitare:

# exit

e, se si sta utilizzando il Rescue Mode dell'installer Debian, premere Alt+F1 per ritornare al menù.




Guida scritta da: S3v 17:16, 12 set 2011 (CEST) Swirl-auth40.png Debianized 40%
Estesa da:
Verificata da:
HAL 9000 15:59, 26 mag 2015 (CEST)

Verificare ed estendere la guida | Cos'è una guida Debianized