Ecco alcune risorse:
"Cambiare root" o "chrooting" è un metodo per ingrandire una parte del tuo filesystem, in modo che, ad esempio, /path
si riferisca a ciò che era precedentemente accessibile a /mnt/path
. Il "root" nell'espressione "chroot" si riferisce al filesystem di root /
, non all'utente root. (Anche se in genere avrai bisogno dei privilegi di utente root per chroot.)
Preparazione
Tutti i passaggi di questa guida dovranno essere eseguiti come utente root.
Supponiamo che il tuo disco rigido sia in / dev / sda1 e il suo tipo di file sia ext3. Se non conosci la posizione e il tipo di file del tuo disco, leggi l'output di fdisk -l
.
Assicurarsi che le architetture del sistema in cui è stato avviato (ad es. Un LiveCD a 32 bit) e il sistema in cui si desidera inserire (ad es. Un'installazione a 32 bit sul disco rigido) corrispondano. È possibile determinare l'architettura avviata con l'utilizzo uname -m
.
Assicurarsi che tutti i moduli del kernel necessari siano stati caricati.
Configurare la rete se necessario (ad es. Per installare pacchetti aggiornati).
Inizializza la tua partizione di swap se necessario (ad es swapon /dev/sda3
.).
Esecuzione del chroot
cd /
mount -t ext3 /dev/sda1 /mnt
mount -t proc proc /mnt/proc
mount -t sysfs sys /mnt/sys
mount -o bind /dev /mnt/dev
Se la tua /boot
directory si trova su una partizione diversa dalla tua /
e vuoi manipolare i file su di essa (ad esempio, se lavorerai con GRUB, eseguirai un aggiornamento del kernel, ecc.), Dovrai anche montare quella partizione. Se è in / dev / sda2 e il suo tipo di file è ext2, allora fai:
mount -t ext2 /dev/sda2 /mnt/boot
Allo stesso modo per qualsiasi altra parte del tuo filesystem ( /var
, /usr
) che risiede su partizioni separate ma a cui devi accedere. Generalmente quando chrooting per riparare qualcosa non avrai bisogno di accedere a / home, quindi non devi preoccuparti di esso.
(È anche possibile montare filesystem dopo aver eseguito il chrooting, ma è più intelligente farlo in anticipo. Il motivo è che quando lo si fa dopo, l'ambiente esterno / kernel non conoscerà i filesystem montati, quindi se si dimentica di smontarli prima di uscire dal chroot, il sistema non saprà nemmeno smontarli quando si spegne. Ciò potrebbe danneggiare quei filesystem.)
Se hai configurato la tua rete e desideri utilizzarla nel sistema chroot, copialo in /etc/resolv.conf
modo da poter risolvere i nomi di dominio:
cp -L /etc/resolv.conf /mnt/etc/resolv.conf
Ora sei pronto per passare al filesystem montato:
chroot /mnt /bin/bash
(Se questo restituisce un errore chroot: cannot run command '/bin/bash': Exec format error
, di solito indica che si è avviato con un'architettura (ad esempio x86_32) e si sta tentando di eseguire il chroot in un'altra (ad esempio x86_64). La soluzione consiste nell'utilizzare un LiveCD con la stessa architettura del sistema che si desidera chroot in.)
A questo punto, stai ancora eseguendo il kernel con cui hai avviato, ma tutti i percorsi /path
faranno riferimento a quello che era /mnt/path
.
Se farai qualcosa con GRUB, dovrai assicurarti che il tuo /etc/mtab
file sia aggiornato:
grep -v rootfs /proc/mounts > /etc/mtab
Potrebbe anche essere utile a questo punto fare:
source /etc/profile
export PS1="(chroot) $PS1" # add a reminder to your prompt
Fai il tuo lavoro sporco
A questo punto, puoi eseguire qualsiasi risoluzione dei problemi che devi fare:
- reinstalla GRUB nell'MBR del tuo disco
- resettare una password dimenticata
- eseguire un aggiornamento del kernel (o downgrade)
- ricostruisci il tuo initramdisk
- correggi il tuo / etc / fstab
- reinstallare i pacchetti utilizzando il gestore pacchetti
- qualunque cosa
Pulire
Al termine, assicurarsi che tutti i programmi in esecuzione siano stati arrestati. Quindi esci dal chroot:
exit
Ora smonta tutte le partizioni che hai montato:
umount /mnt/boot # if you mounted this or any other separate partitions
umount /mnt/{proc,sys,dev}
Infine, prova a smontare il disco rigido:
umount /mnt
Se viene visualizzato un errore che indica che / mnt (o qualsiasi altra partizione) è occupata, ciò può significare una delle due cose:
È stato lasciato in esecuzione un programma all'interno del chroot.
O più frequentemente: esiste ancora un mount point su questo mount. Ad esempio, / mnt / usr è ancora montato quando si tenta di smontare / mnt.
In quest'ultimo caso, è sufficiente smontare prima il punto di montaggio offensivo. Per ottenere un promemoria di tutti i punti di montaggio correnti, eseguire mount
senza parametri.
Finalmente:
reboot
chroot.sh
nella radice di ogni sistema che utilizzo, il cui contenuto corrisponde più o meno a quanto sopra. Quando ho bisogno di chroot in quel sistema da un LiveCD o qualcosa del genere, allora devo solo montare il filesystem di root ed eseguire lo script chroot. Non dovrai più cercare freneticamente i comandi giusti.