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

Βρείτε τον χώρο που μεγάλωσε και τον ρυθμό με τον οποίο μεγάλωσε

Ξεκινήστε με δύο αριθμούς που ξεχνιούνται εύκολα: ελεύθερα blocks και ελεύθερα inodes. Ένα σύστημα αρχείων μπορεί να αναφέρει άφθονο χώρο και παρόλα αυτά να αρνηθεί μια εγγραφή επειδή δεν του έμειναν inodes, κάτι που συμβαίνει όταν μια υπηρεσία δημιουργεί ένα αρχείο ανά συνεδρία. Ζητήστε και τις δύο μετρήσεις στον ίδιο τόμο, γιατί οι απαντήσεις μπορεί να διαφωνήσουν το ίδιο απόγευμα. Κάντε το όσο ο κεντρικός υπολογιστής είναι υγιής, ώστε οι αριθμοί να περιγράφουν κανονική λειτουργία και όχι βλάβη.

df -h /var
df -i /var

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

journalctl --disk-usage

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

Τι κάνει η εναλλαγή σε ένα ανοιχτό αρχείο

Ένα αρχείο καταγραφής είναι ένα όνομα που δείχνει σε ένα inode, και ο χώρος επιστρέφει μόνο όταν κλείσει η τελευταία ανοιχτή λαβή. Μετονομάστε το αρχείο και ο συγγραφέας συνεχίζει να γεμίζει το ίδιο inode· διαγράψτε το και ο συγγραφέας συνεχίζει να γεμίζει ένα inode χωρίς κανένα όνομα. Αυτή η κατάσταση εξηγεί γιατί η φράση «διέγραψα το αρχείο και ο δίσκος έμεινε γεμάτος» περιγράφει περιγραφείς αρχείων και όχι χαλασμένο σύστημα αρχείων. Η επανεκκίνηση του συγγραφέα ή η επιλογή τρόπου εναλλαγής που ανοίγει ξανά το αρχείο είναι αυτό που επιστρέφει πραγματικά τα blocks.

lsof +L1 | head

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

logrotate -d /etc/logrotate.conf

Πού ανήκει το όριο και πόσο μεγάλο πρέπει να είναι

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

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

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

Επαληθεύστε το όριο μετά από επανεκκίνηση

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

systemctl restart systemd-journald
journalctl --disk-usage

Για μια υπηρεσία βασισμένη σε αρχεία, εκτελέστε την εργασία εναλλαγής μία φορά με το χέρι και επιβεβαιώστε ότι το αρχείο αντικαταστάθηκε και ο περιγραφέας άνοιξε ξανά. Ένας συγγραφέας που κρατά την παλιά λαβή περνά έναν επιφανειακό έλεγχο και αποτυγχάνει την επόμενη φορά που ο τόμος θα γεμίσει. Παρακολουθήστε τον ελεύθερο χώρο κατά τη δοκιμή, γιατί ένα αρχείο που μίκρυνε ενώ ο χώρος δεν επέστρεψε σημαίνει ότι το παλιό inode κρατιέται ακόμη.

Συγκρίνετε την επόμενη μέτρηση με αυτή

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

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

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

Σχετικά άρθρα