Κατάλογος άρθρου
Πριν από μερικές μέρες, ένας φίλος μου έστειλε μήνυμα αργά το βράδυ λέγοντας ότι ο διακομιστής του είχε καταρρεύσει.
Τα συγκεκριμένα συμπτώματα ήταν ιδιαίτερα παράξενα: ο ιστότοπος άρχισε ξαφνικά να εμφανίζει σφάλματα, δεν ήταν δυνατή η εγγραφή αρχείων καταγραφής και η δημιουργία νέων αρχείων έδειχνε αμέσως ότι ο δίσκος ήταν γεμάτος.
Αλλά όταν έλεγξε με το `df -h`, έμεινε έκπληκτος όταν διαπίστωσε ότι ο δίσκος είχε σαφώς δεκάδες gigabytes ελεύθερου χώρου. Πώς θα μπορούσε να είναι γεμάτος;
Του είπα εκείνη τη στιγμή, «Αδερφέ, δεν έχεις απλώς πολύ χώρο αποθήκευσης, το Inode σου είναι υπερφορτωμένο».
Απάντησε με ένα ερωτηματικό: Τι ακριβώς είναι ένα Inode;
Στην πραγματικότητα, πολλοί άνθρωποι αντιδρούν ακριβώς με τον ίδιο τρόπο που αντιδρούσε εκείνος όταν έπεσαν για πρώτη φορά σε αυτή την παγίδα, επειδή κανείς στο σχολείο δεν τους δίδαξε ποτέ αυτά τα πράγματα.
Ας διευκρινίσουμε πρώτα τι είναι ένα Inode.
Σκεφτείτε το σαν μια κάρτα ευρετηρίου βιβλιοθήκης και θα είναι εύκολο να την καταλάβετε.
Ο χώρος στο δίσκο είναι σαν μια βιβλιοθήκη. Το πόσα βιβλία μπορείτε να βάλετε σε αυτήν εξαρτάται από τη χωρητικότητά του, κάτι που είναι εύκολο να καταλάβει ο καθένας.
Ένα inode είναι σαν μια κάρτα ευρετηρίου για κάθε βιβλίο, που καταγράφει το όνομά του, την τοποθεσία του και ποιος το μετέφερε.
Στο Linux , κάθε αρχείο και κάθε κατάλογος πρέπει να καταλαμβάνει ένα inode, ανεξάρτητα από το πόσο μικρό είναι το αρχείο.
Ακόμα κι αν πρόκειται για ένα κενό αρχείο, το σύστημα θα καταναλώσει μια κάρτα ευρετηρίου για αυτό.
Το σύστημα έχει ένα όριο στον συνολικό αριθμό αρχείων που μπορεί να δημιουργήσει. Αυτό το όριο είναι ο συνολικός αριθμός κόμβων.
Μόλις εξαντληθεί το inode, ακόμα κι αν ο δίσκος σας έχει ακόμα εκατοντάδες gigabytes ελεύθερου χώρου, το λειτουργικό σύστημα θα αρνηθεί να δημιουργήσει νέα αρχεία.
Δεν είναι δυνατή η εγγραφή αρχείων καταγραφής, η δημιουργία προσωρινής μνήμης και ο ιστότοπος καταρρέει εντελώς — αυτή είναι η παράξενη σκηνή που βλέπετε.
Ειλικρινά, αυτή είναι μια πολύ δύσκολη κατάσταση επειδή το μήνυμα σφάλματος αποστέλλεται από μια τοποθεσία που δεν κοιτάτε.
Το πρώτο κόλπο είναι να χρησιμοποιήσετε την εντολή `df -i` για να έχετε μια γρήγορη επισκόπηση.
Στο περιβάλλον HestiaCP , μπορείτε απλώς να συνδεθείτε μέσω SSH στο τερματικό και να πληκτρολογήσετε αυτήν τη γραμμή.
df -iΘα εμφανίσει τον συνολικό αριθμό των innodes, τον αριθμό που χρησιμοποιήθηκε και τον αριθμό που απομένει για κάθε τοποθετημένο διαμέρισμα.
Στην έξοδο, υπάρχει μια στήλη που ονομάζεται IUse%, η οποία είναι η βασική μέτρηση που πρέπει να προσέξετε.
Εάν το IUse% ενός διαμερίσματος φτάσει το 100%, ακόμα κι αν αυτό το διαμέρισμα εξακολουθεί να έχει άφθονο χώρο στο δίσκο, δεν θα είναι πλέον σε θέση να δημιουργήσει νέα αρχεία ή αρχεία καταγραφής.
Πρότεινα στον φίλο μου να το εκτελέσει πρώτα, ώστε να μπορέσει να εντοπίσει αν το πρόβλημα οφειλόταν στο Inode σε ένα δευτερόλεπτο , κάτι που θα ήταν πολύ πιο γρήγορο από το να μαντέψει.
Η δεύτερη μέθοδος είναι να χρησιμοποιήσετε την συνάρτηση `find` για να μετρήσετε με ακρίβεια έναν συγκεκριμένο χρήστη.
Αφού επιβεβαιώσουμε ότι το πρόβλημα οφείλεται στον κόμβο, το επόμενο βήμα είναι να διαπιστώσουμε ποιος καταναλώνει υπερβολικά την κάρτα ευρετηρίου.
Το HestiaCP διαθέτει ξεχωριστό αρχικό κατάλογο για κάθε χρήστη. Μπορείτε απλώς να μετρήσετε τον συνολικό αριθμό αρχείων και καταλόγων σε έναν συγκεκριμένο κατάλογο ιστότοπου.
find /home/用户名/web/你的域名/public_html | wc -lΑντικαταστήστε τα "όνομα χρήστη" και "το όνομα τομέα σας" με την πραγματική σας διαδρομή. Ο καθαρός αριθμός που επιστρέφεται από το τερματικό είναι το άθροισμα όλων των αρχείων και των φακέλων σε αυτόν τον κατάλογο.
Κάθε αρχείο ή κατάλογος αντιστοιχεί σε ένα inode, επομένως αυτός ο αριθμός αντιπροσωπεύει τη χρήση του inode.

