Μητρώο σύστημα αρχείων. Αξιοπιστία συστήματος δίσκων NT

Το παρόν και το μέλλον του περιοδικού

Υπάρχουν πολλοί ορισμοί των συστημάτων αρχείων ημερολογίου, αλλά ας δώσουμε μια διατύπωση που όλοι μπορούν να κατανοήσουν: journaled σύστημα αρχείων- αυτό είναι ένα σύστημα για όσους έχουν κουραστεί από το πρόγραμμα επιταγές fsckκατά τη φόρτωση. Αυτό είναι επίσης ένα σύστημα για όσους είναι κοντά στην ιδέα των συστημάτων ανοχής σε αστοχίες. Εάν απενεργοποιήσετε λανθασμένα το ρεύμα κανονικό σύστημαόπου δεν υπάρχει καταγραφή, το λειτουργικό σύστημα εντοπίζει αυτό το γεγονός και εκτελεί το βοηθητικό πρόγραμμα ελέγχου ακεραιότητας δίσκου fsck όταν επόμενη μπότα. Αυτό το βοηθητικό πρόγραμμα σαρώνει το σύστημα αρχείων και προσπαθεί να διορθώσει προβλήματα χωρίς να βλάψει τα δεδομένα. Η διαδικασία επαλήθευσης μπορεί να διαρκέσει πολύ. Μερικές φορές το σύστημα αρχείων καταστρέφεται τόσο πολύ που το λειτουργικό σύστημα εκκινεί μόνο σε λειτουργία ενός χρήστη και ζητά από τον χρήστη να πραγματοποιήσει περαιτέρω ανάκτηση.

Πες fsck

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

Τώρα λοιπόν ξέρετε ποιος χρειάζεται συστήματα αρχείων ημερολογίου, γιατί τέτοια συστήματα δεν χρειάζονται ελέγχους fsck; Με λίγα λόγια, γιατί διατηρούν ειδικό ημερολόγιο. Ένα αρχείο καταγραφής είναι ένα αρχείο που είναι μια προσωρινή μνήμη κλήσης στην οποία καταγράφονται όλες οι ενέργειες που σχετίζονται με αλλαγές στο σύστημα αρχείων. Περιοδικά, αυτές οι αλλαγές εφαρμόζονται στο σύστημα αρχείων. Σε περίπτωση αποτυχίας, το αρχείο καταγραφής μπορεί να χρησιμοποιηθεί ως σημείο εκκίνησης για την ανάκτηση μη αποθηκευμένων δεδομένων και την πρόληψη της καταστροφής μεταδεδομένων.

Συνοψίζοντας, ένα ημερολογιακό σύστημα αρχείων είναι ένα σύστημα αρχείων με ανοχή σφαλμάτων στο οποίο οι εντολές τροποποίησης καταγράφονται πριν εκτελεστούν, αποφεύγοντας έτσι την καταστροφή των μεταδεδομένων. (Βλ. Εικόνα 1). Ως συνήθως με το Linux, υπάρχουν πολλές παραλλαγές τέτοιων συστημάτων. Ας το κάνουμε σύντομη κριτικήιστορία των συστημάτων αρχείων και, στη συνέχεια, δείτε τα συστήματα αρχείων που είναι διαθέσιμα σήμερα και τις διαφορές τους.

Τι είναι τα μεταδεδομένα;

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

Εικόνα 1. Ένα τυπικό σύστημα αρχείων με ημερολόγιο.

Ιστορία των Συστημάτων αρχείων Linux Journaled

Η IBM® ήταν η πρώτη που ανέπτυξε ένα σύστημα αρχείων ημερολογίου που ονομάζεται JFS (Journaled Σύστημα αρχείων). Η πρώτη έκδοση του JFS παρουσιάστηκε το 1990 και μοντέρνα έκδοσηυποστηρίζεται σε Linux ως JFS2, που αναπτύχθηκε αργότερα. Το 1994, η Silicon Graphics παρουσίασε το σύστημα αρχείων XFS υψηλής απόδοσης για το λειτουργικό σύστημα IRIX. Το 2001, το XFS μεταφέρθηκε στο Linux. Το 1998, αναπτύχθηκε ένα σύστημα βασισμένο σε αρχεία για συστήματα Amiga. Έξυπνο σύστημαΣύστημα Αρχείων (SFS), το οποίο στη συνέχεια κυκλοφόρησε υπό την άδεια GNU Lesser General Public License (LGPL) και έλαβε υποστήριξη στο Linux 2005. Το πιο ευρέως χρησιμοποιούμενο σύστημα αρχείων είναι το ext3fs (από τα αγγλικά. τρίτο εκτεταμένο σύστημα αρχείων), που αποτελεί επέκταση του συστήματος ext2 με την προσθήκη καταγραφής. Η υποστήριξη ext3fs εμφανίστηκε στο Linux το 2001. Τέλος, το ευρέως χρησιμοποιούμενο ημερολογιακό σύστημα αρχείων ReiserFS έχει ανοίξει πολλά νέα μονοπάτια και ευκαιρίες για ανάπτυξη. Ωστόσο, η ανάπτυξη αυτού του συστήματος έχει επιβραδυνθεί λόγω των νομικών προβλημάτων του συντάκτη του.

Τύποι υλοτομίας

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

ΣΕ λειτουργία εγγραφήςΜόνο τα μεταδεδομένα καταχωρούνται σε ημερολόγιο και τα μπλοκ δεδομένων εγγράφονται απευθείας στο δίσκο. Αυτό συμβάλλει στο απαραβίαστο της δομής του συστήματος αρχείων και προστατεύει από ζημιά, αλλά εξακολουθεί να είναι δυνατή η ζημιά στα ίδια τα δεδομένα (για παράδειγμα, εάν συμβεί σφάλμα συστήματος μετά την εγγραφή μεταδεδομένων στο περιοδικό, αλλά πριν γράψετε ένα μπλοκ δεδομένων). Αποφασίζω το καθορισμένο πρόβλημαεπιτρέπει λειτουργία παραγγελίας. Σε αυτήν τη λειτουργία, καταγράφονται επίσης μόνο τα μεταδεδομένα, αλλά τα ίδια τα δεδομένα γράφονται πριν από την καταγραφή των μεταδεδομένων. Αυτό διασφαλίζει τη συνέπεια των δεδομένων του συστήματος αρχείων μετά την ανάκτηση. Τέλος, είναι δυνατή η είσοδος λειτουργία δεδομένων, στο οποίο καταγράφονται τόσο τα μεταδεδομένα όσο και τα ίδια τα δεδομένα. Αυτή η λειτουργία έχει υψηλότερο επίπεδοαντοχή σε ζημιές και απώλεια δεδομένων, αλλά έχει το μειονέκτημα της χαμηλής απόδοσης, αφού όλα τα δεδομένα γράφονται δύο φορές (πρώτα στο αρχείο καταγραφής και μετά στο δίσκο).

