Στο παρόν άρθρο θα δούμε μια πιο ειδική χρήση του live USB περιβάλλοντος που όμως αποδεικνύεται σωτήρια σε αρκετές περιπτώσεις σπασμένων συστημάτων που δεν ξεκινάνε καθόλου. Ο λόγος για το chroot.
Χαρακτηριστικό των πρώτων ημερών των νεοεισερχόμενων χρηστών στο Linux είναι η διάθεση για γνώση και (επικίνδυνο) πειραματισμό. Πολύ λογικό θα έλεγε κανείς, διότι το ίδιο το Linux με την ελευθερία που δίνει για παραμετροποίηση σε ωθεί να εξερευνήσεις το λειτουργικό σύστημα, να το φέρεις στα μέτρα σου ξεζουμίζοντας το, να δεις τα ενδότερα του και γενικά να του αλλάξεις τα φώτα.
Δεν είναι η επιδιόρθωση του συστήματος που είναι αδύνατη, αλλά η «απειρία» μας που μας κάνει να καταφύγουμε στο format… και ξανά μανά από την αρχή.
Όμως, δεν πάνε όλα πάντοτε όπως τα περιμένουμε και αρκετές φορές καταλήγουμε με σπασμένα συστήματα με Kernel Panic ή χαλασμένους grub κλπ. Πολλές φορές μάλιστα η «ζημιά» που έχουμε δεν μας αφήνει περιθώρια για ανάκτηση του συστήματος και επαναφορά του σε προηγούμενη κατάσταση με κάποιο λογισμικό (π.χ Resetter) ή μέσω του recovery menu του Grub.
Έστω λοιπόν, ότι έχουμε στον υπολογιστή μας μια διανομή Linux (π.χ. Ubuntu) και το πρωί που το ανοίξαμε, αντί να φορτώσει το σύστημα κανονικά και να δούμε επιφάνεια εργασίας βλέπουμε ένα μήνυμα όπως στην παρακάτω εικόνα:

λόγγοι βουνά ραχούλες…
Ένα liveUSB και το Chroot… και γλυτώνουμε το format
Τα βάφουμε μαύρα και φορτώνουμε το Live USB για να ξανακάνουμε εγκατάσταση το λειτουργικό σύστημα; Όχι φυσικά διότι θα μπουτάρουμε μεν απο το LiveUSB αλλά θα μπούμε με chroot στο «κατεστραμένο» σύστημα για να το επισκευάσουμε.
Τι είναι το Chroot;
Το chroot είναι μια ενέργεια που αλλάζει τον γονικό κατάλογο μιας ομάδας διεργασιών, δημιουργώντας ένα ασφαλές περιβάλλον, ξεχωριστό από το υπόλοιπο σύστημα. Ένα πρόγραμμα που εκτελείται σε ένα τέτοιο τροποποιημένο περιβάλλον δεν μπορεί να έχει πρόσβαση σε αρχεία και εντολές εκτός αυτού του root περιβάλλοντος. Αυτό το τροποποιημένο περιβάλλον ονομάζεται chroot-jail.

