Στο παρόν άρθρο θα δούμε μια πιο ειδική χρήση του live USB περιβάλλοντος που όμως αποδεικνύεται σωτήρια σε αρκετές περιπτώσεις σπασμένων συστημάτων που δεν ξεκινάνε καθόλου. Ο λόγος για το chroot.

Χαρακτηριστικό των πρώτων ημερών των νεοεισερχόμενων χρηστών στο Linux είναι η διάθεση για γνώση και (επικίνδυνο) πειραματισμό. Πολύ λογικό θα έλεγε κανείς, διότι το ίδιο το Linux με την ελευθερία που δίνει για παραμετροποίηση σε ωθεί να εξερευνήσεις το λειτουργικό σύστημα, να το φέρεις στα μέτρα σου ξεζουμίζοντας το, να δεις τα ενδότερα του και γενικά να του αλλάξεις τα φώτα.

Δεν είναι η επιδιόρθωση του συστήματος που είναι αδύνατη, αλλά η «απειρία» μας που μας κάνει να καταφύγουμε στο format… και ξανά μανά από την αρχή.

Όμως, δεν πάνε όλα πάντοτε όπως τα περιμένουμε και αρκετές φορές καταλήγουμε με σπασμένα συστήματα με Kernel Panic ή χαλασμένους grub κλπ. Πολλές φορές μάλιστα η «ζημιά» που έχουμε δεν μας αφήνει περιθώρια για ανάκτηση του συστήματος και επαναφορά του σε προηγούμενη κατάσταση με κάποιο λογισμικό (π.χ Resetter) ή μέσω του recovery menu του Grub.

Έστω λοιπόν, ότι έχουμε στον υπολογιστή μας μια διανομή Linux (π.χ. Ubuntu) και το πρωί που το ανοίξαμε, αντί να φορτώσει το σύστημα κανονικά και να δούμε επιφάνεια εργασίας βλέπουμε ένα μήνυμα όπως στην παρακάτω εικόνα:

chroot-grub-rescue
Έχετε γεια βρυσούλες…
λόγγοι βουνά ραχούλες…

Ένα liveUSB και το Chroot… και γλυτώνουμε το format

Τα βάφουμε μαύρα και φορτώνουμε το Live USB για να ξανακάνουμε εγκατάσταση το λειτουργικό σύστημα; Όχι φυσικά διότι θα μπουτάρουμε μεν απο το LiveUSB αλλά θα μπούμε με chroot στο «κατεστραμένο» σύστημα για να το επισκευάσουμε.

Τι είναι το Chroot;

Το chroot είναι μια ενέργεια που αλλάζει τον γονικό κατάλογο μιας ομάδας διεργασιών, δημιουργώντας ένα ασφαλές περιβάλλον, ξεχωριστό από το υπόλοιπο σύστημα. Ένα πρόγραμμα που εκτελείται σε ένα τέτοιο τροποποιημένο περιβάλλον δεν μπορεί να έχει πρόσβαση σε αρχεία και εντολές εκτός αυτού του root περιβάλλοντος. Αυτό το τροποποιημένο περιβάλλον ονομάζεται chroot-jail.

chroot jail
chroot jail

Με λίγα λόγια στη δική μας περίπτωση αλλάζουμε το root του live περιβάλλοντος στο root περιβάλλον της προβληματικής εγκατάστασης.

Μπορείτε να το φανταστείτε σαν να κατασκευάζουμε στα γρήγορα μια γέφυρα μεταξύ του LiveUSB με το οποίο έχουμε ξεκινήσει τον υπολογιστή και του λειτουργικού συστήματος που βρίσκεται στον σκληρό δίσκο για να είναι εφικτή η  μετάβαση σε αυτό.

Το καλό σε αυτή την περίπτωση είναι ότι μόλις γίνει η αλλαγή βρισκόμαστε στο root του χαλασμένου συστήματος, κάτι που μας επιτρέπει να κάνουμε ενέργειες όπως:

  • Επανεγκατάσταση του bootloader (αν έχει πρόβλημα το GRUB)
  • Να ξαναχτίσουμε το initramfs image (αν δεν βρίσκει το initramfs)
  • Να αναβαθμίσουμε ή να υποβαθμίσουμε πακέτα σε παλαιότερες εκδόσεις
  • Να κάνουμε reset ένα ξεχασμένο password του χρήστη
  • Να αλλάξουμε δικαιώματα σε αρχεία/φακέλους συστήματος

«Εντάξει το κατάλαβα, πάμε!… έχω ξεκινήσει τον υπολογιστή από LiveUSB»

Προετοιμασία chroot περιβάλλοντος

Μόλις μπούμε στο live περιβάλλον, πρέπει να μάθουμε για τα διαμερίσματα (partitions) που έχει ο δίσκος με το λειτουργικό που θέλουμε να επαναφέρουμε οπότε ανοίγουμε το τερματικό και δίνουμε