Οι κανόνες για την εφαρμογή αλλαγών που καταγράφονται στο αρχείο καταγραφής μπορεί επίσης να διαφέρουν διαφορετικές προσεγγίσεις. Για παράδειγμα, πότε πρέπει να εφαρμοστούν οι αλλαγές; Πότε γεμίζει το περιοδικό; Ή πότε λήγει ένα συγκεκριμένο timeout;

Journaled File Systems Today

Σήμερα, χρησιμοποιούνται ενεργά πολλά συστήματα αρχείων ημερολογίου, καθένα από τα οποία έχει τα δικά του πλεονεκτήματα και μειονεκτήματα. Παρακάτω είναι τα τέσσερα πιο δημοφιλή συστήματα αρχείων ημερολογίου.

JFS2

JFS2 (επίσης γνωστό ως βελτιωμένο σύστημα αρχείων ημερολογίου) είναι το πρώτο ημερολογιακό σύστημα αρχείων και για πολύ καιρόχρησιμοποιήθηκε στο λειτουργικό σύστημα IBM AIX® πριν μεταφερθεί στο Linux. Το JFS2 είναι ένα σύστημα αρχείων 64-bit που, έχοντας τις ρίζες του από το αρχικό JFS, έχει βελτιωθεί σημαντικά όσον αφορά την επεκτασιμότητα και την υποστήριξη για αρχιτεκτονικές πολλαπλών επεξεργαστών.

Το JFS2 υποστηρίζει ημερολόγιο κατά σειρά, υψηλές επιδόσεις και χρόνους ανάκτησης δευτερολέπτων. Για να βελτιώσει την απόδοση, χρησιμοποιεί μια μέθοδο τοποθέτησης αρχείων που βασίζεται σε έκταση. Τοποθέτηση βάσει έκτασηςσημαίνει την τοποθέτηση του αρχείου σε πολλές συνεχείς ενότητες, αντί για πολλά πανομοιότυπα μπλοκ. Λόγω της συνέχειας, αυτές οι περιοχές παρέχουν περισσότερα γρήγορη ανάγνωσηκαι ηχογράφηση. Πρόσθετο όφελοςεκτάσεις - χαμηλότερο κόστος για εργασία με μεταδεδομένα. Κατά την τοποθέτηση ενός αρχείου σε μπλοκ, καταγράφονται τα μεταδεδομένα κάθε μπλοκ. Εάν χρησιμοποιούνται επεκτάσεις, αλλάζουν τα μεταδεδομένα για τις εκτάσεις, που συνήθως αποτελούνται από πολλαπλά μπλοκ.

Το JFS2 χρησιμοποιεί επίσης δέντρα B+ και για τα δύο αποτελεσματική αναζήτησηκαταλόγους και για τη διαχείριση περιγραφέων έκτασης. Το JFS2 δεν έχει τη δική του πολιτική για την προώθηση αλλαγών στο δίσκο - αντίθετα βασίζεται στο χρονικό όριο λήξης του δαίμονα ενημέρωσης.

XFS

Το XFS είναι ένα άλλο πρώιμο σύστημα αρχείων ημερολογίου, που αναπτύχθηκε αρχικά από τη Silicon Graphics το 1995 για το λειτουργικό σύστημα IRIX. Το 2001, το XFS εφαρμόστηκε στο Linux, που ήταν ήδη ένα καλά μελετημένο και αξιόπιστο σύστημα αρχείων εκείνη την εποχή.

Το XFS χρησιμοποιεί πλήρη διευθυνσιοδότηση 64-bit και παρέχει πολύ υψηλή απόδοση χρησιμοποιώντας δέντρα B+ για τη φιλοξενία καταλόγων και αρχείων. Το XFS αποθηκεύει δεδομένα ως επεκτάσεις, υποστηρίζοντας μεταβλητά μεγέθη έκτασης (από 512 byte έως 64 kilobyte). Μαζί με τις εκτάσεις, το XFS χρησιμοποιεί lazy allocation, η οποία καθυστερεί την κατανομή των μπλοκ μέχρι να έρθει η ώρα να τα γράψετε στο δίσκο. Αυτή η δυνατότητα αυξάνει την πιθανότητα πλήρωσης πολλών μπλοκ δίσκων στη σειρά, καθώς ο αριθμός τους θα είναι γνωστός τη στιγμή της εγγραφής.

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

Τρίτο εκτεταμένο σύστημα αρχείων (ext3fs)

Το τρίτο εκτεταμένο σύστημα αρχείων (ext3fs) είναι το πιο δημοφιλές σύστημα αρχείων ημερολογίου, το οποίο προέκυψε ως εξέλιξη του γνωστού συστήματος αρχείων ext2. Στην πραγματικότητα, είναι συμβατό με το ext2, αφού λειτουργεί σε πανομοιότυπες δομές, αλλά με την προσθήκη ενός κορμού. Επιπλέον, είναι δυνατό να προσαρτήσετε ένα διαμέρισμα ext3 ως ext2 ή να μετατρέψετε το ext2 σε ext3 χρησιμοποιώντας το βοηθητικό πρόγραμμα tune2fs.

Το ext3fs υποστηρίζει και τις τρεις στρατηγικές καταγραφής ( γράψτε πίσω, λειτουργία παραγγελίας και δεδομένων), αλλά χρησιμοποιείται η προεπιλεγμένη λειτουργία παραγγελίας. Η πολιτική για τη μεταφορά δεδομένων καταγραφής στο δίσκο μπορεί να διαμορφωθεί, αλλά αρχικά είναι τέτοια ώστε η μεταφορά πραγματοποιείται είτε όταν το 1/4 του αρχείου καταγραφής είναι πλήρες είτε όταν λήξει ένας από τους χρονοδιακόπτες μεταφοράς.

Ένα από τα κύρια μειονεκτήματα του ext3fs προέρχεται από το γεγονός ότι αρχικά δεν προοριζόταν να είναι ένα σύστημα αρχείων ημερολογίου. Επειδή βασίζεται σε ext2fs, του λείπουν πολλές από τις προηγμένες δυνατότητες που βρίσκονται σε άλλα συστήματα αρχείων (όπως τα extensions). Επίσης συνήθως δείχνει κακή απόδοσησε σύγκριση με τα ReiserFs, JFS και XFS, αλλά χρησιμοποιεί λιγότερη CPU και μνήμη από πολλά άλλα συστήματα αρχείων.

ReiserFS

Τι είναι η συμπίεση απορριμμάτων;

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

Το σύστημα αρχείων ReiserFS σχεδιάστηκε από την αρχή για να είναι journaling. Το 2001, προστέθηκε στον κύριο κλάδο του πυρήνα 2.4 και έγινε το πρώτο σύστημα αρχείων journaling που εμφανίστηκε στο Linux. Η κύρια μέθοδος ημερολογίου είναι η οργάνωση. Υποστηρίζεται η επέκταση μεγέθους συστήματος αρχείων on-the-fly. Το ReiserFS υποστηρίζει επίσης συμπίεση απορριμμάτωνγια να μειώσει δυναμικά τον κατακερματισμό, που του επιτρέπει να ξεπερνά τα ext3fs όταν εργάζεται με μικρά αρχεία.