Με λίγα λόγια στη δική μας περίπτωση αλλάζουμε το root του live περιβάλλοντος στο root περιβάλλον της προβληματικής εγκατάστασης.
Μπορείτε να το φανταστείτε σαν να κατασκευάζουμε στα γρήγορα μια γέφυρα μεταξύ του LiveUSB με το οποίο έχουμε ξεκινήσει τον υπολογιστή και του λειτουργικού συστήματος που βρίσκεται στον σκληρό δίσκο για να είναι εφικτή η μετάβαση σε αυτό.
Το καλό σε αυτή την περίπτωση είναι ότι μόλις γίνει η αλλαγή βρισκόμαστε στο root του χαλασμένου συστήματος, κάτι που μας επιτρέπει να κάνουμε ενέργειες όπως:
- Επανεγκατάσταση του bootloader (αν έχει πρόβλημα το GRUB)
- Να ξαναχτίσουμε το initramfs image (αν δεν βρίσκει το initramfs)
- Να αναβαθμίσουμε ή να υποβαθμίσουμε πακέτα σε παλαιότερες εκδόσεις
- Να κάνουμε reset ένα ξεχασμένο password του χρήστη
- Να αλλάξουμε δικαιώματα σε αρχεία/φακέλους συστήματος
«Εντάξει το κατάλαβα, πάμε!… έχω ξεκινήσει τον υπολογιστή από LiveUSB»
Προετοιμασία chroot περιβάλλοντος
Μόλις μπούμε στο live περιβάλλον, πρέπει να μάθουμε για τα διαμερίσματα (partitions) που έχει ο δίσκος με το λειτουργικό που θέλουμε να επαναφέρουμε οπότε ανοίγουμε το τερματικό και δίνουμε
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;
Φυσικά chroot. Με έχει σώσει άπειρες φορές! Πολύ χρήσιμο και για recovery από h/w error κλπ. Έχω π.χ. πάρει πολύ εύκολα dump από βάση MySQL σε μηχάνημα που άφησε χρόνους, κοτσάροντας το δίσκο του σε άλλο μηχάνημα, κάνοντας chroot σε αυτόν και σηκώνοντας κανονικότατα τη MySQL από εκεί.
Αν θέλαμε να κάνουμε format θα παίζαμε ακόμα με windows :P
Εντάξει, για να μην είμαι άδικος, θα πω ότι έχω δει Windows Admin να σώζει πολλές φορές κάποιο πρόβλημα σε windows χωρίς να κάνει format. Μάλιστα δεν μιλάμε για απλά προβλήματα αλλά για περίπλοκα boot errors.
Το ζητούμενο είναι να βγει ο μέσος χρήστης από τη λογική του format, γιατί «έτσι είχε μάθει» στα windows όταν τα πράγματα ζόριζαν. Οι περιπτώσεις που αναφέρει ο @cerebrux είναι σταγόνα στον ωκεανό, υπαρκτές αλλά ελάχιστες.
Μπράβο μπράβο μπράβο! Δεν ήξερα το chroot μέχρι που έκανα ταρζανιές για να κάνω τον υπολογιστή μου πιο γρήγορο με τον kernel 4.12 και το dracut, ενώ το ucaresytem-core αποφάσισε ότι δεν μου χρειάζονταν οι παλαιότεροι πυρήνες, βρε αδερφέ!…οπότε ξαφνικά μην τα πολυλογώ έμεινα χωρίς κανένα πυρήνα χα χα χα χα χα….
Που πάς ρε καραμήτροοοοο…
Ευτυχώς μπήκα με chroot, εγκατέστησα κάνα δυο πυρήνες (lts, μή lts, κλπ, να υπάρχουν!) και μπήκε στο σύστημα κανονικά.
Φυσικά το ucaresystem-core παρέμεινε. Οι ταρζανιές κόπηκαν, γιατί βλάπτουν στην ψυχική ηρεμία…
Από την άλλη να πω ότι δεν το έγραφε το άρθρο: «Eπίσης, αν έχετε εγκαταστήσει κάποιο custom kernel πολύ πιθανόν να τον αφαιρέσει αν ο δημιουργός του δεν έχει φροντίσει να προσθέσει την εξάρτηση για το dracut» ούτε καν ήξερα αν έχει την εξάρτηση ο 4.12 αλλά λέω ‘ντάααξει μωρέ τι θα γίνει…. !!!
Χα χα χα χα χα…
Εμ… δεν μπορεί κανείς να ξέρει τι έχει γίνει σε ένα custom kernel :P Τελικά την ευθύνη πάντα την έχει ο χρήστης μιας και το GPL το λέει ξεκάθαρα οτι ο developer ποτε δεν φταίει :)
Θα ηθελα να κανω μια ερώτηση….
Εχω dual-boot Arch και Windows 10 και θα ήθελα να κανω αναβαθμιση τα windows με fall creators αλλά είμαι σχεδόν σίγουρος πως η αναβαθμιση αυτή θα δημιουργήσει πρόβλημα (εκ φυσεως τα windows ειναι επιθετικά) με ταο διπλο λειρτουργικο … τι πρεπει να κανω για αποφύγω/διορθώσω to ενδεχομενο αυτο? (chroot μήπως) ?
https://polldaddy.com/js/rating/rating.js
Στέφανε
Στην περίπτωση που δημιουργηθεί πρόβλημα (αν και δε νομίζω) θα μπεις μέσω chroot και θα κάνεις επανεγκατάσταση του grub (αν δε δει το partition των windows ως entry, κάνε το mount στο/mnt και ξανακάνε το grub-mkconfig -o /boot/grub/grub.cfg για να το δει σωστά). Πάντως στα dual boot συστήματα που έχω (όλα με windows 10) μέχρι στιγμής δεν είχα το παραμικρό θέμα με τον grub και τα updates των 10 (Μέχρι στιγμής είναι όλα αναβαθμισμένα στη 1703 (Creators update όχι η Fall Creators Update).
Πιστεύω ότι όλα θα κυλήσουν ομαλά μη φοβάσαι :)
Φίλε Βασίλη, επιτέλους κατάλαβα ακριβώς τι κάνει το chroot. Το έχω χρησιμοποιήσει για επαναφορά του grub αλλά “παπαγαλία” χωρίς να καταλαβαίνω τί στο καλό χρειάζονται τα bind κλπ. Εύγε για το tutorial!
https://polldaddy.com/js/rating/rating.js
Χαίρομαι που βοήθησα να το καταλάβεις :)
Πολύ ωραίος φίλε! Πάρα πολύ ωραίο και αναγκαίο θα έλεγα άρθρο! Ευχαριστούμε πολύ!
Να σαι καλά :)
Σε σχέση με το Recovery Mode, τι διαφορά έχει;
Μου φαίνεται πως τις ενέργειες που λες πως μπορεί κάποιος να κάνει, μπορεί να τις κάνει και αν καταφέρει να έχει πρόσβαση στο Recovery Mode. Υποψιάζομαι σωστά ή αναφέρεσε σε ακόμη χειρότερες περιπτώσεις ( που κάποιος δε θα μπορεί να έχει πρόσβαση ούτε στο Recovery Mode ) ;
Οταν φτάνεις να χρησιμοποιήσεις Chroot δε δουλευει ούτε το recovery mode
A! οκ, τώρα γίνεται ακόμη πιο κατανοητό…
Ευχαριστώ Bill Niakas! :)
Ελπίζω να μη φτάσεις ποτέ σε αυτό το σημείο αλλά οι φορές που επιβάλλεται chroot είναι όταν δε δούλευει ο grub για κάποιο λόγο (δεν μπορείς εξ ορισμού να μπεις σε recovery mode) και όταν έχεις kernel panic (που πάλι δε μπορείς να μπεις σε recovery mode).
Συνήθως με το chroot αυτά τα προβλήματα ξεπερνιούνται.
Αρκεί βέβαια να ξέρεις τι να κάνεις.. ;)
Αλλά οκ.. ναι είναι μια πολύ καλή μέθοδος προσέγγισης ενός «κατεστραμένου» συστήματος αρχείων ώστε να προσπαθήσεις να το διορθώσεις…
πολυ ωραιο το αρθρο.
Ειδικα για μενα που κανω πειραματα με λειτουργικα,που τα αλλαζω σαν τα πουκαμισα…..ποσες φορες δεν βρεθηκα στον μαυροπινακα με το -error…-η καρδουλα μου το ξερει..
ευχαριστουμε για τις πληροφοριες.
Ωραίο το άρθρο αλλά έχω πέσει σε μια ειδική περίπτωση. Αν ο δίσκος είναι κρυπτογραφημένος τι κάνουμε; Μου ζητάει τον κωδικό, τον πληκτρολογώ αλλά προσάρτηση δεν κάνει. Μετά από μια αναβάθμιση μου δημιουργήθηκε το πρόβλημα. Υποβάθμιση πως κάνουμε; Ευχαριστώ εκ των προτέρων.
Πράγματι είναι ειδική περίπτωση και θα χρειαστεί να συνδυάσεις το παραπάνω άρθρο μαζί με τον παρακάτω οδηγό https://forum.manjaro.org/t/how-to-chroot-into-an-encrypted-root-partition/10760
κι αν δεν έχουμε …ένα αποτέλεσμα της ακόλουθης μορφής= 1ο βήμα