Σήμερα θα δούμε πως μια μια απλή ρύθμιση, μπορούμε να αυξήσουμε την ταχύτητα έναρξης του λειτουργικού μας συστήματος και έτσι να πετύχουμε χαμηλότερο χρόνο για την εκκίνηση (boot) οποιασδήποτε διανομής Linux.

auksisi-taxutitas-boot-linux

Όπως έχω αναφερθεί στο άρθρο «Τι είναι οι διανομές και ποιες οι διαφορές τους» το βασικότερο συστατικό τους είναι ο πυρήνας Linux. Μιας και είναι κοινός σε όλες τις διανομές (με εξαίρεση ίσως την διαφορετική έκδοση), θα δούμε πως μια απλή ρύθμιση μπορεί να μας εξοικονομήσει χρόνο απο το λεγόμενο boot’αρισμα του συστήματος μέχρι να δούμε το desktop μας.

Εν αρχή είναι ο Kernel και το Initramfs

Όταν λοιπόν ξεκινάει το σύστημα να boot’αρει, το πρώτο πράγμα που αναλαμβάνει δράση είναι ο πυρήνας (kernel). Αυτός, ψάχνει να βρει τα σημεία προσάρτησης του σκληρού δίσκο στον οποίο φιλοξενείται το υπόλοιπο λειτουργικό σύστημα. Ένα από τα πρώτα πράγματα που κοιτάει είναι να βρει ένα «πρόγραμμα/αρχείο» που ονομάζεται initramfs.

Το initramfs είναι ένα πολύ μικρό πρόγραμμα/αρχείο το οποίο περιέχει πληροφορίες για το που και πως θα ξεκινήσουν όλες οι συσκευές και οι υπηρεσίες ώστε να φτάσει το λειτουργικό σύστημα στην Login Screen (ή στο desktop αν το έχουμε ρυθμίσει να μπαίνει αυτόματα). Το initramfs δημιουργείται αυτόματα κατά την εγκατάσταση/αναβάθμιση του πυρήνα οπότε οι περισσότεροι χρήστες πολύ πιθανόν να μην γνωρίζουν καν την ύπαρξή του.

Μπορείτε να δείτε το αρχείο για το οποίο μιλάω στον φάκελο /boot. Πηγαίνετε σε αυτό και δείτε το μέγεθος που έχει και σημειώστε το μιας και θα δείτε πόσο θα αλλάξει με την ρύθμιση που θα κάνουμε.

Εργαλεία και ρυθμίσεις

Για να πετύχουμε τον σκοπό μας θα χρησιμοποιήσουμε δύο εργαλεία:

  1. systemd-analyze
  2. dracut (ή mkinitcpio μόνο στο Arch Linux)

To systemd-analyze θα το χρησιμοποιήσουμε για να μας πληροφορήσει τον χρόνο που χρειάστηκε το λειτουργικό σύστημα (η Linux διανομή μας) για να ολοκληρώσει το boot’άρισμα. Αυτό θα το χρειαστούμε, απλά για να συγκρίνουμε τους χρόνους πριν και μετά ώστε να έχουμε μια εικόνα για το πόσο χρόνο εξοικονομήσαμε και πόσο γρήγορα ολοκληρώθηκε η έναρξη του συστήματος.

Το δεύτερο εργαλείο είναι για την δημιουργία του initramfs. Οι περισσότερες πλέον διανομές χρησιμοποιούν το πρόγραμμα Dracut, με εξαίρεση το Arch Linux που χρησιμοποιεί το mkinicpio (το οποίο θα αναλύσουμε παρακάτω).

Ανοίξτε ένα τερματικό και δώστε:

systemd-analyze >> bootme.txt

Αν τώρα ανοίξετε το αρχείο bootme.txt θα δείτε κάτι σαν το παρακάτω:

Startup finished in 10.480s (kernel) + 15.800s (userspace) = 26.281s

Οι παραπάνω χρόνοι (από έναν υπολογιστή με Lubuntu 16.04), σίγουρα θα διαφέρουν σε εσάς, αλλά κρατάμε το γεγονός ότι αυτοί είναι οι τυπικοί χρόνοι που χρειάζεται το συγκεκριμένο σύστημα για να ξεκινήσει. Με λίγα λόγια το desktop του Lubuntu εμφανίστηκε σε 26 δευτερόλεπτα από την στιγμή που ξεκίνησε το boot’άρισμα.

Πάμε τώρα να βελτιώσουμε τον χρόνο εκκίνησης ;

Εγκατάσταση του Dracut – Mkinitcpio

Mkinitcpio

Αν έχετε Arch Linux, δεν χρειάζεστε το Dracut (που αφορά τις άλλες διανομές) μιας και είναι ήδη εγκατεστημένο το mkinitcpio, οπότε πάτε παρακάτω.