Το ReiserFS (ονομάζεται επίσης ReiserFS v3) χρησιμοποιεί πολλά σύγχρονες προσεγγίσεις, για παράδειγμα Β+-δέντρα. Η μορφή του συστήματος αρχείων βασίζεται σε ένα μόνο δέντρο B+, καθιστώντας τις λειτουργίες αναζήτησης ιδιαίτερα γρήγορες και επεκτάσιμες. Η πολιτική μετεγκατάστασης αρχείου καταγραφής σε δίσκο εξαρτάται από το μέγεθος του αρχείου καταγραφής και βασίζεται στον αριθμό των μπλοκ που πρέπει να μετεγκατασταθούν.

Η φήμη του ReiserFS έχει πληγεί αρκετές φορές: πιο πρόσφατα από τα προβλήματα του συντάκτη του συστήματος με το νόμο ( λεπτομερείς πληροφορίεςβλέπε ενότητα).

The Future of Journaled File Systems

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

Reiser4

Αφού εισήγαγε με επιτυχία το ReiserFS στον πυρήνα και χρησιμοποιήθηκε σε πολλά Διανομές LinuxΗ Namesys (η εταιρεία πίσω από το ReiserFS) έχει ξεκινήσει να εργάζεται για ένα νέο σύστημα αρχείων με ημερολογιακά στοιχεία, το Reiser4, το οποίο έχει κατασκευαστεί εξ ολοκλήρου από την αρχή και περιλαμβάνει πολλές προηγμένες λειτουργίες.

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

Μετά το κατηγορητήριο του ιδιοκτήτη του Namesys και ταυτόχρονα του συντάκτη του ReiserFS, όλες οι εμπορικές δραστηριότητες γύρω από το Reiser4 ανεστάλησαν.

Τέταρτο εκτεταμένο σύστημα αρχείων

Το τέταρτο εκτεταμένο σύστημα αρχείων (ext4fs) είναι μια περαιτέρω ανάπτυξη του ext3fs. Το Ext4fs προοριζόταν ως αντικατάσταση του ext3fs, έχοντας άμεση και συμβατό προς τα πίσω, αλλά περιλαμβάνει πολλές βελτιώσεις (μερικές από τις οποίες παραβιάζουν αυτήν τη συμβατότητα). Στην πράξη, μπορείτε να προσαρτήσετε ένα διαμέρισμα ext4 ως ext3 και αντίστροφα.

Πρώτον, το ext4fs είναι ένα σύστημα αρχείων 64-bit με υποστήριξη για τεράστιους όγκους (έως 1 exabyte). Μπορεί επίσης να χρησιμοποιήσει επεκτάσεις, αλλά σε αυτήν την περίπτωση χάνει τη συμβατότητα με το ext3fs. Παρόμοια με το XFS και το Reiser4, το ext4fs καθυστερεί την τοποθέτηση μπλοκ στο δίσκο και εμφανίζεται όπως απαιτείται (πράγμα που μειώνει τον κατακερματισμό). Το ημερολόγιο αποθηκεύεται επίσης αθροίσματα ελέγχουπεριεχόμενο για μεγαλύτερη αξιοπιστία. Αντί για Β+- ή Β*-δέντρα, χρησιμοποιείται ιδιαίτερη ποικιλίαΒ-δέντρα, τα λεγόμενα H-δέντρο, που επιτρέπει στους υποκαταλόγους να έχουν πολύ περισσότερα μεγαλύτερο μέγεθος(στο ext3 περιορίζεται στα 32Kb).

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

Μια άλλη ενδιαφέρουσα διαφορά μεταξύ ext4fs και ext3fs είναι η ακρίβεια των χρονικών σφραγίδων αρχείων. Στο ext3, η διάσταση της χρονικής σφραγίδας είναι ένα δευτερόλεπτο. Το Ext4fs κοιτάζει στο μέλλον: με τη συνεχή ανάπτυξη των ταχυτήτων και των διεπαφών επεξεργαστών, περισσότερα ακριβής μέτρηση. Ως εκ τούτου, ένα νανοδευτερόλεπτο λήφθηκε ως διάσταση χρόνου.

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

Προχωρώντας

Τα συστήματα αρχείων με ημερολόγιο παρέχουν αξιοπιστία και προστασία από καταστροφή δεδομένων σε περίπτωση κατάρρευσης του συστήματος ή απώλειας ισχύος. Επιπλέον, ο χρόνος ανάκτησης σε τέτοια συστήματα είναι πολύ πιο γρήγορος από ό,τι στα παραδοσιακά συστήματα αρχείων (για παράδειγμα, αυτά που χρησιμοποιούν fsck). Η ανάπτυξη νέων μεθόδων καταγραφής βασίζεται τόσο στην προηγούμενη εμπειρία που προέρχεται από το JFS και το XFS, όσο και στην αναζήτηση νέων αλγορίθμων και δομών. Δεν είναι απολύτως σαφές πώς θα εξελιχθούν τα ημερολογιακά συστήματα αρχείων στο μέλλον, αλλά η χρησιμότητά τους είναι προφανής και έχουν ήδη γίνει το νέο πρότυπο για συστήματα αρχείων.

Το αρχικό τυπικό σύστημα αρχείων για το Linux ήταν το Ext2fs. Το Ext2 βασίζεται στη δομή i-node. Ο κόμβος I περιέχει πληροφορίες σχετικά με το αρχείο και δείκτες στα μπλοκ δεδομένων στα οποία βρίσκεται το αρχείο. Για τη βελτίωση της απόδοσης I/O, τα δεδομένα βρίσκονται προσωρινά στο ΕΜΒΟΛΟ. Το πρόβλημα παρουσιάζεται εάν παρουσιαστεί μια αποτυχία πριν εγγραφούν τα δεδομένα από τη μνήμη cache στο δίσκο. Αυτό προκαλεί μια ασυνέπεια στο σύστημα αρχείων. Για παράδειγμα, εμφανίζεται ένας σύνδεσμος σε ένα αρχείο που δεν έχει δημιουργηθεί ακόμη στο δίσκο ή τα αρχεία έχουν ήδη διαγραφεί, αλλά οι κόμβοι i-κόμβοι και τα μπλοκ δεδομένων τους παραμένουν στο δίσκο. Fsck (Έλεγχος συστήματος αρχείων – έλεγχος συστήματος αρχείων) – τυπικό πρόγραμμαγια την επίλυση ασυνεπειών. Ο μόνος τρόποςΓια να γίνει αυτό, πρέπει να σαρώσετε ολόκληρο τον δίσκο και να ελέγξετε όλες τις εξαρτήσεις μεταξύ των i-nodes, των μπλοκ δεδομένων και των περιεχομένων του καταλόγου. Με την αύξηση των όγκων του δίσκου, αυτή η διαδικασία άρχισε να γίνεται τεράστιο ποσόχρόνος - σοβαρό πρόβλημαγια διακομιστές που πρέπει να λειτουργούν συνεχώς.

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

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

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

