Εικονικά συστήματα αρχείων στο Linux: γιατί χρειάζονται και πώς λειτουργούν; Μέρος 1

Γεια σε όλους! Συνεχίζουμε να λανσάρουμε νέες ροές για τα μαθήματα που έχετε ήδη ερωτευτεί και τώρα βιαζόμαστε να σας ανακοινώσουμε ότι ξεκινάμε ένα νέο σύνολο μαθημάτων "Διαχειριστής Linux"που θα ξεκινήσει στα τέλη Απριλίου. Μια νέα δημοσίευση θα έχει ημερομηνία για αυτήν την εκδήλωση. Με το αρχικό υλικό, μπορείτε διαβάστε εδώ.

Τα εικονικά συστήματα αρχείων χρησιμεύουν ως ένα είδος μαγικής αφαίρεσης που επιτρέπει στη φιλοσοφία του Linux να πει ότι «όλα είναι ένα αρχείο».

Εικονικά συστήματα αρχείων στο Linux: γιατί χρειάζονται και πώς λειτουργούν; Μέρος 1

Τι είναι ένα σύστημα αρχείων; Βασισμένο στα λόγια ενός από τους πρώτους συνεργάτες και συγγραφείς του Linux Ρομπέρτα Λάβα, "Ένα σύστημα αρχείων είναι μια ιεραρχική αποθήκευση δεδομένων που συγκεντρώνονται σύμφωνα με μια συγκεκριμένη δομή." Όπως και να έχει, αυτός ο ορισμός είναι εξίσου κατάλληλος για VFAT (Virtual File Allocation Table), Git και Κασσάνδρα (Βάση δεδομένων NoSQL). Τι ακριβώς ορίζει λοιπόν κάτι τέτοιο ως «σύστημα αρχείων»;

Βασικά συστήματα αρχείων

Ο πυρήνας του Linux έχει ορισμένες απαιτήσεις για μια οντότητα που μπορεί να θεωρηθεί σύστημα αρχείων. Πρέπει να εφαρμόσει τις μεθόδους open(), read() и write() για μόνιμα αντικείμενα που έχουν ονόματα. Από αντικειμενοστραφή άποψη προγραμματισμός, ο πυρήνας ορίζει ένα γενικό σύστημα αρχείων ως μια αφηρημένη διεπαφή και αυτές οι τρεις μεγάλες συναρτήσεις θεωρούνται "εικονικές" και δεν έχουν συγκεκριμένο ορισμό. Αντίστοιχα, η προεπιλεγμένη υλοποίηση συστήματος αρχείων ονομάζεται εικονικό σύστημα αρχείων (VFS).

Εικονικά συστήματα αρχείων στο Linux: γιατί χρειάζονται και πώς λειτουργούν; Μέρος 1

Εάν μπορούμε να ανοίξουμε, να διαβάσουμε και να γράψουμε σε μια οντότητα, τότε αυτή η οντότητα θεωρείται αρχείο, όπως μπορούμε να δούμε από το παράδειγμα στην παραπάνω κονσόλα.
Το φαινόμενο VFS υπογραμμίζει μόνο την παρατήρηση που μοιάζει με Unix ότι "όλα είναι ένα αρχείο". Σκεφτείτε πόσο περίεργο αυτό το μικρό παράδειγμα /dev/console παραπάνω δείχνει πώς λειτουργεί πραγματικά η κονσόλα. Η εικόνα δείχνει μια διαδραστική περίοδο λειτουργίας Bash. Η αποστολή μιας συμβολοσειράς στην κονσόλα (εικονική συσκευή κονσόλας) την εμφανίζει σε μια εικονική οθόνη. Το VFS έχει άλλες, ακόμη πιο περίεργες ιδιότητες. Για παράδειγμα, σας επιτρέπει να κάνετε αναζήτηση κατά αυτό.