Αν δεν μπορείτε να ελέγξετε το καθένα ξεχωριστά και θέλετε να δείτε την κατανομή χρήσης όλων των χρηστών σε ολόκληρο τον ιστότοπο ταυτόχρονα, υπάρχει επίσης μια εντολή ενός μόνο βρόχου.
for d in /home/*; do echo -n "$d: "; find "$d" 2>/dev/null | wc -l; doneΑυτή η γραμμή θα εμφανίσει τον συνολικό αριθμό αρχείων σε κάθε κατάλογο χρήστη στην περιοχή /home, διευκολύνοντας τον εντοπισμό του καταλόγου χρήστη που έχει ασυνήθιστα υψηλό αριθμό αρχείων.
Η τρίτη στρατηγική είναι να εντοπιστούν οι υποκατάλογοι που καταναλώνουν το περισσότερο ιώδιο.
Μερικές φορές γνωρίζετε ότι ένας ιστότοπος έχει εξωφρενικά υψηλές τιμές Inode, αλλά εξακολουθείτε να μην μπορείτε να καταλάβετε τι συμβαίνει με την οθόνη γεμάτη αρχεία.
Σε τέτοιες περιπτώσεις, πρέπει να προχωρήσετε σε μεγαλύτερο βάθος κατά ένα επίπεδο για να βρείτε υποφακέλους που περιέχουν μεγάλο αριθμό μικρών αρχείων, όπως καταλόγους προσωρινής μνήμης, καταλόγους συνεδριών και καταλόγους αρχείων καταγραφής — αυτές είναι οι πιο προβληματικές περιοχές.
find /home/用户名/web/你的域名/public_html -type d -exec sh -c 'echo -n "{}: "; find "{}" -maxdepth 1 | wc -l' \; | sort -n -r -k 2 | head -n 10Αυτή η εντολή θα εμφανίσει τους 10 κορυφαίους υποφακέλους που καταναλώνουν τα περισσότερα αρχεία.
Η διαδρομή στην κορυφή της λίστας είναι το σημείο όπου ομαδοποιείται ένας μεγάλος αριθμός μικρών αρχείων.
Είπα στον φίλο μου ότι πιθανότατα ήταν κάποιο πρόσθετο προσωρινής αποθήκευσης που δημιουργούσε κρυφά μικρά αρχεία και η εκτέλεση αυτής της γραμμής ουσιαστικά θα το επιβεβαίωνε.
Η τέταρτη συμβουλή είναι να ελέγξετε το όριο ποσόστωσης χρησιμοποιώντας το repquota.
Εάν ο διακομιστής σας έχει ενεργοποιημένα όρια συστήματος αρχείων Linux, μπορείτε να εξετάσετε το πρόβλημα από διαφορετική οπτική γωνία.
repquota -aΑυτή η εντολή θα εμφανίσει το όριο αρχείων και την πραγματική χρήση αρχείων για όλους τους χρήστες.
Δώστε ιδιαίτερη προσοχή στην ενότητα Όρια αρχείων στην έξοδο. Η στήλη που χρησιμοποιήθηκε υποδεικνύει τον αριθμό των αρχείων που έχουν χρησιμοποιηθεί.
Οι στήλες "soft" και "hard" αντιπροσωπεύουν τα όρια soft και hard. Μόλις η τιμή "used" φτάσει στο "hard", το σύστημα θα αρνηθεί άμεσα τη δημιουργία νέων αρχείων.
Αυτή είναι μια εντελώς διαφορετική ιστορία από το πόσο χώρο σας έχει απομείνει στον δίσκο σας.
Για να ολοκληρώσουμε, ας συνδέσουμε τα σημεία της έρευνας.
Ας επιστρέψουμε στον φίλο που στην αρχή κρασάρισε τον διακομιστή στη μέση της νύχτας.
Ακολούθησε τα τέσσερα βήματα που περιέγραψα, ξεκινώντας με `df -i` για να επιβεβαιώσει ότι το inode ήταν πράγματι γεμάτο.
Στη συνέχεια, χρησιμοποιώντας τη μέθοδο find, εντοπίστηκε ότι ένας κατάλογος προσωρινής μνήμης ενός εγκαταλελειμμένου παλιού ιστότοπου δημιουργούσε μικρά αρχεία σαν τρελό.
Τελικά, ο έλεγχος του `repquota` επιβεβαίωσε ότι είχε πράγματι φτάσει στο αυστηρό όριο.
Αφού εκκαθάρισε αυτή τη στοίβα από άχρηστα αρχεία, ο ιστότοπος επανήλθε αμέσως στη ζωή.
Την επόμενη φορά λοιπόν που θα αντιμετωπίσετε αυτή την περίεργη κατάσταση όπου «ο δίσκος έχει σαφώς χώρο αλλά δεν μπορείτε να γράψετε αρχεία», μην βιαστείτε να προσθέσετε έναν σκληρό δίσκο.
Αρχικά, χρησιμοποιήστε την εντολή `df -i` για να ρίξετε μια ματιά στο inode. Η αλήθεια μπορεί κάλλιστα να κρύβεται σε εκείνη την κάρτα ευρετηρίου που δεν έχετε παρατηρήσει ποτέ πριν.
Πιστεύω ακράδαντα ότι αυτά τα μικρά κομμάτια κοινής λογικής που κρύβονται στον πυρήνα του συστήματος είναι πιο χρήσιμα από την απομνημόνευση εκατό λιστών βελτιστοποίησης.
Ας ελπίσουμε ότι το άρθρο "Πώς να ελέγξετε τη χρήση του Inode στο HestiaCP; Η αιτία πίσω από τη διαθεσιμότητα χώρου στο δίσκο αλλά η αδυναμία εγγραφής αρχείων" που κοινοποιήθηκε στο ιστολόγιο του Chen Weiliang ( https://www.chenweiliang.com/ ) θα σας φανεί χρήσιμο.
Μη διστάσετε να κοινοποιήσετε τον σύνδεσμο αυτού του άρθρου: https://www.chenweiliang.com/cwl-34619.html