Το Linux έχει τρία κύρια FS με ημερολόγιο: ReiserFS από την Namesys, XFS από SGI και Ext3, που αναπτύχθηκαν από τον Stephen Tweedie, ο οποίος βοήθησε στη δημιουργία του Ext2.

Ο ευκολότερος τρόπος για να βελτιώσετε την απόδοση σε σχέση με τα παραδοσιακά συστήματα Unix είναι να αποφύγετε τη χρήση σχετικές λίστεςή bitmaps, που έχουν πρόβλημα επεκτασιμότητας και δεν είναι κατάλληλα για νέους δίσκους τεράστιων χωρητικοτήτων. Όλα τα νέα συστήματα χρησιμοποιούν Balanced Trees (B-Trees) ή μια παραλλαγή αυτών (B+Trees).

Ένα δέντρο αποτελείται από εσωτερικούς και φυλλικούς κόμβους. Κάθε κόμβος είναι ένα μπλοκ δίσκου. Σε κάθε αντικείμενο (αρχείο, κατάλογος) εκχωρείται ένα μοναδικό κλειδί, παρόμοιο με τον αριθμό inode σε άλλα συστήματα αρχείων. Οι εσωτερικοί κόμβοι αποτελούνται κυρίως από κλειδιά και δείκτες σε θυγατρικούς κόμβους. Ο κόμβος που ξεκινά το δέντρο είναι γνωστός ως ρίζα. Οι κόμβοι που βρίσκονται στο τέλος ενός κλαδιού δέντρου ονομάζονται μερικές φορές φύλλα.

Ο χρόνος αναζήτησης στο B+Trees δεν είναι ανάλογος με τον αριθμό των αντικειμένων (αρχεία σε έναν κατάλογο ή τον αριθμό των μπλοκ σε έναν δίσκο), αλλά με τον λογάριθμο αυτού του αριθμού. Σε ένα ισορροπημένο δέντρο, όλα τα κλαδιά (διαδρομές από τη ρίζα προς το φύλλο) έχουν το ίδιο (ή περίπου το ίδιο) μήκος.

Το ReiserFS βασίζεται στο B+Tree για την οργάνωση αντικειμένων συστήματος αρχείων. Το ReiserFS παρέχει μόνο καταγραφή μεταδεδομένων. Σε περίπτωση μη προγραμματισμένης επανεκκίνησης, τα δεδομένα σε μπλοκ που χρησιμοποιούνται κατά τη διάρκεια μιας αποτυχίας ενδέχεται να καταστραφούν, επομένως το ReiserFS δεν εγγυάται ότι τα δεδομένα θα παραμείνουν ανέπαφα μετά από μια αποτυχία.

Το ReiserFS διαθέτει επίσης μια σειρά από λειτουργίες που στοχεύουν ειδικά στη βελτίωση της απόδοσης με μικρά αρχεία. Ένα από τα ιδιαίτερα χαρακτηριστικάΤο ReiserFS είναι Tail Packing. Το Tail είναι ένα αρχείο του οποίου το μέγεθος είναι μικρότερο από ένα λογικό μπλοκ ή ορισμένα τμήματα αρχείων που καταλαμβάνουν λιγότερο από ένα μπλοκ. Για εξοικονόμηση ελεύθερου χώρου, το ReiserFS χρησιμοποιεί συμπίεση αρχείων ουράς και αυτό επιτρέπει περίπου 5% περισσότερο ελεύθερο χώρο σε σύγκριση με το Ext2. Για να αυξήσει την ταχύτητα, το ReiserFS είναι σε θέση να αποθηκεύει τα περιεχόμενα των αρχείων απευθείας μέσα στο b*tree, και όχι ως δείκτη σε ένα μπλοκ δίσκου.

Το XFS δημιουργήθηκε στις αρχές της δεκαετίας του '90 (1992–1993) από τη Silicon Graphics (τώρα SGI) για υπολογιστές πολυμέσωνμε Irix OS. Το σύστημα αρχείων ήταν πολύ προσανατολισμένο μεγάλα αρχείακαι συστήματα αρχείων. Την 1η Μαΐου 2001, η SGI κυκλοφόρησε την πρώτη έκδοση του XFS για Linux.

Για να αυξήσετε την επεκτασιμότητα των αρχείων Συστήματα XFSχρησιμοποιεί εκτενώς το B+Trees. Το XFS επιτρέπει την αποθήκευση του αρχείου καταγραφής σε άλλη συσκευή μπλοκ.

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

Μέγιστο μέγεθος αρχείου – 9 εκατομμύρια TB

Στο ReiserFS, μια απροσδόκητη επανεκκίνηση μπορεί να οδηγήσει σε α μεταβλητό αρχείοθραύσμα από μια φορά απομακρυσμένο αρχείο. Εκτός από την προφανή απώλεια δεδομένων, αυτό θα μπορούσε υποθετικά να έχει πιο σοβαρές συνέπειες. Η XFS έχει εγγύηση ότι τυχόν "υπογραμμένα" μπλοκ γεμίζουν με μηδενικά. Δεδομένου ότι μπλοκ με μηδέν byte μέσα αρχεία συστήματοςαγνοούνται, εξαλείφεται το κενό ασφαλείας.

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

Το περιοδικό μπορεί να βρίσκεται σε οποιοδήποτε άλλο σύστημα αρχείων. Είναι δυνατό να έχετε πολλαπλά συστήματα αρχείων Ext3 με ένα κοινόχρηστο ημερολόγιο.