Γνωστά συστήματα όπως το ext4, το NFS και το /proc έχουν τρεις σημαντικές λειτουργίες σε μια δομή δεδομένων C που ονομάζεται file_operations. Επιπλέον, ορισμένα συστήματα αρχείων επεκτείνουν και επαναπροσδιορίζουν τις λειτουργίες VFS με έναν οικείο αντικειμενοστραφή τρόπο. Όπως επισημαίνει ο Robert Love, η αφαίρεση VFS επιτρέπει στους χρήστες Linux να αντιγράφουν αδιάφορα αρχεία προς ή από λειτουργικά συστήματα τρίτων ή αφηρημένες οντότητες όπως σωλήνες χωρίς να ανησυχούν για την εσωτερική τους μορφή δεδομένων. Από την πλευρά του χρήστη (χώρος χρήστη), χρησιμοποιώντας μια κλήση συστήματος, μια διεργασία μπορεί να αντιγράψει από ένα αρχείο σε δομές δεδομένων πυρήνα χρησιμοποιώντας τη μέθοδο read() ένα σύστημα αρχείων και, στη συνέχεια, χρησιμοποιήστε τη μέθοδο write () άλλο σύστημα αρχείων για έξοδο δεδομένων.

Οι ορισμοί συναρτήσεων που ανήκουν στους βασικούς τύπους VFS βρίσκονται στα αρχεία fs/*.c πηγαίος κώδικας πυρήνα, ενώ υποκατάλογοι fs/ περιέχει ορισμένα συστήματα αρχείων. Ο πυρήνας περιέχει επίσης οντότητες όπως cgroups, /dev и tmpfs, τα οποία απαιτούνται κατά τη διαδικασία εκκίνησης και επομένως ορίζονται στον υποκατάλογο του πυρήνα init/. Σημειώσε ότι cgroups, /dev и tmpfs μην καλείτε τις «τρεις μεγάλες» συναρτήσεις file_operations, αλλά απευθείας ανάγνωση και εγγραφή στη μνήμη.
Το παρακάτω διάγραμμα δείχνει πώς ο χώρος χρηστών έχει πρόσβαση στους διαφορετικούς τύπους συστημάτων αρχείων που είναι συνήθως προσαρτημένα σε συστήματα Linux. Οι δομές δεν εμφανίζονται pipes, dmesg и POSIX clocks, που υλοποιούν και τη δομή file_operations, πρόσβαση μέσω του επιπέδου VFS.

Εικονικά συστήματα αρχείων στο Linux: γιατί χρειάζονται και πώς λειτουργούν; Μέρος 1

Το VFS είναι ένα "στρώμα περιτυλίγματος" μεταξύ κλήσεων συστήματος και υλοποιήσεων ορισμένων file_operationsόπως π.χ. ext4 и procfs. Λειτουργίες file_operations μπορεί να αλληλεπιδράσει είτε με προγράμματα οδήγησης συσκευών είτε με συσκευές πρόσβασης στη μνήμη. tmpfs, devtmpfs и cgroups μη χρησιμοποιεις file_operations, αλλά απευθείας πρόσβαση στη μνήμη.
Η ύπαρξη του VFS παρέχει την ευκαιρία να επαναχρησιμοποιηθεί ο κώδικας, καθώς οι βασικές μέθοδοι που σχετίζονται με συστήματα αρχείων δεν χρειάζεται να εφαρμοστούν εκ νέου από κάθε τύπο συστήματος αρχείων. Η επαναχρησιμοποίηση κώδικα είναι μια κοινή πρακτική μεταξύ των μηχανικών λογισμικού! Ωστόσο, εάν ο επαναχρησιμοποιήσιμος κωδικός περιέχει σοβαρά λάθη, όλες οι υλοποιήσεις που κληρονομούν κοινές μεθόδους υποφέρουν από αυτές.

/tmp: Απλή υπόδειξη

Ένας εύκολος τρόπος για να ανιχνεύσετε ότι υπάρχουν VFS σε ένα σύστημα είναι να πληκτρολογήσετε mount | grep -v sd | grep -v :/, το οποίο θα δείχνει όλα τα τοποθετημένα (mounted) συστήματα αρχείων που δεν είναι εγκατεστημένα σε δίσκο και δεν είναι NFS, κάτι που ισχύει στους περισσότερους υπολογιστές. Ένα από τα αναφερόμενα στηρίγματα (mounts) Το VFS αναμφίβολα θα το κάνει /tmp, σωστά?

Εικονικά συστήματα αρχείων στο Linux: γιατί χρειάζονται και πώς λειτουργούν; Μέρος 1

Όλοι γνωρίζουν αυτή την αποθήκευση / tmp σε φυσικό μέσο - τρέλα! Πηγή.

Γιατί είναι ανεπιθύμητη η αποθήκευση /tmp σε φυσικά μέσα; Επειδή τα αρχεία στο /tmp είναι προσωρινές και οι συσκευές αποθήκευσης είναι πιο αργές από τη μνήμη όπου δημιουργείται το tmpfs. Επιπλέον, τα φυσικά μέσα είναι πιο επιρρεπή στη φθορά όταν αντικαθίστανται από τη μνήμη. Τέλος, τα αρχεία στο /tmp μπορούν να περιέχουν ευαίσθητες πληροφορίες, επομένως η εξαφάνισή τους σε κάθε επανεκκίνηση είναι ένα βασικό χαρακτηριστικό.

Δυστυχώς, ορισμένα σενάρια εγκατάστασης διανομής Linux δημιουργούν το /tmp στη συσκευή αποθήκευσης από προεπιλογή. Μην απελπίζεστε αν αυτό συνέβη και στο σύστημά σας. Ακολουθήστε μερικές απλές οδηγίες με Αρχείο Wikiγια να το διορθώσετε και να γνωρίζετε ότι η μνήμη που έχει εκχωρηθεί για tmpfs καθίσταται μη διαθέσιμο για άλλους σκοπούς. Με άλλα λόγια, ένα σύστημα με ένα τεράστιο tmpfs και μεγάλα αρχεία μπορεί να ξεμείνει από μνήμη και να κολλήσει. Μια άλλη υπόδειξη: κατά την επεξεργασία ενός αρχείου /etc/fstab, να θυμάστε ότι πρέπει να τελειώνει με μια νέα γραμμή, διαφορετικά το σύστημά σας δεν θα εκκινήσει.

/proc και /sys

Εκτός /tmp, VFS (εικονικά συστήματα αρχείων) που είναι πιο γνωστά στους χρήστες Linux /proc и /sys. (/dev βρίσκεται σε κοινόχρηστη μνήμη και δεν έχει file_operations). Γιατί αυτά τα δύο συστατικά; Ας εξετάσουμε αυτό το ζήτημα.

procfs δημιουργεί ένα στιγμιότυπο του πυρήνα και των διεργασιών για τις οποίες παρακολουθεί userspace. Σε /proc ο πυρήνας εκτυπώνει πληροφορίες σχετικά με το τι έχει διαθέσιμο, όπως διακοπές, εικονική μνήμη και προγραμματιστή. Εκτός, /proc/sys είναι το μέρος όπου διαμορφώθηκαν οι παράμετροι με την εντολή sysctl, διαθέσιμο για userspace. Η κατάσταση και τα στατιστικά στοιχεία των μεμονωμένων διεργασιών εμφανίζονται σε καταλόγους /proc/.

Εικονικά συστήματα αρχείων στο Linux: γιατί χρειάζονται και πώς λειτουργούν; Μέρος 1

Εδώ /proc/meminfo είναι ένα κενό αρχείο που περιέχει ωστόσο πολύτιμες πληροφορίες.

Συμπεριφορά /proc αρχεία δείχνει πόσο διαφορετικά μπορεί να είναι τα συστήματα αρχείων δίσκων VFS. Από τη μια πλευρά, /proc/meminfo περιέχει πληροφορίες που μπορούν να προβληθούν με την εντολή free. Από την άλλη, είναι άδειο! Πώς λειτουργεί; Η κατάσταση θυμίζει το περίφημο άρθρο με τίτλο Υπάρχει το φεγγάρι όταν κανείς δεν το κοιτάζει; Πραγματικότητα και Κβαντική Θεωρία»γράφτηκε από τον καθηγητή φυσικής του Πανεπιστημίου Cornell, David Mermin το 1985. Το γεγονός είναι ότι ο πυρήνας συλλέγει στατιστικά στοιχεία μνήμης όταν υποβάλλεται ένα αίτημα /proc, και μάλιστα σε αρχεία /proc δεν υπάρχει τίποτα όταν κανείς δεν κοιτάζει. Όπως ειπώθηκε Mermin, "Το θεμελιώδες κβαντικό δόγμα λέει ότι η μέτρηση γενικά δεν αποκαλύπτει μια προϋπάρχουσα τιμή της ιδιότητας που μετράται." (Και θεωρήστε την ερώτηση για το φεγγάρι ως εργασία!)
Φαινομενικό κενό procfs έχει νόημα γιατί οι πληροφορίες εκεί είναι δυναμικές. Μια ελαφρώς διαφορετική κατάσταση με sysfs. Ας συγκρίνουμε πόσα αρχεία έχουν μέγεθος τουλάχιστον ένα byte /proc και /sys.

Εικονικά συστήματα αρχείων στο Linux: γιατί χρειάζονται και πώς λειτουργούν; Μέρος 1

Procfs έχει ένα αρχείο, δηλαδή τη διαμόρφωση του εξαγόμενου πυρήνα, η οποία αποτελεί εξαίρεση επειδή χρειάζεται να δημιουργηθεί μόνο μία φορά ανά εκκίνηση. Από την άλλη πλευρά, στο /sys υπάρχουν πολλά μεγαλύτερα αρχεία, πολλά από τα οποία καταλαμβάνουν μια ολόκληρη σελίδα μνήμης. Συνήθως αρχεία sysfs περιέχουν ακριβώς έναν αριθμό ή γραμμή, σε αντίθεση με τους πίνακες πληροφοριών που λαμβάνονται από την ανάγνωση αρχείων όπως π.χ /proc/meminfo.

στόχος sysfs - παρέχει ιδιότητες ανάγνωσης/εγγραφής αυτού που καλεί ο πυρήνας «kobjects» στον χώρο χρηστών. Ο μοναδικός στόχος kobjects είναι η καταμέτρηση συνδέσμων: όταν αφαιρεθεί η τελευταία σύνδεση σε ένα kobject, το σύστημα θα επαναφέρει τους πόρους που σχετίζονται με αυτό. Παρ 'όλα αυτά, /sys αποτελεί το μεγαλύτερο μέρος των διάσημων "σταθερό ABI για χώρο χρηστών" πυρήνα, που κανείς δεν μπορεί ποτέ, σε καμία περίπτωση "Διακοπή". Αυτό δεν σημαίνει ότι τα αρχεία στο sysfs είναι στατικά, κάτι που θα ήταν ασυνεπές με την καταμέτρηση αναφορών ασταθών αντικειμένων.
Το σταθερό ABI του πυρήνα περιορίζει τι μπορεί να εμφανιστεί /sys, όχι αυτό που είναι πραγματικά παρόν τη συγκεκριμένη στιγμή. Η καταχώριση δικαιωμάτων αρχείων στο sysfs παρέχει πληροφορίες σχετικά με τον τρόπο διαμόρφωσης των ρυθμίσεων για συσκευές, λειτουργικές μονάδες, συστήματα αρχείων κ.λπ. μπορεί να ρυθμιστεί ή να διαβαστεί. Το λογικό συμπέρασμα είναι ότι το procfs είναι επίσης μέρος του σταθερού ABI του πυρήνα, αν και αυτό δεν αναφέρεται ρητά στο τεκμηρίωση.

Εικονικά συστήματα αρχείων στο Linux: γιατί χρειάζονται και πώς λειτουργούν; Μέρος 1

Αρχεία σε sysfs περιγράψτε μια συγκεκριμένη ιδιότητα για κάθε οντότητα και μπορεί να είναι αναγνώσιμη, εγγράψιμη ή και τα δύο. Το "0" στο αρχείο σημαίνει ότι ο SSD δεν μπορεί να αφαιρεθεί.

Ας ξεκινήσουμε το δεύτερο μέρος της μετάφρασης με τον τρόπο παρακολούθησης του VFS χρησιμοποιώντας τα εργαλεία eBPF και bcc, και τώρα περιμένουμε τα σχόλιά σας και σας προσκαλούμε παραδοσιακά να ανοιχτό διαδικτυακό σεμινάριο, που θα πραγματοποιηθεί από τον δάσκαλό μας στις 9 Απριλίου - Βλαντιμίρ Ντροζντέτσκι.

Πηγή: www.habr.com

Προσθέστε ένα σχόλιο