lsblk

Και θα έχουμε ένα αποτέλεσμα της ακόλουθης μορφής

lsblk output
output της εντολής lsblk

στη συνέχεια εφόσον γνωρίζουμε την κατάτμηση (partition) της εγκατάστασης που θέλουμε να επιδιορθώσουμε (στη δική μου περίπτωση είναι η /dev/sda1) δίνουμε στο τερματικό

sudo mount /dev/sdXY /mnt

Όπου Χ και Y είναι το γράμμα και ο αριθμός της κατάτμησης που θα γίνει mount (στη δική μου περίπτωση X==a , Y==1). Πήραμε λοιπόν το διαμέρισμα sda1 και το «συνδέσαμε» με έναν φάκελο (/mnt) του liveUSB.

Εν συνεχεία θα κάνουμε mount τους φακέλους /dev, /proc ,/sys

sudo mount --bind /dev /mnt/dev
sudo mount --bind /proc /mnt/proc
sudo mount --bind /sys /mnt/sys

Όπως παρατηρούμε προστέθηκε η παράμετρος

--bind

η οποία προσαρτά τους φακέλους σαν μέρος του tree του /mnt, σημαντική λεπτομέρεια για να λειτουργήσουν όλα σωστά.

Χρήση δικτύου στο chroot (προαιρετικό)

Στην περίπτωση που θέλουμε να έχουμε δίκτυο και πρόσβαση στο internet στο chroot περιβάλλον, δίνουμε στο τερματικό

cp /etc/resolv.conf /mnt/etc/resolv.conf

Αυτό προτείνεται σε περιπτώσεις που θέλουμε να κάνουμε ενημερώσεις ή εγκατάσταση πακέτων.

Είσοδος στο chroot περιβάλλον

Έχουμε τελειώσει την προετοιμασία και είμαστε έτοιμοι να μπούμε στο chroot περιβάλλον μας δίνοντας στο τερματικό

sudo chroot /mnt

Όπου μπορούμε να κάνουμε τις όποιες επιδιορθώσεις προκειμένου να αποφύγουμε το format. Πιο πριν αναφερθήκαμε σε μερικές συνήθεις περιπτώσεις που το chroot αποδεικνύεται σωτήριο. Θα δούμε τα fixes μερικών εξ αυτών

Επανεγκατάσταση του grub

Σε ubuntu/debian και παράγωγες διανομές

grub-install /dev/sdX
grub-install --recheck /dev/sdX
update-grub

Σε Arch Linux

grub-install --target=i386-pc --recheck /dev/sda
grub-mkconfig -o /boot/grub/grub.cfg

Εγκατάσταση πυρήνων

Σε ubuntu/debian και παράγωγες διανομές

apt install linux-image-generic

Σε Arch Linux

pacman -S linux-lts

Επανεγκατάσταση του initramfs

Σε ubuntu/debian και παράγωγες διανομές

update-initramfs -u

Σε Arch Linux

mkinitcpio -p linux

Reset ξεχασμένου password

passwd όνομαχρήστη

Έξοδος από το chroot

Μόλις τελειώσουμε τις ενέργειες μας εξερχόμαστε από το περιβάλλον του chroot και αποσυνδέουμε τους φακέλους με τους οποίους φτιαξαμε την «γέφυρά» μας.

exit
sudo umount /mnt/sys
sudo umount /mnt/proc
sudo umount /mnt/dev
sudo umount /mnt

Και προχωρούμε σε επανεκκίνηση του συστήματος μας.

Αυτά είναι μερικά μόνο παραδείγματα περιπτώσεων που το chroot είναι αρκετά χρήσιμο οπότε δεν θα επεκταθούμε περισσότερο, μιας και στόχος είναι να μάθουμε να μπαίνουμε σε chroot περιβάλλον. Από εκεί και πέρα το πως θα χειριστούμε την ανάκτηση, ή επαναφορά του Linux συστήματός μας, αλλάζει ανά περίπτωση μιας και η επισκευή του λειτουργικού έχει να κάνει με τα συμπτώματα του προβλήματος και ο εντοπισμός τους μέσω chroot είναι κρίσιμος για να πετύχουμε στις προσπάθειες επιδιόρθωσης.

Επίλογος

Όσο επικίνδυνη και να φαίνεται αυτή η μέθοδος, μας βοηθά να γλιτώσουμε από τα άσκοπα format και το χάσιμο χρόνου. Επιπλέον μας επιτρέπει να μπούμε στα ενδότερα του συστήματος μας και να βγάλουμε χρήσιμα συμπεράσματα π.χ. διαβάζοντας τα τελευταία logs της δραστηριότητάς μας πριν την στιγμή που εμφανίστηκε το πρόβλημα.

Εσείς χρησιμοποιείτε το chroot ή καταφεύγετε σε format;