Dracut

Αν έχετε κάποια από τις παρακάτω διανομές, τότε δεν χρειάζεται να εγκαταστήσετε το Dracut, αφού πολύ πιθανόν να είναι ήδη εγκατεστημένο:

Παρόλα αυτά, κάντε μου την χάρη, πριν προχωρήσετε ελέγξτε αν είναι εγκατεστημένο (και πείτε μου στα σχόλια) και αν δεν είναι, κάντε το.

Σε περίπτωση που έχετε Ubuntu η κάποια διανομή που βασίζεται σε αυτό (π.χ. Linux Mint), το Dracut δεν είναι εγκατεστημένο και μπορείτε να το εγκαταστήσετε :

sudo apt install dracut

Η εγκατάσταση του dracut θα αντικαταστήσει το initramfs-tools που είναι εγκατεστημένο οπότε μην ανησυχείτε. Eπίσης, αν έχετε εγκαταστήσει κάποιο custom kernel πολύ πιθανόν να τον αφαιρέσει αν ο δημιουργός του δεν έχει φροντίσει να προσθέσει την εξάρτηση για το dracut.

Όσοι λοιπόν το εγκαταστήσετε τώρα, ξανά επισκεφτείτε τον φάκελο /boot και ξαναδείτε το μέγεθος του αρχείου που το όνομα του περιέχει την λέξη «initram». Υπάρχει διαφορά έτσι ; Ειδικά στην περίπτωση του Ubuntu θα δείτε μια διαφορά όπου το initram αρχικά να ήταν 40MB και τώρα να είναι κάπου 7-8ΜΒ.

Ήδη λοιπόν έχουμε κάνει ένα ωραιότατο αδυνάτισμα το οποίο από μόνο του θα αυξήσει την ταχύτητα εκκίνησης του συστήματος κατά μερικά δευτερόλεπτα.

Αφού λοιπόν το κάνατε εγκατάσταση και είδατε την μείωση το μέγεθος του iniramfs, μπορείτε να κάνετε επανεκκίνηση. Μόλις μπείτε στο Desktop, ανοίξτε πάλι τερματικό και δώστε πάλι:

systemd-analyze >> bootme.txt

Ανοίξετε πάλι το αρχείο bootme.txt και θα δείτε μια επιπλέον γραμμή κάτι σαν το παρακάτω:

Startup finished in 10.480s (kernel) + 15.800s (userspace) = 26.281s
Startup finished in 908ms (kernel) + 1.666s (initrd) + 16.677s (userspace) = 19.252s

Όχι και άσχημα σωστά; Από 26 δευτερόλεπτα, πήγαμε σε 19 !

Ρύθμιση συμπίεσης του initramfs

Τυπικά, είτε η Linux διανομή σας χρησιμοποιεί το Dracut είτε το Mkinitcpio (Arch Linux) το initramfs είναι ένα zip’αρισμένο αρχείο το οποίο έχει συμπιεστεί με το Gzip. Υπάρχουν όμως και άλλες μέθοδοι για την συμπίεση του αρχείου initramfs. Στις δοκιμές μου είδα ότι το lz4 μου έδωσε τους καλύτερους χρόνους (θα δούμε παρακάτω).

Θα δούμε λοιπόν πως αλλάζουμε την μέθοδο συμπίεσης πρώτα στο Arch Linux (mkinitcpio) και έπειτα στις υπόλοιπες διανομές Linux (dracut). Οι ρυθμίσεις αυτές γίνονται μια φορά και δεν χρειάζεται να γίνονται σε κάθε εγκατάσταση η αναβάθμιση πυρήνα μιας και θα λαμβάνονται υπόψιν από το σύστημά μας.

Ρύθμιση για το mkinitcpio

Όσοι λοιπόν έχετε Arch, στο τερματικό σας ανοίξτε το αρχείο /etc/mkinitcpio.conf και αφαρέστε την δίεση # απο την γραμμή COMPRESSION=»lz4″ ώστε να μοιάζει έτσι:


#COMPRESSION="gzip"
#COMPRESSION="bzip2"
#COMPRESSION="lzma"
#COMPRESSION="xz"
#COMPRESSION="lzop"
COMPRESSION="lz4"
#COMPRESSION=cat

Αποθηκεύστε και κλείστε το αρχείο. Έπειτα δημιουργείστε εκ νέου το initramfs:

sudo mkinitcpio -p linux

Τώρα κάντε επανεκκίνηση και μόλις μπείτε στο Desktop ελέγξτε τον χρόνο με το systemd-analyze. Κερδίσατε μερικά δευτερόλεπτα ακόμα έτσι ;

Ρύθμιση για το dracut