Τύποι καταγραφής που υποστηρίζονται από το Ext3, οι οποίοι μπορούν να ενεργοποιηθούν από το αρχείο /etc/fstab:

  • data=journal (λειτουργία καταγραφής πλήρων δεδομένων) – όλα τα νέα δεδομένα πρώτα γράφονται στο περιοδικό και μόνο μετά μεταφέρονται στη μόνιμη θέση του. Σε περίπτωση σφάλματος, το αρχείο καταγραφής μπορεί να ξαναδιαβαστεί, επαναφέροντας τα δεδομένα και τα μεταδεδομένα σε μια συνεπή κατάσταση. Το πιο αργό, αλλά το πιο αξιόπιστο.
  • data=ordered – οι αλλαγές μόνο στα μεταδεδομένα του συστήματος αρχείων καταγράφονται, αλλά λογικά τα μεταδεδομένα και τα μπλοκ δεδομένων ομαδοποιούνται σε μια ενιαία ενότητα που ονομάζεται συναλλαγή. Πριν εγγραφούν νέα μεταδεδομένα στο δίσκο, πρώτα εγγράφονται τα συσχετισμένα μπλοκ δεδομένων. Αυτή η λειτουργία έχει οριστεί από προεπιλογή. Κατά την προσάρτηση δεδομένων στο τέλος ενός αρχείου, η λειτουργία data=ordered είναι εγγυημένη για να διασφαλιστεί η ακεραιότητα (όπως με τη λειτουργία πλήρους καταγραφής δεδομένων). Ωστόσο, εάν τα δεδομένα εγγράφονται σε ένα αρχείο πάνω από υπάρχοντα, τότε υπάρχει η δυνατότητα ανάμειξης «πρωτότυπων» μπλοκ με τροποποιημένα. Αυτό είναι αποτέλεσμα του data=ordered not tracking records where νέο μπλοκβρίσκεται πάνω από το υπάρχον και δεν προκαλεί τροποποίηση μεταδεδομένων.
  • data=writeback (μόνο μεταδεδομένα) – εγγράφονται μόνο αλλαγές στα μεταδεδομένα του συστήματος αρχείων. Πλέον γρήγορη μέθοδοςξύλευση. Το ίδιο όπως χρησιμοποιείται στο XFS και στο ReiserFS.

Αρχείο Σύστημα NTFSξεκίνησε την ύπαρξή του με τα Windows NT 3.5 το 1993. Μπορεί να διαχειριστεί δίσκους μεγέθους έως και αρκετών εκατοντάδων terabyte.

Κάθε αρχείο σε έναν τόμο NTFS αντιπροσωπεύεται από μια καταχώρηση ειδικό αρχείο, που ονομάζεται κύριος πίνακας αρχείων (MFT) κύριο αρχείοτραπέζι). Η πρώτη καταχώρηση σε αυτόν τον πίνακα περιγράφει τον ίδιο τον κύριο πίνακα αρχείων.

Ακολουθεί το ρεκόρ καθρέφτη MFT. Εάν η πρώτη καταχώριση MFT είναι κατεστραμμένη, τότε το NTFS διαβάζει τη δεύτερη καταχώρηση για να βρει το κατοπτρικό αρχείο MFT.

Η τρίτη εγγραφή MFT είναι το αρχείο καταγραφής. περιέχει μια λίστα βημάτων συναλλαγής που χρησιμοποιούνται από το σύστημα αρχείων καταγραφής για την ανάκτηση αρχείων σε περίπτωση αποτυχίας. Η δέκατη έβδομη και οι επόμενες εγγραφές στον πίνακα του κύριου αρχείου χρησιμοποιούνται από τα ίδια τα αρχεία και τους καταλόγους.

Τα μικρά αρχεία και οι κατάλογοι μπορούν να περιέχονται εξ ολοκλήρου σε μια καταχώρηση του πίνακα κύριου αρχείου. Οι μεγάλοι κατάλογοι είναι οργανωμένοι σε δέντρα B, με καταχωρήσεις με δείκτες σε εξωτερικά συμπλέγματα που περιέχουν καταχωρήσεις καταλόγου που δεν μπορούσαν να γραφτούν στη δομή MFT.

NTFS Journaling

Το NTFS χρησιμοποιεί journaling λογικές δομές, και όχι δεδομένα χρήστη - εξ ου και η φράση ότι η ασφάλεια των δεδομένων δεν είναι εγγυημένη, αλλά, ωστόσο, θα διατηρηθεί η σωστή κατάσταση του ίδιου του συστήματος. Το γεγονός ότι το NTFS δεν καταγράφει δεδομένα αρχείου ημερολογίου οδηγεί στην πράξη σε ένα σενάριο απώλειας δεδομένων - στην ίδια υποθετική περίπτωση εγγραφής τριών megabyte, εάν η διαδικασία εγγραφής αποτύχει, δεν θα είναι ποτέ δυνατό να προσδιοριστεί ποιο μέρος των δεδομένων γράφτηκε και που παρέμεινε αναλλοίωτο. Οι λειτουργίες που ωστόσο καταγράφονται από το σύστημα είναι λειτουργίες με τις δομές του ίδιου του συστήματος, δηλαδή με αρχεία και καταλόγους: προσθήκη αρχείων, μετονομασία, μετακίνηση, δημιουργία και διαγραφή (απελευθέρωση ελεύθερου χώρου). Καταγράφονται επίσης οι λειτουργίες ανασυγκρότησης - δηλαδή η μετακίνηση θραυσμάτων αρχείων. Με μια λέξη, τα πάντα λογικές πράξειςκαταγεγραμμένος.

Καθυστερημένη ηχογράφηση και σημεία ελέγχουξύλευση

Είναι γνωστό ότι οποιαδήποτε σύγχρονο σύστημανα επιταχύνει λειτουργίες αρχείωναναγκάζεται να χρησιμοποιήσει προσωρινή αποθήκευση, συμπεριλαμβανομένης της προσωρινής αποθήκευσης των λειτουργιών εγγραφής. Η λεγόμενη τεμπέλης εγγραφή είναι μια αρχή προσωρινής αποθήκευσης στην οποία τα δεδομένα που προορίζονται να εγγραφούν στο δίσκο αποθηκεύονται στην κρυφή μνήμη για κάποιο χρονικό διάστημα και αποθηκεύονται φυσικά μόνο κατά τη διάρκεια του ελεύθερου χρόνου από άλλες δραστηριότητες. Το Lazy writes βελτιώνει σημαντικά την αποτελεσματικότητα των λειτουργιών του δίσκου, καθώς τέτοια προσωρινή αποθήκευση ομαδοποιεί πολλές λειτουργίες σε μία - αυτό είναι ιδιαίτερα αποτελεσματικό εάν οι εγγραφές εκτελούνται σε συμπαγείς περιοχές του δίσκου. Ένα άλλο πλεονέκτημα της τεμπέλης γραφής είναι ότι δεν παρεμβαίνει σε πιο απαραίτητες λειτουργίες ανάγνωσης και γράφει μόνο όταν το σύστημα είναι ελεύθερο και δεν χρειάζεται πρόσβαση στο δίσκο για άλλες ανάγκες. Πώς να συμβιβάσετε την καθυστερημένη γραφή με την καταγραφή; Αυτή είναι μια αρκετά δύσκολη ερώτηση, καθώς η αναβολή μιας εγγραφής καθιστά δυνατή την απώλεια των δεδομένων που ήταν στην ουρά για φυσικό αρχείοκαι δεν είχα χρόνο να γράψω στο δίσκο πριν την αποτυχία. Το πιο δυσάρεστο εδώ δεν είναι καν η απώλεια δεδομένων, αλλά το γεγονός ότι υπάρχει αναντιστοιχία στον χρόνο εγγραφής: ορισμένες περιοχές εξυπηρέτησης μπορούν να ενημερωθούν, αλλά ορισμένες σχετικές περιοχές δεν μπορούν ακόμη, καθώς η ενημέρωσή τους μπορεί να καθυστερήσει για άλλα δύο δευτερόλεπτα. και δεν θα πραγματοποιηθεί λόγω αστοχίας.

Το NTFS ξεπερνά αυτά τα προβλήματα ενσωματώνοντας ουσιαστικά τις τεμπέλικες εγγραφές και το ημερολόγιο. Όταν προσπαθείτε να ξεκινήσετε μια καταγεγραμμένη λειτουργία, η πρόθεση γράφεται αμέσως στο αρχείο καταγραφής - για παράδειγμα, για να διαγράψετε ένα αρχείο. Αυτό συμβαίνει χωρίς καθυστέρηση - σε αυτό το στάδιο η τεμπέλης γραφή δεν λειτουργεί: αυτό είναι ένα κόστος της παρουσίας καταγραφής που δεν μπορεί να αποφευχθεί. Αλλά όλες οι άλλες λειτουργίες βρίσκονται ήδη σε λειτουργία καθυστερημένης λειτουργίας - δηλαδή, μπορεί να πραγματοποιηθούν εν μέρει ή να μην πραγματοποιηθούν καθόλου. Η μόνη καθυστερημένη λειτουργία, η λειτουργία της οποίας είναι κάπως διαφορετική από μια απλή εγγραφή, είναι η εγγραφή στο αρχείο καταγραφής σχετικά με την επιτυχή ολοκλήρωση προηγούμενων συναλλαγών, το λεγόμενο σημείο ελέγχου. Σε ορισμένα χρονικά διαστήματα - συνήθως κάθε λίγα δευτερόλεπτα - το σύστημα πρέπει να ξεπλένει απολύτως όλες τις καθυστερημένες λειτουργίες στο δίσκο. Αφού ολοκληρωθεί αυτή η λειτουργία, τα ακόλουθα γράφονται στο αρχείο καταγραφής: απλούστερη σημειογραφία- ένα σημείο ελέγχου, το οποίο υποδεικνύει ότι όλες οι προηγούμενες λειτουργίες εκτελέστηκαν σωστά σε όλα τα επίπεδα - τόσο λογικά όσο και φυσικά.

Αυτός ο τρόπος λειτουργίας - με τη βοήθεια αρχείων και σημείων ελέγχου - από τη μια πλευρά, εξακολουθεί να εγγυάται πλήρη σωστή λειτουργίαη καταγραφή, και από την άλλη πλευρά, πρακτικά δεν οδηγεί σε επιβράδυνση της εργασίας: ο έλεγχος γίνεται, σχεδόν αμέσως, και η εγγραφή στο αρχείο καταγραφής σχετικά με την έναρξη της λειτουργίας αντιστοιχεί στο κόστος εργασίας της εγγραφής των ίδιων των δεδομένων χωρίς καθυστερημένη αποθήκευση στην κρυφή μνήμη. Η πραγματική εγγραφή, που πραγματοποιήθηκε αργότερα, στη συντριπτική πλειονότητα των περιπτώσεων δεν παρεμβαίνει σε καμία λειτουργία και δεν βλάπτει την απόδοση του συστήματος.

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


Πολλές λειτουργίες απαιτούν ταυτόχρονες αλλαγές σε πολλές δομές συστήματος αρχείων ( μεταδεδομένα. Ένα απλό παράδειγμα: όταν δημιουργείτε έναν σκληρό σύνδεσμο, πρέπει να αυξήσετε ταυτόχρονα τον αριθμό των συνδέσμων προς το inode και να αλλάξετε τα περιεχόμενα του καταλόγου στον οποίο δημιουργείται ο σύνδεσμος Δεν μπορείτε να κάνετε μόνο μία από αυτές τις λειτουργίες - τα περιεχόμενα του συστήματος αρχείων θα είναι λάθος.


Κατά τη διάρκεια της κανονικής λειτουργίας του συστήματος αρχείων, μια τέτοια πολύπλοκη λειτουργία εκτελείται πάντα στο σύνολό της, εκτός εάν ο κώδικας υλοποίησης του συστήματος αρχείων περιέχει κρίσιμα σφάλματα. Ωστόσο, εάν υπάρχει μη φυσιολογική επανεκκίνηση ή αποτυχία υλικούαυτή η κατάσταση είναι πολύ πραγματική.


Δεδομένου ότι μετά από μια επανεκκίνηση δεν γνωρίζουμε ποιες λειτουργίες εκτελέστηκαν, τι ήταν ημιτελές, αλλά γνωρίζουμε μόνο ότι ο δίσκος δεν αποσυναρμολογήθηκε σωστά (η λεγόμενη dirty flag επαναφέρεται), πρέπει να αναλύσουμε το σύστημα αρχείων σε ολόκληρο τον δίσκο , και έτσι, εντοπίστε όλα τα σφάλματα στο σύστημα αρχείων και διορθώστε τα. Φυσικά, δεν είναι πάντα δυνατό να γίνει αυτό αυτόματα (αφύσικη νοημοσύνη, δυστυχώς, κανείς δεν μπόρεσε ακόμη να διδάξει ικανότητες διόρασης), επομένως το ίδιο fsck.ext2 μετά από μια μη φυσιολογική επανεκκίνηση μπορεί να απαιτεί χειροκίνητη παρέμβαση.


Όσοι έχουν τρέξει το fsck σε ένα διαμέρισμα 100-200 G (που δεν είναι καθόλου ασυνήθιστο τώρα) καταλαβαίνουν πολύ καλά ότι υπάρχει λίγη ευχαρίστηση σε αυτό. Οι διαχειριστές συστοιχιών πολλών terabyte, για ένα επιπλέον λεπτό αδράνειας μπορούν «κατά λάθος» να τους σκίσουν το κεφάλι στη λέξη fsck, να αρπάξουν βαλεριάνα ή να ζητήσουν να μην ορκιστούν με τέτοια λόγια παρουσία τους.


Για να λυθεί αυτό το πρόβλημα, εφευρέθηκε μια λαμπρή ιδέα εδώ και πολύ καιρό (αν ξέρει κανείς πότε και από ποιον, παρακαλώ να μου πει) - αρχικάγράψτε κάποια περιγραφή της προγραμματισμένης λειτουργίας στο δίσκο και μόνο τότε εκτελέστε την. Στη συνέχεια, θα είναι δυνατό να μην ελέγξετε ολόκληρο τον δίσκο για ορθότητα, αλλά απλώς να περιοριστείτε στην προβολή των περιεχομένων του αρχείου καταγραφής και, εάν η λειτουργία δεν ολοκληρώθηκε, τότε επαναφέρετέ τον. Για να το κάνετε αυτό, δεν χρειάζεται να εκτελέσετε το fsck - αυτό γίνεται από το ίδιο το πρόγραμμα οδήγησης του συστήματος αρχείων.


Συνοψίζοντας, το μόνο πράγμα που μπορεί και πρέπει να κάνει ένα ημερολογιακό σύστημα αρχείων είναι να εξοικονομήσει χρόνο στο fsck. Συνεπώς, η συνέπεια των μεταδεδομένων του συστήματος αρχείων είναι εγγυημένη, ούτε περισσότερο ούτε λιγότερο.


Το τίμημα αυτής της ευχαρίστησης: έχουμε μια μικρή (συνήθως μετρημένη σε δεκάδες megabyte) περιοχή δίσκου, η οποία αντιπροσωπεύει μέγιστο φορτίο, δηλαδή μέγιστη απόδοση, που μετράται στον αριθμό των λειτουργιών i/o ανά δευτερόλεπτο, μειώνεται. Λοιπόν, φυσικά, καταναλώνεται λίγος χώρος στο δίσκο, που στην εποχή των τιμών στους δίσκους< 1$/гигабайт никого не волнует.

Καταγραφή δεδομένων

Όπως παρατηρήσατε, οι λειτουργίες με μεταδεδομένα συνήθως γράφονται στο αρχείο καταγραφής. Ωστόσο, μπορείτε να κάνετε το ίδιο με τα δεδομένα.


Από όσο γνωρίζω, μόνο το ext3 με την παράμετρο data=journal μπορεί να πραγματοποιήσει καταγραφή δεδομένων στο Linux.


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


Αυτό το εργαλείο επίσης δεν εγγυάται την ασφάλεια των δεδομένων, ωστόσο, από την εμπειρία μου προσωπική εμπειρίαΗ χρήση ext3 με data=journal είναι το πιο αξιόπιστο σύστημα αρχείων.

Εκτέλεση

Ένας προσεκτικός αναγνώστης πιθανότατα θα έχει παρατηρήσει ότι η χρήση ενός ημερολογίου δημιουργεί ένα ανομοιόμορφο φορτίο στο δίσκο - μια μικρή (σε σύγκριση με το συνολικό μέγεθος του συστήματος αρχείων) περιοχή αντιπροσωπεύει έναν δυσανάλογο αριθμό λειτουργιών.


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


Δεύτερον, μπορείτε να χρησιμοποιήσετε ειδικές κάρτεςμη πτητική μνήμη (για παράδειγμα UMEM, που, δυστυχώς, δεν έχω δει προς πώληση στη Ρωσία), οι οποίες είναι επίσης αισθητά ταχύτερες από τους συμβατικούς δίσκους (αλλά έχουν μικρό μέγεθος μνήμης).


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

Κόλπα

Όπως έχετε ήδη δει, το περιοδικό μπορεί επίσης να προσφέρει αύξηση ταχύτητας. Υπάρχουν μερικά ακόμη έξυπνα κόλπα που ένα σύστημα αρχείων ημερολογίου μπορεί να χρησιμοποιήσει για να προχωρήσει μεγαλύτερη μεγέθυνσηεκτέλεση:

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

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

Ελαττώματα

Όπως είπα ήδη, το αρχείο καταγραφής δεν είναι πανάκεια και τα δεδομένα δεν αποθηκεύονται καθόλου. Ωστόσο, πολλοί άνθρωποι έχουν μια ψευδή αίσθηση ασφάλειας από τη χρήση συστημάτων αρχείων με ημερολόγιο - φυσικά, μπορείτε να επανεκκινήσετε το μηχάνημα με επαναφορά και δεν θα ορκιστεί καν κατά την εκκίνηση!


Ναι, δεν θα ορκιστεί. Και θα είναι απολύτως σωστό από την άποψη κάποιου συστήματος αρχείων fsck. Μόνο τα δεδομένα ενδέχεται να παραμένουν μόνο με αποκόμματα.


Ας πούμε reiserfs in παρόμοιες καταστάσειςΜπορεί κάλλιστα να αφήσει σκουπίδια στα τροποποιημένα αρχεία (αυθαίρετα δεδομένα που ήταν στο μπλοκ που έχει εκχωρηθεί για το αρχείο). Κάτι που στην ουσία σημαίνει πολύ πιθανή τυχαία διαρροή πληροφοριών.


Το XFS δρα πιο σωστά - γράφει τέτοια μπλοκ ως μηδενικά. Κάτι που συχνά σοκάρει τους χρήστες. Ειδικά οι λάτρεις των reiserfs, που δεν θα γράφουν μηδενικά.


Ως αποτέλεσμα, τα reiserf είναι πιο πιθανά θα σώσειτροποποιήσεις και το XFS θα κάνει ό,τι καλύτερο μπορεί για να αποφύγει τα σκουπίδια στα αρχεία και τις διαρροές δεδομένων - απλώς ελαφρώς διαφορετικές στρατηγικές. Το αποτέλεσμα είναι το ίδιο - τα δεδομένα μπορεί να χαθούν και δεν θα το ξέρετε καν. Μέχρι που συναντάς ένα αρχείο που κανείς δεν έχει αγγίξει εδώ και ένα χρόνο (ήταν στο αρχείο), και που ξαφνικά αποδεικνύεται ότι έχει γεμίσει με σκουπίδια ή μηδενικά.


Το ext3 με ενεργοποιημένη την καταγραφή δεδομένων δεν υποφέρει από τέτοιες δυνατότητες. Ωστόσο, χάνει αισθητά σε απόδοση.


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

Κατώτατη γραμμή

Ένα ημερολογιακό σύστημα αρχείων απλώς κάνει τη διαχείριση λίγο πιο εύκολη, αλλά δεν είναι μια μαγική θεραπεία για την απώλεια δεδομένων λόγω μη φυσιολογικών επανεκκινήσεων. Επομένως, εάν δεν χρησιμοποιείτε UPS και δεν κάνετε Backup, τότε αργά ή γρήγορα τα δεδομένα σας θα καλυφθούν με μια χάλκινη λεκάνη, την οποία ειλικρινά ΔΕΝ σας εύχομαι. Και αν θέλετε, μπορείτε να χρησιμοποιήσετε συστήματα αρχείων με ημερολόγιο ως μέσο αύξησης της παραγωγικότητας.


Ποιος αγόρασε UPS Και η δημιουργία αντιγράφων ασφαλείας κάνει ότι τα δεδομένα είναι πάντα άθικτα


(Γ) Ντένις Σμιρνόφ 5 Νοεμβρίου 2004
Η δημοσίευση αυτού του εγγράφου σε άλλους πόρους του Διαδικτύου, καθώς και σε έντυπες εκδόσεις, δεν επιτρέπεται.

Το NTFS είναι ένα σύστημα ανοχής σε σφάλματα που μπορεί εύκολα να επαναφέρει τον εαυτό του στη σωστή κατάσταση σε περίπτωση σχεδόν οποιασδήποτε πραγματικής αποτυχίας. Οποιοδήποτε σύγχρονο σύστημα αρχείων βασίζεται στην έννοια του συναλλαγή- μια ενέργεια που εκτελείται πλήρως και σωστά ή δεν εκτελείται καθόλου. Το NTFS απλά δεν έχει ενδιάμεσες (λανθασμένες ή λανθασμένες) καταστάσεις - το μέγεθος της αλλαγής δεδομένων δεν μπορεί να χωριστεί σε πριν και μετά την αποτυχία, φέρνοντας καταστροφή και σύγχυση - είτε διαπράττεται είτε ακυρώνεται.

Παράδειγμα 1: τα δεδομένα εγγράφονται στο δίσκο. Ξαφνικά αποδεικνύεται ότι δεν ήταν δυνατό να γράψουμε στο μέρος όπου μόλις είχαμε αποφασίσει να γράψουμε το επόμενο κομμάτι δεδομένων - φυσική ζημιά στην επιφάνεια. Η συμπεριφορά του NTFS σε αυτήν την περίπτωση είναι αρκετά λογική: η συναλλαγή εγγραφής επαναφέρεται πλήρως - το σύστημα συνειδητοποιεί ότι η εγγραφή δεν πραγματοποιήθηκε. Η τοποθεσία επισημαίνεται ως αποτυχημένη και τα δεδομένα εγγράφονται σε άλλη τοποθεσία - ξεκινά μια νέα συναλλαγή.

Παράδειγμα 2: Μια πιο περίπλοκη περίπτωση είναι όταν τα δεδομένα εγγράφονται στο δίσκο. Ξαφνικά, η τροφοδοσία διακόπτεται και το σύστημα επανεκκινείται. Σε ποια φάση σταμάτησε η εγγραφή, πού υπάρχουν δεδομένα και πού όχι; Ένας άλλος μηχανισμός συστήματος έρχεται στη διάσωση - το αρχείο καταγραφής συναλλαγών. Το γεγονός είναι ότι το σύστημα, συνειδητοποιώντας την επιθυμία του να γράψει στο δίσκο, σημείωσε αυτήν την κατάσταση στο μετααρχείο $LogFile. Κατά την επανεκκίνηση, αυτό το αρχείο εξετάζεται για την παρουσία ημιτελών συναλλαγών που διακόπηκαν από ατύχημα και το αποτέλεσμα των οποίων είναι απρόβλεπτο - όλες αυτές οι συναλλαγές ακυρώνονται: το μέρος όπου έγινε η εγγραφή επισημαίνεται ξανά ως δωρεάν, ευρετήρια και στοιχεία MFT επιστρέφουν στην κατάσταση στην οποία βρίσκονταν πριν από την αποτυχία και το σύστημα στο σύνολό του παραμένει σταθερό. Λοιπόν, τι γίνεται αν προέκυψε σφάλμα κατά την εγγραφή στο αρχείο καταγραφής; Είναι επίσης εντάξει: η συναλλαγή είτε δεν έχει ξεκινήσει ακόμα (υπάρχει μόνο μια προσπάθεια καταγραφής των προθέσεων για την πραγματοποίησή της), είτε έχει ήδη τελειώσει - δηλαδή, γίνεται προσπάθεια να καταγραφεί ότι η συναλλαγή έχει ήδη πραγματοποιηθεί ολοκληρώθηκε το. Στην τελευταία περίπτωση, στην επόμενη εκκίνηση, το ίδιο το σύστημα θα καταλάβει πλήρως ότι στην πραγματικότητα όλα γράφτηκαν σωστά ούτως ή άλλως και δεν θα δώσει προσοχή στην "ημιτελή" συναλλαγή.

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

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

Συμπίεση

Τα αρχεία NTFS έχουν ένα πολύ χρήσιμο χαρακτηριστικό - "συμπιεσμένο". Το γεγονός είναι ότι το NTFS έχει ενσωματωμένη υποστήριξη για συμπίεση δίσκου - κάτι για το οποίο έπρεπε προηγουμένως να χρησιμοποιήσετε το Stacker ή το DoubleSpace. Οποιοδήποτε αρχείο ή κατάλογος μπορεί να αποθηκευτεί ξεχωριστά στο δίσκο σε συμπιεσμένη μορφή - αυτή η διαδικασία είναι απολύτως διαφανής για τις εφαρμογές. Η συμπίεση αρχείων έχει πολύ υψηλή ταχύτητα και μόνο μια μεγάλη αρνητική ιδιότητα - τον τεράστιο εικονικό κατακερματισμό των συμπιεσμένων αρχείων, που, ωστόσο, δεν ενοχλεί πραγματικά κανέναν. Η συμπίεση πραγματοποιείται σε μπλοκ των 16 συστάδων και χρησιμοποιεί τα λεγόμενα "εικονικά συμπλέγματα" - και πάλι μια εξαιρετικά ευέλικτη λύση που σας επιτρέπει να επιτύχετε ενδιαφέροντα εφέ- για παράδειγμα, το μισό αρχείο μπορεί να συμπιεστεί, αλλά το μισό όχι. Αυτό επιτυγχάνεται λόγω του γεγονότος ότι η αποθήκευση πληροφοριών σχετικά με τη συμπίεση ορισμένων θραυσμάτων είναι πολύ παρόμοια με τον κανονικό κατακερματισμό αρχείων: για παράδειγμα, μια τυπική εγγραφή της φυσικής διάταξης για ένα πραγματικό, ασυμπίεστο αρχείο:

συμπλέγματα αρχείων από 1 έως 43 αποθηκεύονται σε συμπλέγματα δίσκων ξεκινώντας από 400

Τα συμπλέγματα αρχείων από το 44 έως το 52 αποθηκεύονται σε συμπλέγματα δίσκων ξεκινώντας από το 8530...

Φυσική διάταξη ενός τυπικού συμπιεσμένου αρχείου:

Τα συμπλέγματα αρχείων 1 έως 9 αποθηκεύονται σε συμπλέγματα δίσκων ξεκινώντας από το 400

Τα συμπλέγματα αρχείων 10 έως 16 δεν αποθηκεύονται πουθενά

συμπλέγματα αρχείων από 17 έως 18 αποθηκεύονται σε συμπλέγματα δίσκων ξεκινώντας από το 409

Τα συμπλέγματα αρχείων από το 19 έως το 36 δεν αποθηκεύονται πουθενά

Είναι σαφές ότι συμπιεσμένο αρχείοέχει «εικονικά» συμπλέγματα, στα οποία δεν υπάρχουν πραγματικές πληροφορίες. Μόλις το σύστημα δει τέτοια εικονικά συμπλέγματα, καταλαβαίνει αμέσως ότι τα δεδομένα από το προηγούμενο μπλοκ, πολλαπλάσιο του 16, πρέπει να αποσυμπιεστούν και τα δεδομένα που προκύπτουν θα γεμίσουν απλώς τα εικονικά συμπλέγματα - αυτός, στην πραγματικότητα, είναι ολόκληρος ο αλγόριθμος .