Γεια σε όλους! Συνεχίζουμε να λανσάρουμε νέες ροές για τα μαθήματα που έχετε ήδη ερωτευτεί και τώρα βιαζόμαστε να σας ανακοινώσουμε ότι ξεκινάμε ένα νέο σύνολο μαθημάτων
Τα εικονικά συστήματα αρχείων χρησιμεύουν ως ένα είδος μαγικής αφαίρεσης που επιτρέπει στη φιλοσοφία του Linux να πει ότι «όλα είναι ένα αρχείο».
Τι είναι ένα σύστημα αρχείων; Βασισμένο στα λόγια ενός από τους πρώτους συνεργάτες και συγγραφείς του Linux
Βασικά συστήματα αρχείων
Ο πυρήνας του Linux έχει ορισμένες απαιτήσεις για μια οντότητα που μπορεί να θεωρηθεί σύστημα αρχείων. Πρέπει να εφαρμόσει τις μεθόδους open()
, read()
и write()
για μόνιμα αντικείμενα που έχουν ονόματα. Από αντικειμενοστραφή άποψη
Εάν μπορούμε να ανοίξουμε, να διαβάσουμε και να γράψουμε σε μια οντότητα, τότε αυτή η οντότητα θεωρείται αρχείο, όπως μπορούμε να δούμε από το παράδειγμα στην παραπάνω κονσόλα.
Το φαινόμενο VFS υπογραμμίζει μόνο την παρατήρηση που μοιάζει με Unix ότι "όλα είναι ένα αρχείο". Σκεφτείτε πόσο περίεργο αυτό το μικρό παράδειγμα /dev/console παραπάνω δείχνει πώς λειτουργεί πραγματικά η κονσόλα. Η εικόνα δείχνει μια διαδραστική περίοδο λειτουργίας Bash. Η αποστολή μιας συμβολοσειράς στην κονσόλα (εικονική συσκευή κονσόλας) την εμφανίζει σε μια εικονική οθόνη. Το VFS έχει άλλες, ακόμη πιο περίεργες ιδιότητες. Για παράδειγμα, σας επιτρέπει να κάνετε αναζήτηση κατά
Γνωστά συστήματα όπως το ext4, το NFS και το /proc έχουν τρεις σημαντικές λειτουργίες σε μια δομή δεδομένων C που ονομάζεται read()
ένα σύστημα αρχείων και, στη συνέχεια, χρησιμοποιήστε τη μέθοδο write ()
άλλο σύστημα αρχείων για έξοδο δεδομένων.
Οι ορισμοί συναρτήσεων που ανήκουν στους βασικούς τύπους VFS βρίσκονται στα αρχεία fs/
περιέχει ορισμένα συστήματα αρχείων. Ο πυρήνας περιέχει επίσης οντότητες όπως cgroups
, /dev
и tmpfs
, τα οποία απαιτούνται κατά τη διαδικασία εκκίνησης και επομένως ορίζονται στον υποκατάλογο του πυρήνα init/
. Σημειώσε ότι cgroups
, /dev
и tmpfs
μην καλείτε τις «τρεις μεγάλες» συναρτήσεις file_operations
, αλλά απευθείας ανάγνωση και εγγραφή στη μνήμη.
Το παρακάτω διάγραμμα δείχνει πώς ο χώρος χρηστών έχει πρόσβαση στους διαφορετικούς τύπους συστημάτων αρχείων που είναι συνήθως προσαρτημένα σε συστήματα Linux. Οι δομές δεν εμφανίζονται pipes
, dmesg
и POSIX clocks
, που υλοποιούν και τη δομή file_operations
, πρόσβαση μέσω του επιπέδου VFS.
Το 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
, σωστά?
Όλοι γνωρίζουν αυτή την αποθήκευση / tmp
σε φυσικό μέσο - τρέλα!
Γιατί είναι ανεπιθύμητη η αποθήκευση /tmp
σε φυσικά μέσα; Επειδή τα αρχεία στο /tmp
είναι προσωρινές και οι συσκευές αποθήκευσης είναι πιο αργές από τη μνήμη όπου δημιουργείται το tmpfs. Επιπλέον, τα φυσικά μέσα είναι πιο επιρρεπή στη φθορά όταν αντικαθίστανται από τη μνήμη. Τέλος, τα αρχεία στο /tmp μπορούν να περιέχουν ευαίσθητες πληροφορίες, επομένως η εξαφάνισή τους σε κάθε επανεκκίνηση είναι ένα βασικό χαρακτηριστικό.
Δυστυχώς, ορισμένα σενάρια εγκατάστασης διανομής Linux δημιουργούν το /tmp στη συσκευή αποθήκευσης από προεπιλογή. Μην απελπίζεστε αν αυτό συνέβη και στο σύστημά σας. Ακολουθήστε μερικές απλές οδηγίες με tmpfs
καθίσταται μη διαθέσιμο για άλλους σκοπούς. Με άλλα λόγια, ένα σύστημα με ένα τεράστιο tmpfs και μεγάλα αρχεία μπορεί να ξεμείνει από μνήμη και να κολλήσει. Μια άλλη υπόδειξη: κατά την επεξεργασία ενός αρχείου /etc/fstab
, να θυμάστε ότι πρέπει να τελειώνει με μια νέα γραμμή, διαφορετικά το σύστημά σας δεν θα εκκινήσει.
/proc και /sys
Εκτός /tmp
, VFS (εικονικά συστήματα αρχείων) που είναι πιο γνωστά στους χρήστες Linux /proc
и /sys
. (/dev
βρίσκεται σε κοινόχρηστη μνήμη και δεν έχει file_operations
). Γιατί αυτά τα δύο συστατικά; Ας εξετάσουμε αυτό το ζήτημα.
procfs
δημιουργεί ένα στιγμιότυπο του πυρήνα και των διεργασιών για τις οποίες παρακολουθεί userspace
. Σε /proc
ο πυρήνας εκτυπώνει πληροφορίες σχετικά με το τι έχει διαθέσιμο, όπως διακοπές, εικονική μνήμη και προγραμματιστή. Εκτός, /proc/sys
είναι το μέρος όπου διαμορφώθηκαν οι παράμετροι με την εντολή sysctl
, διαθέσιμο για userspace
. Η κατάσταση και τα στατιστικά στοιχεία των μεμονωμένων διεργασιών εμφανίζονται σε καταλόγους /proc/
.
Εδώ /proc/meminfo
είναι ένα κενό αρχείο που περιέχει ωστόσο πολύτιμες πληροφορίες.
Συμπεριφορά /proc
αρχεία δείχνει πόσο διαφορετικά μπορεί να είναι τα συστήματα αρχείων δίσκων VFS. Από τη μια πλευρά, /proc/meminfo
περιέχει πληροφορίες που μπορούν να προβληθούν με την εντολή free
. Από την άλλη, είναι άδειο! Πώς λειτουργεί; Η κατάσταση θυμίζει το περίφημο άρθρο με τίτλο /proc
, και μάλιστα σε αρχεία /proc
δεν υπάρχει τίποτα όταν κανείς δεν κοιτάζει. Όπως ειπώθηκε
Φαινομενικό κενό procfs
έχει νόημα γιατί οι πληροφορίες εκεί είναι δυναμικές. Μια ελαφρώς διαφορετική κατάσταση με sysfs
. Ας συγκρίνουμε πόσα αρχεία έχουν μέγεθος τουλάχιστον ένα byte /proc
και /sys
.
Procfs
έχει ένα αρχείο, δηλαδή τη διαμόρφωση του εξαγόμενου πυρήνα, η οποία αποτελεί εξαίρεση επειδή χρειάζεται να δημιουργηθεί μόνο μία φορά ανά εκκίνηση. Από την άλλη πλευρά, στο /sys
υπάρχουν πολλά μεγαλύτερα αρχεία, πολλά από τα οποία καταλαμβάνουν μια ολόκληρη σελίδα μνήμης. Συνήθως αρχεία sysfs
περιέχουν ακριβώς έναν αριθμό ή γραμμή, σε αντίθεση με τους πίνακες πληροφοριών που λαμβάνονται από την ανάγνωση αρχείων όπως π.χ /proc/meminfo
.
στόχος sysfs
- παρέχει ιδιότητες ανάγνωσης/εγγραφής αυτού που καλεί ο πυρήνας «kobjects»
στον χώρο χρηστών. Ο μοναδικός στόχος kobjects
είναι η καταμέτρηση συνδέσμων: όταν αφαιρεθεί η τελευταία σύνδεση σε ένα kobject, το σύστημα θα επαναφέρει τους πόρους που σχετίζονται με αυτό. Παρ 'όλα αυτά, /sys
αποτελεί το μεγαλύτερο μέρος των διάσημων
Το σταθερό ABI του πυρήνα περιορίζει τι μπορεί να εμφανιστεί /sys
, όχι αυτό που είναι πραγματικά παρόν τη συγκεκριμένη στιγμή. Η καταχώριση δικαιωμάτων αρχείων στο sysfs παρέχει πληροφορίες σχετικά με τον τρόπο διαμόρφωσης των ρυθμίσεων για συσκευές, λειτουργικές μονάδες, συστήματα αρχείων κ.λπ. μπορεί να ρυθμιστεί ή να διαβαστεί. Το λογικό συμπέρασμα είναι ότι το procfs είναι επίσης μέρος του σταθερού ABI του πυρήνα, αν και αυτό δεν αναφέρεται ρητά στο
Αρχεία σε sysfs
περιγράψτε μια συγκεκριμένη ιδιότητα για κάθε οντότητα και μπορεί να είναι αναγνώσιμη, εγγράψιμη ή και τα δύο. Το "0" στο αρχείο σημαίνει ότι ο SSD δεν μπορεί να αφαιρεθεί.
Ας ξεκινήσουμε το δεύτερο μέρος της μετάφρασης με τον τρόπο παρακολούθησης του VFS χρησιμοποιώντας τα εργαλεία eBPF και bcc, και τώρα περιμένουμε τα σχόλιά σας και σας προσκαλούμε παραδοσιακά να
Πηγή: www.habr.com