Όσοι λοιπόν έχετε διανομές όπως, Debian, Fedora, Linux Mint, openSUSE, Ubuntu κλπ, επιβεβαιώστε ότι έχετε εγκατεστημένη την βιβλιοθήκη lz4 (θα το βρείτε ως liblz4-tool η κάπως έτσι) και αν δεν το έχετε, πρέπει να το εγκαταστήσετε.

sudo apt install liblz4-tool

Έπειτα στο τερματικό σας ανοίγετε το αρχείο με την κατάληξη .conf που θα βρείτε στην διαδρομή /etc/dracut.conf.d/»onoma».conf. Για παράδειγμα, στο Lubuntu που ανέφερα πιο πάνω το αρχείο είναι το /etc/dracut.conf.d/10-debian.conf. Εκεί προσθέτετε την γραμμή compress=lz4 και hostonly=yes ώστε να μοιάζει με:

do_prelink=no
hostonly=yes
compress=lz4

Αφού το αποθηκεύσετε και το κλείσετε, δημιουργείτε ένα νέο initramfs με βάση το όνομα του αρχείου initramfs, όπως θα το βρείτε στην διαδρομή /boot και τον αριθμό έκδοσης του kernel που τρέχετε τώρα, το οποίο το βλέπετε με την εντολή uname -r. Για παράδειγμα στο Ubuntu όλο αυτό με μία εντολή είναι όπως η παρακάτω εντολή:

sudo dracut -f /boot/initrd.img-`uname -r`

Μόλις ολοκληρωθεί, μπορείτε να κάνετε επανεκκίνηση και έπειτα αφού μπείτε στο Desktop να τρέξετε την εντολή με το systemd-analyze που ανέφερα παραπάνω, ώστε να έχετε μια εικόνα για το πόσα δευτερόλεπτα γρηγορότερα φόρτωσε το σύστημά σας.

Με βάση τα δικά μου αποτελέσματα, η εικόνα μιλάει από μόνη της:

auksisi-taxutitas-linux-boot
Σύγκριση χρόνων default, με Dracut (hostonly=no), Dracut (hostonly=yes) και Dracut (hostonly=yes + lz4)

όπως βλέπετε, ο υπολογιστής με το Lubuntu Linux, ενώ στην αρχή χρειαζόταν 26 δευτερόλεπτα για να boot’άρει, τώρα θέλει μόνο 14.

Όσον αφορά τις άλλες μεθόδους συμπίεσης, από τις δοκιμές που έκανα με τις διαθέσιμες μεθόδους σε άλλον υπολογιστή (με Arch Linux), τον καλύτερο φυσικά χρόνο τον πέτυχα πάλι με την lz4:

--------------------------------------------------------------------------------------------------Χρόνος---Μέθοδος-------Μέγεθος 
Startup finished in 2.889s (firmware) + 15.894s (loader) + 4.014s (kernel) + 2.747s (userspace) = 25.545s->χωρίς συμπίε.-->20 MB 
Startup finished in 2.752s (firmware) + 15.013s (loader) + 4.608s (kernel) + 2.602s (userspace) = 24.977s->xz ------------>5.5 MB 
Startup finished in 2.881s (firmware) + 18.304s (loader) + 3.786s (kernel) + 3.357s (userspace) = 28.329s->gzip ---------->7.8 MB
Startup finished in 2.903s (firmware) + 14.081s (loader) + 5.758s (kernel) + 1.940s (userspace) = 24.683s->bzip2---------->7.1 MB 
Startup finished in 2.911s (firmware) + 14.442s (loader) + 4.956s (kernel) + 1.893s (userspace) = 24.203s->lzma----------->5.5 MB 
Startup finished in 2.897s (firmware) + 15.236s (loader) + 3.672s (kernel) + 1.851s (userspace) = 23.658s->lz4 ----------->10.9 MB

Επίλογος

Παρακάτω, θα σας παραθέσω και κάποιες πηγές για περαιτέρω μελέτη, μιας και υπάρχουν πολλά που μπορείτε να πειράξετε στο αρχείο ρυθμίσεων του προγράμματος που δημιουργεί το initramfs.

Μπορείτε για παράδειγμα να προσθέσετε οδηγούς, συστήματα αρχείων ή να αφαιρέσετε οδηγούς για να απενεργοποιείτε συσκευές κλπ. Αλλά ακόμα και αυτές να μην κάνετε, τα εργαλεία που είδαμε, με τις εξορισμού ρυθμίσεις που διαθέτουν, δημιουργούν έναν optimized initram που διαθέτει μόνο ότι είναι απαραίτητο (από drivers και ρυθμίσεις) για να εκκινήσει το σύστημα.

Ελπίζω με το παρόν άρθρο, να σας γλύτωσα χρόνο ο οποίος πάει χαμένος :)


Πηγές: