Αυτό οφείλεται στη διαφορά μεταξύ φυσικών και εικονικών διευθύνσεων μνήμης.
Η σύμβαση που κατά βάση ακολουθείται στο υλικό του PC, είναι να χρησιμοποιείται η μνήμη μεταξύ 3.5G και 4G για ειδικό σκοπό, συνήθως για την πρόσβαση σε κάρτες PCI. Αυτό έχει ως αποτέλεσμα να μην μπορεί να αντιστοιχηθεί φυσική μνήμη σε αυτή την περιοχή διευθύνσεων.
Το υλικό του υπολογιστή σας θα καθορίσει τι γίνεται με την μνήμη που κανονικά εμφανίζεται σε αυτή τη θέση. Δυστυχώς, σε κάποιες περιπτώσεις το υλικό δεν κάνει τίποτα, και χάνεται η δυνατότητα χρήσης των τελευταίων 500Μ μνήμης RAM.
Ευτυχώς, στις περισσότερες περιπτώσεις το υλικό ανακατευθύνει τη μνήμη σε υψηλότερη θέση, ώστε να είναι ακόμα δυνατή η χρήση της. Αυτό μπορεί ωστόσο να σας προκαλέσει κάποια σύγχυση αν παρακολουθείτε τα μηνύματα εκκίνησης.
Στην 32 bit έκδοση του FreeBSD, η μνήμη φαίνεται να έχει χαθεί καθώς ανακατευθύνεται πάνω από τα 4G, τα οποία δεν είναι προσβάσιμα από 32 bit πυρήνα. Στην περίπτωση αυτή η λύση είναι να φτιάξετε ένα πυρήνα τύπου PAE. Δείτε αυτήν την καταχώρηση στο FAQ για περισσότερες πληροφορίες.
Στην 64 bit έκδοση του FreeBSD, ή όταν χρησιμοποιείται πυρήνας τύπου PAE, το FreeBSD θα ανιχνεύσει και θα ανακατευθύνει σωστά τη μνήμη ώστε να είναι χρησιμοποιήσιμη. Κατά την εκκίνηση ωστόσο, μπορεί να φαίνεται ότι το FreeBSD ανιχνεύει περισσότερη μνήμη από αυτή που έχει στην πραγματικότητα το σύστημα. Αυτό είναι φυσιολογικό και η διαθέσιμη μνήμη θα διορθωθεί καθώς ολοκληρώνεται η διαδικασία της εκκίνησης.
Στους δίσκους SCSI, ο οδηγός μπορεί συνήθως να επανατοποθετήσει αυτόματα τα δεδομένα σε εναλλακτικούς τομείς. Ωστόσο οι περισσότεροι δίσκοι έρχονται με την δυνατότητα αυτή απενεργοποιημένη.
Για να ενεργοποιήσετε την επανατοποθέτηση χαλασμένων τομέων, επεξεργαστείτε την πρώτη σελίδα κατάστασης της συσκευής (modepage), δίνοντας την παρακάτω εντολή (ως root):
# camcontrol modepage sd0 -m 1 -e -P 3
και αλλάξτε τις τιμές των AWRE και ARRE από 0 σε 1:
AWRE (Auto Write Reallocation Enbld): 1 ARRE (Auto Read Reallocation Enbld): 1
Οι σύγχρονοι οδηγοί τύπου IDE έχουν επίσης ενεργοποιημένη από το εργοστάσιο τη δυνατότητα επανατοποθέτησης χαλασμένων τομέων.
Αν δείτε προειδοποιήσεις σχετικά με χαλασμένους τομείς (σε οποιοδήποτε είδος δίσκου), είναι ώρα να σκεφτείτε να αλλάξετε τον οδηγό. Ίσως μπορέσετε να χρησιμοποιήσετε το διαγνωστικό πρόγραμμα που δίνει ο κατασκευαστής του δίσκου για να απομονώσετε τους χαλασμένους τομείς, αλλά στην καλύτερη περίπτωση απλώς θα κερδίσετε λίγο περισσότερο χρόνο.
Το πρόβλημα αυτό είναι γνωστό. Ο ενσωματωμένος στη μητρική ελεγκτής SCSI του HP Netserver, χρησιμοποιεί σύνδεση τύπου EISA και καταλαμβάνει τη θέση EISA με αριθμό 11. Με τον τρόπο αυτό, όλες οι «πραγματικές» υποδοχές τύπου EISA βρίσκονται πριν από αυτή. Ωστόσο, η περιοχή διευθύνσεων των υποδοχών EISA με αριθμό >= 10, συγκρούεται με την περιοχή διευθύνσεων του PCI, και το FreeBSD στη σημερινή του μορφή, δεν μπορεί να χειριστεί σωστά αυτή την κατάσταση.
Έτσι, για την ώρα, το καλύτερο που μπορείτε να κάνετε είναι να παριστάνετε ότι δεν υπάρχει σύγκρουση διευθύνσεων :) και να ανεβάσετε την επιλογή EISA_SLOTS του πυρήνα στην τιμή 12. Μεταγλωττίστε έπειτα ξανά τον πυρήνα, όπως περιγράφεται στην σχετική καταχώρηση του Εγχειριδίου.
Φυσικά αυτό είναι ένα πρόβλημα αντίστοιχο με το αυγό και την κότα, όσο αφορά την εγκατάσταση ενός τέτοιου μηχανήματος. Για να προσπεράσετε το πρόβλημα, υπάρχει ειδική πρόβλεψη στο UserConfig. Μη χρησιμοποιήσετε το «visual» interface, αλλά την γραμμή εντολών. Απλώς γράψτε:
eisa 12 quit
στην προτροπή, και εγκαταστήστε το σύστημα σας όπως συνήθως. Σας συνιστούμε ωστόσο να μεταγλωττίσετε και να εγκαταστήσετε το δικό σας προσαρμοσμένο πυρήνα.
Ευελπιστούμε ότι σε μελλοντικές εκδόσεις, θα υπάρχει καλύτερη διόρθωση για το πρόβλημα αυτό.
Σημείωση: Δεν μπορείτε να χρησιμοποιήσετε δίσκο σε κατάσταση dangerously dedicated (επικίνδυνα αφοσιωμένη) με τον HP Netserver. Δείτε αυτή τη σημείωση για περισσότερες πληροφορίες.
Τα μηνύματα αυτά προκαλούνται συνήθως από διενέξεις στα interrupts (π.χ. δύο κάρτες που χρησιμοποιούν το ίδιο IRQ). Εκκινήστε με την επιλογή -c και αλλάξτε την καταχώρηση ed0/de0/... ώστε να συμβαδίζει με το υλικό σας.
Αν χρησιμοποιείτε την σύνδεση BNC της κάρτας δικτύου σας, ίσως να δείτε επίσης αντίστοιχα μηνύματα σε περίπτωση προβληματικού τερματισμού. Για να ελέγξετε την περίπτωση αυτή, συνδέστε ένα τερματιστή απευθείας στην κάρτα (χωρίς καλώδιο) και δείτε αν σταματήσουν τα μηνύματα.
Κάποιες κάρτες συμβατές με NE2000, δίνουν αυτό το μήνυμα αν δεν υπάρχει σύνδεση στη θύρα UTP ή αν το καλώδιο είναι αποσυνδεμένο.
Η κάρτα αυτή έχει την κακή συνήθεια να χάνει τις ρυθμίσεις της. Ανανεώστε τις, χρησιμοποιώντας το βοηθητικό πρόγραμμα DOS 3c5x9.exe.
Αν το μόνο πρόβλημα είναι ο υπερβολικά αργός εκτυπωτής, μπορείτε να δοκιμάσετε να αλλάξετε την κατάσταση λειτουργίας της παράλληλης θύρας όπως περιγράφεται στο κεφάλαιο του Εγχειριδίου σχετικά με την Εγκατάσταση Εκτυπωτή.
Τα σφάλματα τύπου Signal 11 δημιουργούνται όταν μια διεργασία προσπαθεί να προσπελάσει περιοχή μνήμης για την οποία δεν έχει πάρει άδεια από το λειτουργικό σύστημα. Αν συμβαίνει κάτι τέτοιο σε φαινομενικά τυχαία χρονικά διαστήματα, θα πρέπει να αρχίσετε να το ερευνάτε πολύ προσεκτικά.
Τα προβλήματα αυτά συνήθως οφείλονται σε κάποιον από τους παρακάτω λόγους:
Αν το πρόβλημα εμφανίζεται μόνο σε μια συγκεκριμένη εφαρμογή την οποία αναπτύσσετε εσείς, είναι πιθανώς λάθος στον δικό σας κώδικα.
Αν το πρόβλημα βρίσκεται σε τμήμα του βασικού συστήματος του FreeBSD, μπορεί επίσης να είναι προβληματικός κώδικας, αλλά τις περισσότερες φορές, τα προβλήματα αυτά βρίσκονται και διορθώνονται πριν διανεμηθούν στους περισσότερους από εσάς που διαβάζετε το FAQ (για το λόγο αυτό άλλωστε υπάρχει και η γραμμή ανάπτυξης -current).
Για παράδειγμα, ένας γρήγορος τρόπος να διαπιστώσετε ότι δεν πρόκειται για πρόβλημα του FreeBSD, είναι αν το πρόβλημα εμφανίζεται κατά τη μεταγλώττιση κάποιου προγράμματος, αλλά κάθε φορά και σε διαφορετικό σημείο.
Για παράδειγμα, υποθέστε ότι εκτελείτε ένα «make buildworld», και η μεταγλώττιση αποτυγχάνει κατά την επεξεργασία του αρχείου ls.c σε ls.o. Αν εκτελέσετε ξανά «make buildworld», και η μεταγλώττιση σταματήσει στο ίδιο σημείο, πρόκειται πράγματι για πρόβλημα στα αρχεία του build -- δοκιμάστε να ανανεώσετε τον πηγαίο κώδικα και να ξαναπροσπαθήσετε. Αν η μεταγλώττιση αποτυγχάνει αλλού, αυτό σχεδόν σίγουρα οφείλεται σε προβληματικό υλικό.
Τι πρέπει να κάνετε:
Στην πρώτη περίπτωση μπορείτε να χρησιμοποιήσετε κάποιο debugger όπως το gdb για να βρείτε το σημείο στο πρόγραμμα με την προβληματική διεύθυνση και να το διορθώσετε.
Στη δεύτερη περίπτωση, θα πρέπει να επαληθεύσετε ότι δεν φταίει το υλικό σας.
Στις συνηθισμένες αιτίες αυτού του προβλήματος, περιλαμβάνονται:
Οι σκληροί σας δίσκοι μπορεί να υπερθερμαίνονται. Ελέγξτε ότι λειτουργούν οι ανεμιστήρες στο κουτί σας. Αν δεν λειτουργούν, είναι πιθανό οι δίσκοι σας (και ίσως και άλλα εξαρτήματα) να υπερθερμαίνονται.
Ο επεξεργαστής σας έχει υπερθερμανθεί: Αυτό μπορεί να συμβεί σε περίπτωση που τον λειτουργείτε σε μεγαλύτερη συχνότητα από την κανονική (overclocking) ή αν το ανεμιστηράκι του επεξεργαστή έχει σταματήσει να λειτουργεί. Σε κάθε περίπτωση, θα πρέπει να εξασφαλίσετε ότι χρησιμοποιείτε το υλικό σας σύμφωνα με τις προδιαγραφές του, τουλάχιστον για όσο διάστημα χρειάζεται για να επιλύσετε το πρόβλημα. Για παράδειγμα, αν έχετε κάνει overclocking, επιστρέψτε τον επεξεργαστή στην κανονική του συχνότητα.
Σχετικά με το overclocking, σημειώστε επίσης ότι είναι φτηνότερο να έχετε ένα πιο αργό σύστημα από ένα κατεστραμμένο που χρειάζεται αντικατάσταση! Επίσης η κοινότητα γενικά δεν θα σας αντιμετωπίσει με κατανόηση αν αναφέρετε προβλήματα που παρουσιάζονται σε συστήματα που λειτουργούν εκτός προδιαγραφών, είτε εσείς πιστεύετε ότι η λειτουργία τους είναι ασφαλής, είτε όχι.
Προβληματική μνήμη: Αν έχετε εγκατεστημένα περισσότερα από ένα SIMMS / DIMMS, αφαιρέστε τα και προσπαθήστε να λειτουργήσετε το μηχάνημα με ένα-ένα χωριστά ώστε να εντοπίσετε το πρόβλημα σε επίπεδο ενός SIMM / DIMM, ή ίσως σε ένα συνδυασμό τους.
Υπερ-αισιόδοξες ρυθμίσεις μητρικής: Στις ρυθμίσεις του BIOS, και σε κάποιες περιπτώσεις σε ρυθμίσεις στη μητρική μέσω βραχυκυκλωτήρων (jumpers), υπάρχει η δυνατότητα μεταβολής διάφορων χρονισμών. Στις περισσότερες περιπτώσεις οι προεπιλεγμένες ρυθμίσεις είναι επαρκείς, και ίσως δημιουργήσετε προβλήματα αν ρυθμίσετε πολύ χαμηλά τις καταστάσεις αναμονής (wait states) της RAM ή θέσετε στο BIOS την επιλογή «RAM Speed: Turbo». Μια καλή ιδέα είναι να επιστρέψετε τις ρυθμίσεις του BIOS στις προεπιλεγμένες, αλλά πριν το κάνετε, σημειώστε κάπου τις δικές σας.
Ανεπαρκής ή κακής ποιότητας τροφοδοσία στη μητρική. Αν έχετε κάρτες I/O, σκληρούς δίσκους ή CDROM στο σύστημα σας που δεν χρησιμοποιείτε, δοκιμάστε να τα αφαιρέσετε ή να αποσυνδέσετε προσωρινά την παροχή τροφοδοσίας τους, για να διαπιστώσετε αν το τροφοδοτικό σας μπορεί να διαχειριστεί μικρότερο φορτίο. Ή απλώς δοκιμάστε ένα άλλο τροφοδοτικό, κατά προτίμηση ένα με λίγο μεγαλύτερη ισχύ (για παράδειγμα αν το τρέχον σας τροφοδοτικό είναι ονομαστικής ισχύος 250W, δοκιμάστε ένα ισχύος 300W).
Θα πρέπει επίσης να διαβάσετε το SIG11 FAQ (το οποίο φαίνεται παρακάτω) το οποίο περιλαμβάνει εξαιρετικές επεξηγήσεις για όλα αυτά τα προβλήματα, αν και πολλές από αυτές είναι γραμμένες από την σκοπιά του Linux®. Ένα ενδιαφέρον τμήμα του SIG11 FAQ είναι και αυτό που αναφέρεται στην πιθανότητα να μην ανιχνεύεται προβληματική μνήμη από διαγνωστικά προγράμματα ή συσκευές ελέγχου.
Τέλος, αν τίποτα από τα παραπάνω δεν βοηθήσει, είναι πιθανόν να έχετε εντοπίσει ένα πρόβλημα (bug) στο FreeBSD και θα πρέπει να ακολουθήσετε τις οδηγίες για να στείλετε αναφορά προβλήματος.
Μπορείτε να βρείτε εκτεταμένη ανάλυση στο FAQ σχετικά με το πρόβλημα SIG11.
5.8. Το σύστημα μου σταματάει είτε με “Fatal trap 12: page fault in kernel mode”, ή με “panic:”, δείχνοντας και μια σειρά από πληροφορίες. Τι πρέπει να κάνω;
Η ομάδα ανάπτυξης του FreeBSD ενδιαφέρεται ιδιαίτερα για αυτά τα λάθη, αλλά χρειάζεται περισσότερες πληροφορίες εκτός από το μήνυμα λάθους που βλέπετε. Αντιγράψτε το πλήρες μήνυμα και έπειτα συμβουλευθείτε την ενότητα του FAQ σχετικά με τα kernel panics, δημιουργήστε ένα πυρήνα με δυνατότητα εκσφαλμάτωσης (debugging kernel) και εκτελέστε ένα backtrace. Αυτό μπορεί να ακούγεται δύσκολο, αλλά δεν χρειάζεστε στην πραγματικότητα γνώσεις προγραμματισμού. Αρκεί να ακολουθήσετε τις οδηγίες.
Πρόκειται για γνωστό πρόβλημα με την κάρτα γραφικών ATI Mach64. Το πρόβλημα είναι ότι η κάρτα αυτή χρησιμοποιεί την διεύθυνση 2e8, η οποία χρησιμοποιείται επίσης και από την τέταρτη σειριακή θύρα. Λόγω κάποιου προβλήματος (ή της σχεδίασης) του προγράμματος οδήγησης sio(4), το πρόγραμμα όχι μόνο θα προσπαθήσει να ανιχνεύσει αυτή τη διεύθυνση ακόμα και αν δεν έχετε τέταρτη σειριακή θύρα, αλλά ακόμα και στην περίπτωση που έχετε απενεργοποιήσει τη σειριακή θύρα sio3 (δηλ. την τέταρτη) η οποία φυσιολογικά χρησιμοποιεί αυτή τη διεύθυνση.
Μέχρι να διορθωθεί το πρόβλημα αυτό, μπορείτε να χρησιμοποιήσετε το παρακάτω τέχνασμα για να το παρακάμψετε:
Γράψτε -c
στην προτροπή εκκίνησης. (Με τον τρόπο αυτό θα
βάλετε τον πυρήνα σε κατάσταση ρύθμισης).
Απενεργοποιήστε τις sio0, sio1, sio2 και sio3 (όλες). Με τον τρόπο αυτό το πρόγραμμα οδήγησης δεν ενεργοποιείται καν, άρα δεν δημιουργείται πρόβλημα.
Γράψτε exit για να συνεχίσετε την εκκίνηση.
Αν θέλετε να χρησιμοποιήσετε τις σειριακές θύρες, θα πρέπει να δημιουργήσετε νέο πυρήνα, με την ακόλουθη μετατροπή: Στο αρχείο /usr/src/sys/i386/isa/sio.c βρείτε το πρώτο σημείο που εμφανίζεται το αλφαριθμητικό 0x2e8 και αφαιρέστε αυτό το αλφαριθμητικό και το κόμμα που βρίσκεται πριν από αυτό (κρατήστε το κόμμα που βρίσκεται μετά). Ακολουθήστε τώρα τη συνηθισμένη διαδικασία δημιουργίας νέου πυρήνα.
Ακόμα και μετά την εφαρμογή αυτών των διορθώσεων, ίσως ανακαλύψετε ότι το σύστημα X Window δεν λειτουργεί σωστά. Αν συμβαίνει αυτό, βεβαιωθείτε ότι χρησιμοποιείτε έκδοση 3.3.3 ή μεγαλύτερη του XFree86™. Από την έκδοση αυτή και μετά, υπάρχει ενσωματωμένη υποστήριξη για κάρτες Mach64 και επίσης διατίθεται εξειδικευμένος εξυπηρετητής X για την κάρτα αυτή.
5.10. Γιατί το FreeBSD σύστημα μου χρησιμοποιεί μόνο 64MB RAM, ενώ ο υπολογιστής μου έχει εγκατεστημένα 128MB;
Εξαιτίας του τρόπου με τον οποίο το FreeBSD διαβάζει το μέγεθος της μνήμης από το BIOS, μπορεί να ανιχνεύσει μόνο 16 bits μέγεθος σε Kbytes (65536 Kbytes = 64MB) (ή και λιγότερο... ορισμένα BIOS δίνουν προκαθορισμένο μέγεθος μνήμης 16Μ). Αν έχετε περισσότερα από 64MB, το FreeBSD θα προσπαθήσει να τα ανιχνεύσει. Η ανίχνευση ωστόσο μπορεί να αποτύχει.
Για να παρακάμψετε το πρόβλημα, θα πρέπει να χρησιμοποιήσετε την επιλογή του πυρήνα που φαίνεται παρακάτω. Υπάρχει τρόπος να ληφθούν πλήρεις πληροφορίες σχετικά με τη μνήμη από το BIOS, αλλά στο bootblock δεν υπάρχει αρκετός χώρος για να γίνει αυτό. Κάποια μέρα, όταν διορθωθεί το πρόβλημα της έλλειψης χώρου στα bootblocks, θα χρησιμοποιήσουμε τις εκτεταμένες λειτουργίες του BIOS για να ανακτήσουμε πλήρεις πληροφορίες σχετικά με τη μνήμη. Για την ώρα, πρέπει να περιοριστούμε στην ρύθμιση της αντίστοιχης επιλογής του πυρήνα.
options "MAXMEM=n"
Όπου το n είναι το μέγεθος της μνήμης σε kilobytes. Για μηχάνημα με 128 MB, θα πρέπει να χρησιμοποιήσετε το 131072.
5.11. Το σύστημα μου έχει περισσότερο από 1 GB RAM, και παίρνω panics με μηνύματα «kmem_map too small». Που είναι το πρόβλημα;
Φυσιολογικά, το FreeBSD χρησιμοποιεί το μέγεθος της εγκατεστημένης μνήμης για να καθορίσει μια σειρά από παραμέτρους του πυρήνα, όπως το μέγιστο αριθμό αρχείων που μπορεί να είναι ταυτόχρονα ανοιχτά. Σε συστήματα με περισσότερη από 1GB μνήμη, αυτός ο μηχανισμός «αυτόματης ρύθμισης μεγεθών» ίσως επιλέξει τιμές οι οποίες να είναι πολύ υψηλές. Κατά την εκκίνηση, ο πυρήνας εκχωρεί διάφορους πίνακες και άλλες δομές, οι οποίες καταλαμβάνουν τον περισσότερο διαθέσιμο χώρο του. Αργότερα, καθώς το σύστημα λειτουργεί, ο πυρήνας δεν έχει άλλο χώρο για δυναμικές εκχωρήσεις μνήμης, και δημιουργείται panic.
Δημιουργήστε το δικό σας πυρήνα, και προσθέστε την επιλογή VM_KMEM_SIZE_MAX
στο αρχείο ρυθμίσεων του, ώστε να αυξήσετε το
μέγιστο μέγεθος σε 400 MB (options
VM_KMEM_SIZE_MAX=419430400
). Τα 400 MB φαίνεται να επαρκούν για μηχανήματα με
μέγεθος μνήμης ως 6 GB.
5.12. Το σύστημα μου δεν έχει 1GB RAM, και πάλι όμως το FreeBSD δημιουργεί panic με το μήνυμα “kmem_map too small!”
Το panic δείχνει ότι το σύστημα έχει μείνει από εικονική μνήμη για προσωρινή αποθήκευση δεδομένων δικτύου (network buffers, και ειδικότερα mbuf clusters). Μπορείτε να αυξήσετε το μέγεθος της εικονικής μνήμης που διατίθεται για mbuf clusters, ακολουθώντας τις οδηγίες στην ενότητα Όρια Δικτύου του Εγχειριδίου.
Ο πυρήνας του FreeBSD επιτρέπει κάθε χρονική στιγμή την ύπαρξη ενός συγκεκριμένου αριθμού διεργασιών. Ο αριθμός αυτός βασίζεται στην επιλογή MAXUSERS του πυρήνα. Το MAXUSERS επηρεάζει επίσης και άλλα όρια μέσα στον πυρήνα, όπως η προσωρινή μνήμη του δικτύου (network buffers) (δείτε την προηγούμενη ερώτηση). Αν το μηχάνημα σας λειτουργεί σε υψηλό φορτίο, ίσως έχει νόημα να αυξήσετε την επιλογή MAXUSERS. Με τον τρόπο αυτό, μαζί με το μέγιστο αριθμό διεργασιών, θα αυξηθούν και άλλα όρια του συστήματος.
Για να ρυθμίσετε την τιμή του MAXUSERS, δείτε την ενότητα Όρια Αρχείων/Διεργασιών του Εγχειριδίου. (Αν και η ενότητα αυτή αναφέρεται σε ανοιχτά αρχεία, τα ίδια όρια ισχύουν και για τις διεργασίες.)
Αν το μηχάνημα σας λειτουργεί σε χαμηλό φορτίο, αλλά εκτελεί μεγάλο αριθμό διεργασιών,
μπορείτε απλώς να ρυθμίσετε τον αριθμό τους αλλάζοντας την τιμή της μεταβλητής kern.maxproc
. Αν πρέπει να ρυθμίσετε αυτή τη μεταβλητή, θα πρέπει
να την ορίσετε στο αρχείο /boot/loader.conf. Η ρύθμιση δεν θα
ισχύσει μέχρι να επανεκκινήσετε το σύστημα. Για περισσότερες πληροφορίες σχετικά με τις
μεταβλητές του πυρήνα, δείτε τις σελίδες manual loader.conf(5) και sysctl.conf(5). Αν
όλες αυτές οι διεργασίες εκτελούνται από ένα μόνο χρήστη, θα πρέπει επίσης να ρυθμίσετε
την τιμή της μεταβλητής kern.maxprocperuid
ώστε να είναι
κατά ένα μικρότερη από την νέα τιμή της kern.maxproc
.
(Πρέπει να είναι κατά ένα μικρότερη, γιατί υπάρχει πάντα ένα πρόγραμμα συστήματος, το init(8), που πρέπει να
εκτελείται συνέχεια.).
Για να γίνει μόνιμη μια αλλαγή ενός sysctl, τοποθετήστε την κατάλληλη τιμή στο αρχείο /etc/sysctl.conf. Περισσότερες πληροφορίες για τη ρύθμιση του συστήματος με την χρήση του sysctl(8), μπορείτε να βρείτε στην ενότητα Ρυθμίσεις μέσω sysctl του Εγχειριδίου.
Η λογική του συστήματος που προσπαθεί να ανιχνεύσει τυχόν παλιές εκδόσεις των αρχείων /var/db/kvm_*.db κάποιες φορές αποτυγχάνει, και η χρήση ανόμοιων εκδόσεων μπορεί σε ορισμένες περιπτώσεις να οδηγήσει σε panic.
Αν σας συμβεί αυτό, επανεκκινήστε σε κατάσταση ενός χρήστη (single user) και γράψτε:
# rm /var/db/kvm_*.db
Υπάρχει μια διένεξη με την κάρτα Ultrastor SCSI Host Adapter.
Κατά τη διάρκεια της διαδικασίας εκκίνησης, εισέλθετε στο μενού ρυθμίσεων του πυρήνα και απενεργοποιήστε τη συσκευή uha0, η οποία είναι αυτή που προκαλεί το πρόβλημα.
5.16. Όταν ξεκινώ το σύστημα μου παίρνω το λάθος “ahc0: illegal cable configuration”. Η καλωδίωση μου είναι σωστή. Τι συμβαίνει;
Η μητρική πλακέτα σας δεν έχει τα απαιτούμενα εξωτερικά κυκλώματα ώστε να υποστηρίζει αυτόματο τερματισμό του διαύλου SCSI. Αντί να βασίζεστε στον αυτόματο τερματισμό, δηλώστε στο SCSI BIOS τον σωστό τερματισμό για τη διάταξη συσκευών που έχετε. Το πρόγραμμα οδήγησης του AIC7XXX δεν μπορεί να καθορίσει αν είναι διαθέσιμο το κύκλωμα που χρησιμοποιείται για την ανίχνευση του καλωδίου (άρα και του αυτόματου τερματισμού). Το πρόγραμμα οδήγησης υποθέτει ότι υπάρχει υποστήριξη, εφόσον οι ρυθμίσεις που περιέχονται στη σειριακή EEPROM αναφέρουν "αυτόματο τερματισμό". Συχνά, χωρίς το εξωτερικό κύκλωμα ανίχνευσης του καλωδίου, το πρόγραμμα οδήγησης θα ρυθμίζει λανθασμένα τον τερματισμό, κάτι που μπορεί να δημιουργήσει πρόβλημα στην αξιοπιστία του διαύλου SCSI.
Αυτό περιγράφεται στο sendmail FAQ όπως φαίνεται παρακάτω:
* Παίρνω μηνύματα λάθους "Local configuration error" όπως το:
553 relay.domain.net config error: mail loops back to myself
554 <user@domain.net>... Local configuration error
Πως μπορώ να επιλύσω το πρόβλημα;
Έχετε ζητήσει να κατευθύνετε το mail προς το domain (π.χ. domain.net)
προς κάποιο συγκεκριμένο μηχάνημα (στην περίπτωση αυτή, το
relay.domain.net) χρησιμοποιώντας μια εγγραφή MX, αλλά το μηχάνημα
που κάνει την ανακατεύθυνση δεν αναγνωρίζει τον εαυτό του ως
domain.net. Προσθέστε το domain.net στο /etc/mail/local-host-names
(αν χρησιμοποιείτε το FEATURE(use_cw_file)) ή προσθέστε
"Cw domain.net" στο /etc/mail/sendmail.cf.
Η τρέχουσα έκδοση του sendmail FAQ δεν συντηρείται πλέον με κάθε έκδοση του sendmail. Ωστόσο,
δημοσιεύεται ανά τακτά διαστήματα στις λίστες comp.mail.sendmail, comp.mail.misc, comp.mail.smail, comp.answers, και news.answers. Μπορείτε επίσης να λάβετε αντίγραφο μέσω email,
στέλνοντας ένα μήνυμα στο <mail-server@rtfm.mit.edu>
με την
εντολή send usenet/news.answers/mail/sendmail-faq στο κύριο
μέρος του μηνύματος.
Είναι πιθανόν το απομακρυσμένο μηχάνημα να ρυθμίζει τον τύπο του τερματικού σας σε κάτι διαφορετικό από τον τύπο cons25 που απαιτείται από την κονσόλα του FreeBSD.
Υπάρχουν διάφοροι τρόποι για να παρακάμψετε αυτό το πρόβλημα:
Μετά την είσοδο σας στο απομακρυσμένο μηχάνημα, ορίστε την μεταβλητή TERM του κελύφους σε ansi ή sco, εφόσον το απομακρυσμένο μηχάνημα μπορεί να λειτουργήσει με αυτά τα είδη τερματικών.
Στην κονσόλα του FreeBSD, χρησιμοποιήστε κάποιο εξομοιωτή τερματικού VT100, όπως το screen. Το screen σας δίνει τη δυνατότητα να έχετε πολλαπλές συνεδρίες από ένα μόνο τερματικό, και είναι έτσι και αλλιώς χρήσιμο πρόγραμμα. Κάθε παράθυρο του screen συμπεριφέρεται ως τερματικό του VT100, έτσι η μεταβλητή TERM στον απομακρυσμένο υπολογιστή θα πρέπει να ρυθμιστεί σε vt100.
Εγκαταστήστε την καταχώρηση cons25 στη βάση δεδομένων τερματικών του απομακρυσμένου υπολογιστή. Ο τρόπος για να γίνει αυτό, εξαρτάται από το λειτουργικό σύστημα του απομακρυσμένου υπολογιστή. Φυσιολογικά, θα βρείτε αυτές τις πληροφορίες στα εγχειρίδια διαχείρισης συστήματος του απομακρυσμένου μηχανήματος.
Στο τοπικό σας FreeBSD μηχάνημα, χρησιμοποιήστε τον X server και κάντε login στο απομακρυσμένο μηχάνημα χρησιμοποιώντας κάποιο εξομοιωτή τερματικού όπως το xterm ή το rxvt. Στην περίπτωση αυτή, θα πρέπει στο απομακρυσμένο μηχάνημα να ρυθμίσετε την μεταβλητή TERM σε xterm ή vt100.
Αυτό μπορεί να συμβεί από διάφορες αιτίες που σχετίζονται με interrupts, τόσο στο υλικό όσο και στο λογισμικό. Μπορεί να οφείλεται σε προβλήματα (bugs) αλλά μπορεί επίσης να προκληθεί εξαιτίας της φύσης κάποιων συσκευών. Ένας συνηθισμένος τρόπος πρόκλησης του προβλήματος, είναι η εκτέλεση εφαρμογών TCP/IP με μεγάλο MTU μέσω της παράλληλης θύρας. Μπορεί επίσης να προκληθεί από κάποιους επιταχυντές γραφικών, και στην περίπτωση αυτή το πρώτο πράγμα που θα πρέπει να ελέγξετε είναι η ρύθμιση interrupt της αντίστοιχης κάρτας.
Παρενέργεια αυτού του προβλήματος είναι ο απότομος τερματισμός διεργασιών με το μήνυμα «SIGXCPU exceeded cpu time limit».
Αν το πρόβλημα δεν μπορεί να λυθεί με διαφορετικό τρόπο, η λύση είναι να ορίσετε την παρακάτω μεταβλητή του sysctl:
# sysctl -w kern.timecounter.method=1
Σημείωση: Η επιλογή
-w
του sysctl(8) θεωρείται παρωχημένη και αγνοείται σιωπηλά από το FreeBSD 4.4-RELEASE και μετά. Μπορείτε με ασφάλεια να το παραλείψετε κατά τη ρύθμιση των επιλογών με την sysctl όπως φαίνεται παραπάνω.
Το παραπάνω θα έχει επίδραση στην απόδοση, αλλά σε σχέση με την αιτία του προβλήματος, μάλλον δεν θα το παρατηρήσετε. Αν το πρόβλημα επιμένει, διατηρήστε την τιμή του sysctl στο ένα, και ρυθμίστε την επιλογή NTIMECOUNTER στον πυρήνα σας, σε ολοένα αυξανόμενες τιμές. Αν φτάσετε την τιμή NTIMECOUNTER=20 και το πρόβλημα δεν έχει λυθεί, τα interrupts στο μηχάνημα σας είναι πολύ προβληματικά και ακατάλληλα για ακριβή ρύθμιση της ώρας.
5.20. Γιατί η PnP κάρτα μου δεν ανιχνεύεται πλέον (ή ανιχνεύεται ως unknown) μετά την αναβάθμιση σε FreeBSD 4.X;
Το FreeBSD 4.X ακολουθεί πλέον αρκετά πιο πιστά το πρότυπο PnP και αυτό δημιουργεί ορισμένες φορές την παρενέργεια να μη λειτουργούν κάποιες συσκευές PnP (π.χ. κάρτες ήχου και εσωτερικά modems) οι οποίες ωστόσο λειτουργούσαν στο FreeBSD 3.Χ.
Οι λόγοι για την συμπεριφορά αυτή, εξηγούνται στο ακόλουθο e-mail, το οποίο στάλθηκε στη λίστα freebsd-questions από τον Peter Wemm, ως απάντηση σε ερώτηση σχετικά με ένα εσωτερικό modem το οποίο δεν ήταν ανιχνεύσιμο από το σύστημα μετά από αναβάθμιση σε FreeBSD 4.X (τα σχόλια μέσα σε [] έχουν προστεθεί για να γίνει πιο κατανοητό το αντικείμενο της συζήτησης).
Σημείωση: Το περιεχόμενο αυτής της παράθεσης έχει ανανεωθεί σε σχέση με το αρχικό κείμενο.
Το PNP bios το προ-ρύθμισε [το modem] και το άφησε στην περιοχή διευθύνσεων των θυρών, και έτσι [στην έκδοση 3.Χ] η παλαιού τύπου ανίχνευση ISA το «βρήκε» εκεί.
Στην έκδοση 4.0, ο κώδικας διαχείρισης του ISA, είναι πολύ περισσότερο προσανατολισμένος στο PnP μοντέλο. Στο 3.Χ ήταν δυνατόν η ανίχνευση ISA να εντοπίσει μια «χαμένη» συσκευή και έπειτα η PNP συσκευή να ταιριάξει και να αποτύχει η ρύθμιση της λόγω διένεξης πόρων. Έτσι, απενεργοποιούνται αρχικά οι προγραμματιζόμενες κάρτες, ώστε να μη συμβεί αυτή η διπλή ανίχνευση. Αυτό επίσης σημαίνει ότι η ανίχνευση πρέπει να γνωρίζει τα PnP ids των υποστηριζόμενων συσκευών. Είναι στις προθέσεις μας να κάνουμε τη διαδικασία αυτή περισσότερη προσβάσιμη στους χρήστες.
Για να λειτουργήσει ξανά η συσκευή, πρέπει να βρεθεί το PNP id της και να προστεθεί στη λίστα των ανιχνεύσεων ISA που χρησιμοποιούνται για την αναγνώριση PnP συσκευών. Αυτό μπορεί να γίνει με τη χρήση της pnpinfo(8) για την ανίχνευση της συσκευής, για παράδειγμα αυτή είναι η έξοδος της pnpinfo(8) για ένα εσωτερικό modem:
# pnpinfo Checking for Plug-n-Play devices... Card assigned CSN #1 Vendor ID PMC2430 (0x3024a341), Serial Number 0xffffffff PnP Version 1.0, Vendor Version 0 Device Description: Pace 56 Voice Internal Plug & Play Modem Logical Device ID: PMC2430 0x3024a341 #0 Device supports I/O Range Check TAG Start DF I/O Range 0x3f8 .. 0x3f8, alignment 0x8, len 0x8 [16-bit addr] IRQ: 4 - only one type (true/edge)
[παραλείπονται οι υπόλοιπες γραμμές TAG]
TAG End DF End Tag Successfully got 31 resources, 1 logical fdevs -- card select # 0x0001 CSN PMC2430 (0x3024a341), Serial Number 0xffffffff Logical device #0 IO: 0x03e8 0x03e8 0x03e8 0x03e8 0x03e8 0x03e8 0x03e8 0x03e8 IRQ 5 0 DMA 4 0 IO range check 0x00 activate 0x01
Οι πληροφορίες που απαιτούνται, βρίσκονται στη γραμμή «Vendor ID», στην αρχή της εξόδου. Ο δεκαεξαδικός αριθμός στις παρενθέσεις (στο παράδειγμα μας 0x3024a341) είναι το PnP id ενώ το αλφαριθμητικό που βρίσκεται ακριβώς πριν από αυτόν είναι ένα μοναδικό ASCII αναγνωριστικό.
Εναλλακτικά, αν το pnpinfo(8) δεν δείχνει την ζητούμενη κάρτα, μπορείτε να χρησιμοποιήσετε το pciconf(8). Παρακάτω φαίνεται ένα μέρος της εξόδου της pciconf -vl για ένα κύκλωμα ήχου ενσωματωμένου στη μητρική:
# pciconf -vl chip1@pci0:31:5: class=0x040100 card=0x00931028 chip=0x24158086 rev=0x02 hdr=0x00 vendor = 'Intel Corporation' device = '82801AA 8xx Chipset AC'97 Audio Controller' class = multimedia subclass = audio
Εδώ, θα χρησιμοποιούσαμε την τιμή του chip
,
«0x24158086».
Η πληροφορία αυτή (Vendor ID ή τιμή chip) θα πρέπει να προστεθεί στο αρχείο /usr/src/sys/isa/sio.c.
Θα πρέπει πρώτα να κρατήσετε ένα αντίγραφο ασφαλείας του sio.c, για την περίπτωση που κάτι πάει στραβά. Επίσης, θα χρειαστείτε το αντίγραφο για να δημιουργήσετε ένα patch το οποίο θα καταθέσετε με την αναφορά προβλήματος (PR) που θα μας στείλετε (και θα μας στείλετε PR, έτσι;). Κατόπιν επεξεργαστείτε το sio.c και ψάξτε για τη γραμμή
static struct isa_pnp_id sio_ids[] = {
έπειτα μετακινηθείτε προς τα κάτω για να βρείτε το σωστό μέρος να προσθέσετε την καταχώρηση της συσκευής σας. Οι καταχωρήσεις φαίνονται όπως παρακάτω και είναι ταξινομημένες κατά το αλφαριθμητικό ASCII Vendor ID το οποίο θα πρέπει να περιληφθεί στο σχόλιο στο δεξιό μέρος της γραμμής μαζί με όλη την περιγραφή Device Description (αν χωράει, αλλιώς μέρος της) από την έξοδο της pnpinfo(8):
{0x0f804f3f, NULL}, /* OZO800f - Zoom 2812 (56k Modem) */ {0x39804f3f, NULL}, /* OZO8039 - Zoom 56k flex */ {0x3024a341, NULL}, /* PMC2430 - Pace 56 Voice Internal Modem */ {0x1000eb49, NULL}, /* ROK0010 - Rockwell ? */ {0x5002734a, NULL}, /* RSS0250 - 5614Jx3(G) Internal Modem */
Προσθέστε το δεκαεξαδικό Vendor ID για τη συσκευή σας στο σωστό μέρος, αποθηκεύστε το αρχείο, αναδημιουργήστε τον πυρήνα σας, και επανεκκινήστε. Θα πρέπει τώρα η συσκευή σας να βρεθεί ως συσκευή sio όπως συνέβαινε και με το FreeBSD 3.X
Το πρόβλημα είναι ότι η εφαρμογή που προσπαθείτε να εκτελέσετε ψάχνει για ένα συγκεκριμένο σύμβολο στον πυρήνα, αλλά για κάποιο λόγο δεν μπορεί να το εντοπίσει. Το σφάλμα αυτό μπορεί να οφείλεται σε δύο προβλήματα:
Ο πυρήνας σας και τα υπόλοιπα βασικά προγράμματα (userland) δεν είναι σε συγχρονισμό (π.χ. έχετε δημιουργήσει νέο πυρήνα, αλλά δεν εκτελέσατε installworld, ή αντίστροφα), με αποτέλεσμα ο πίνακας συμβόλων να είναι διαφορετικός από αυτόν που πιστεύει η εφαρμογή. Αν πρόκειται για αυτή την περίπτωση, απλώς ολοκληρώστε τη διαδικασία αναβάθμισης (δείτε το /usr/src/UPDATING για τη σωστή ακολουθία εντολών).
Δεν χρησιμοποιείτε το /boot/loader για να φορτώσετε τον πυρήνα σας, αλλά τον φορτώνετε απευθείας από το boot2 (δείτε το boot(8)). Αν και δεν είναι λάθος να παρακάμψετε τον /boot/loader, σε γενικές γραμμές το πρόγραμμα αυτό τα καταφέρνει καλύτερα στο να διαθέτει τα σύμβολα του πυρήνα στις εφαρμογές χρήστη.
Το σύμπτωμα: Υπάρχει μεγάλη καθυστέρηση μεταξύ της στιγμής που αποκαθίσταται η TCP σύνδεση και της στιγμής που το πρόγραμμα στη μεριά του πελάτη ζητάει τον κωδικό πρόσβασης (ή στην περίπτωση του telnet(1), της στιγμής που εμφανίζεται η προτροπή login).
Το πρόβλημα: Το πιο πιθανό είναι ότι η καθυστέρηση οφείλεται στην προσπάθεια που καταβάλλει το λογισμικό στη μεριά του εξυπηρετητή να βρει το όνομα του μηχανήματος - πελάτη από την IP διεύθυνση του. Οι περισσότεροι εξυπηρετητές, συμπεριλαμβανομένων του Telnet και SSH που έρχονται με το FreeBSD, λειτουργούν με αυτό τον τρόπο, ώστε μεταξύ άλλων, να αποθηκεύσουν το όνομα του μηχανήματος σε ένα αρχείο καταγραφής για μελλοντική αναφορά από τον διαχειριστή.
Η θεραπεία: Αν το πρόβλημα προκύπτει κάθε φορά που συνδέεστε από τον υπολογιστή σας (τον πελάτη) σε οποιοδήποτε εξυπηρετητή, το πρόβλημα βρίσκεται στον πελάτη. Με τον ίδιο τρόπο, αν το πρόβλημα συμβαίνει μόνο όταν κάποιος συνδέεται στον υπολογιστή σας (τον εξυπηρετητή), το πρόβλημα βρίσκεται στον εξυπηρετητή.
Αν το πρόβλημα είναι στον πελάτη, η μόνη θεραπεία είναι να διορθώσετε το DNS, ώστε ο εξυπηρετητής να μπορεί να το βρει. Αν το πρόβλημα εμφανίζεται στο τοπικό σας δίκτυο, θεωρείστε το πρόβλημα στον εξυπηρετητή και συνεχίστε την ανάγνωση. Αντίθετα, αν το πρόβλημα εμφανίζεται σε συνδέσεις μέσω Internet, κατά πάσα πιθανότητα θα χρειαστεί να επικοινωνήσετε με τον ISP σας και να ζητήσετε να σας το διορθώσει.
Αν το πρόβλημα είναι με τον εξυπηρετητή, και εμφανίζεται στο τοπικό σας δίκτυο, θα πρέπει να τον ρυθμίσετε ώστε να μπορεί να εκτελεί αναζητήσεις τύπου διεύθυνση σε όνομα, για την τοπική περιοχή διευθύνσεων σας. Δείτε τις σελίδες manual των hosts(5) και named(8) για περισσότερες πληροφορίες. Αν το πρόβλημα εμφανίζεται στις συνδέσεις μέσω Internet, μπορεί να οφείλεται σε κακή λειτουργία του resolver στον εξυπηρετητή σας. Για να το ελέγξετε, δοκιμάστε να βρείτε κάποιο άλλο μηχάνημα, για παράδειγμα το www.yahoo.com. Αν ούτε αυτό δουλεύει, εκεί βρίσκεται το πρόβλημα σας.
Μετά από μια νέα εγκατάσταση του FreeBSD είναι επίσης πιθανό να λείπουν οι πληροφορίες για τον τομέα (domain) και τον εξυπηρετητή ονομάτων (nameserver) από το αρχείο /etc/resolv.conf. Αυτό επίσης θα προκαλέσει καθυστέρηση στο SSH, καθώς η επιλογή «UseDNS» έχει ως προεπιλεγμένη την τιμή «yes» στο αρχείο ρυθμίσεων sshd_config στον κατάλογο /etc/ssh. Αν είναι αυτή η αιτία του προβλήματος, θα πρέπει είτε να συμπληρώσετε τις απαιτούμενες πληροφορίες στο /etc/resolv.conf ή να θέσετε το «UseDNS» στο «no» στο αρχείο sshd_config ως προσωρινή λύση.
Τα stray IRQs είναι σημάδια προβλημάτων υλικού που χρησιμοποιεί IRQs, ειδικότερα σχετίζεται με υλικό που κατά τη μέση του κύκλου αναγνώρισης (acknowledge cycle) του interrupt, σταματάει να μεταδίδει την αντίστοιχη αίτηση διακοπής.
Έχετε τρεις επιλογές για να αντιμετωπίσετε αυτό το πρόβλημα:
Ανεχθείτε τις προειδοποιήσεις. Έτσι και αλλιώς, μετά τις 5 πρώτες, δεν θα δείτε άλλες.
Σταματήστε εντελώς τις προειδοποιήσεις, αλλάζοντας το 5 σε 0 στην isa_strayintr()
.
Σταματήστε τις προειδοποιήσεις εγκαθιστώντας υλικό για την παράλληλη πόρτα που να χρησιμοποιεί το IRQ 7 και το αντίστοιχο για αυτό πρόγραμμα οδήγησης PPP (αυτό συμβαίνει στα περισσότερα συστήματα) και εγκαταστήστε ένα οδηγό IDE ή άλλο υλικό που να χρησιμοποιεί το irq 15 μαζί με το κατάλληλο πρόγραμμα οδήγησης του.
Το μήνυμα αυτό σημαίνει ότι έχετε εξαντλήσει τον αριθμό των διαθέσιμων περιγραφέων αρχείων (file descriptors) στο σύστημα σας. Παρακαλούμε δείτε το kern.maxfiles τμήμα στο κεφάλαιο Ρύθμιση Ορίων Πυρήνα του Εγχειριδίου, για ερμηνεία και επίλυση του προβλήματος.
Ο φορητός υπολογιστής σας έχει δύο ή περισσότερα ρολόγια, και το FreeBSD έχει επιλέξει να χρησιμοποιήσει το λάθος.
Εκτελέστε την dmesg(8), και ελέγξτε για γραμμές που περιέχουν την λέξη Timecounter. Η τελευταία από τις γραμμές που θα εκτυπωθεί δείχνει το ρολόι που επιλέχθηκε από το FreeBSD και σχεδόν σίγουρα θα είναι το TSC.
# dmesg | grep Timecounter Timecounter "i8254" frequency 1193182 Hz Timecounter "TSC" frequency 595573479 Hz
Μπορείτε να το επιβεβαιώσετε αυτό, ελέγχοντας την τιμή του kern.timecounter.hardware
sysctl(3).
# sysctl kern.timecounter.hardware kern.timecounter.hardware: TSC
Το BIOS ίσως να τροποποιεί την τιμή του ρολογιού TSC-- ενδεχομένως για να αλλάξει την ταχύτητα του επεξεργαστή όταν λειτουργεί με μπαταρίες, ή όταν εισέρχεται σε κατάσταση χαμηλής κατανάλωσης, αλλά το FreeBSD δεν γνωρίζει για αυτές τις αλλαγές και φαίνεται να κερδίζει ή να χάνει χρόνο.
Στο παράδειγμα μας, είναι επίσης διαθέσιμο το ρολόι i8254 και
μπορείτε να το επιλέξετε γράφοντας το όνομα του στο sysctl(3) kern.timecounter.hardware
.
# sysctl -w kern.timecounter.hardware=i8254 kern.timecounter.hardware: TSC -> i8254
Ο φορητός υπολογιστής σας θα πρέπει τώρα να είναι πιο ακριβής στην τήρηση του χρόνου.
Για να παραμείνει η αλλαγή αυτή σε κάθε εκκίνηση, προσθέστε την παρακάτω γραμμή στο /etc/sysctl.conf.
kern.timecounter.hardware=i8254
Το πρόβλημα είναι κοινό σε φορητά που εκκινούν περισσότερα από ένα λειτουργικά συστήματα. Ορισμένα μη-BSD λειτουργικά συστήματα αφήνουν τις PC cards σε μη-προβλέψιμη κατάσταση. Η εντολή pccardd σε αυτή την περίπτωση, ανιχνεύει την κάρτα ως “"(null)""(null)"” αντί για το πραγματικό της μοντέλο.
Πρέπει να αποσυνδέσετε εντελώς την τροφοδοσία από την θύρα PC card ώστε το υλικό να επανέλθει στην αρχική του κατάσταση. Απενεργοποιήστε πλήρως τον φορητό υπολογιστή σας. (Μην τον βάλετε σε κατάσταση αναμονής ή ύπνου, θα πρέπει να απενεργοποιηθεί εντελώς.) Περιμένετε για λίγα λεπτά και επανεκκινήστε. Θα πρέπει τώρα η PC card να λειτουργεί κανονικά.
Το υλικό κάποιων φορητών υπολογιστών στην πραγματικότητα παραμένει ενεργό, ακόμα και όταν υποτίθεται ότι ο υπολογιστής είναι ανενεργός. Αν το παραπάνω δεν έχει το επιθυμητό αποτέλεσμα, τερματίστε τη λειτουργία του υπολογιστή σας, αφαιρέστε την μπαταρία, περιμένετε λίγο, τοποθετήστε ξανά την μπαταρία και επανεκκινήστε.
5.27. Γιατί ο φορτωτής εκκίνησης του FreeBSD δείχνει το μήνυμα λάθους “Read error” και σταματάει μετά την οθόνη του BIOS;
Ο φορτωτής εκκίνησης του FreeBSD δεν αναγνωρίζει σωστά την γεωμετρία του σκληρού δίσκου. Μπορείτε να την ρυθμίσετε χειροκίνητα μέσα από την fdisk κατά την δημιουργία ή τροποποίηση του slice του FreeBSD.
Μπορείτε να βρείτε τις σωστές τιμές για την γεωμετρία του οδηγού στο BIOS του μηχανήματος. Ψάξτε για τον αριθμό των κυλίνδρων, κεφαλών και τομέων για τον οδηγό που θέλετε.
Μέσα από την fdisk του sysinstall(8), πιέστε το G για να ορίσετε την γεωμετρία του οδηγού.
Θα εμφανιστεί ένας διάλογος που θα ζητάει τον αριθμό των κυλίνδρων, κεφαλών και τομέων. Πληκτρολογήστε τους αριθμούς που βρήκατε από το BIOS, χωρίζοντας τους με κανονικές καθέτους. Για παράδειγμα, για 5000 κυλίνδρους, 250 κεφαλές και 60 τομείς, θα γράφαμε 5000/250/60.
Πιέστε enter για να ορίσετε τις τιμές, και έπειτα το W για να γράψετε το νέο πίνακα κατατμήσεων στον οδηγό.
5.28. Ένα άλλο λειτουργικό σύστημα κατέστρεψε τον διαχειριστή εκκίνησης μου. Πως μπορώ να τον αποκαταστήσω;
Θα πρέπει να εισέλθετε στο sysinstall(8) και να επιλέξετε Configure και κατόπιν Fdisk. Επιλέξτε το δίσκο στον οποίο βρίσκεται κανονικά ο Φορτωτής Εκκίνησης χρησιμοποιώντας το πλήκτρο space. Πιέστε το W για να γράψετε τις αλλαγές στον οδηγό. Θα εμφανιστεί μια προτροπή που θα σας ρωτάει ποιο φορτωτή εκκίνησης να εγκαταστήσει. Κάντε την αντίστοιχη επιλογή και ο φορτωτής εκκίνησης θα αποκατασταθεί.
Σημαίνει ότι μια διαδικασία προσπαθεί να γράψει μια σελίδα μνήμης στο δίσκο, και η απόπειρα αυτή έχει κολλήσει προσπαθώντας να αποκτήσει πρόσβαση στο δίσκο για περισσότερο από 20 δευτερόλεπτα. Αυτό μπορεί να συμβεί από χαλασμένους τομείς στο σκληρό δίσκο, προβληματικά καλώδια, ή άλλο υλικό το οποίο να σχετίζεται με I/O. Αν πρόκειται για προβληματικό δίσκο, θα δείτε επίσης και αντίστοιχα μηνύματα στο /var/log/messages και στην έξοδο της εντολής dmesg. Διαφορετικά, ελέγξτε τις συνδέσεις και τα καλώδια σας.
Το πρόγραμμα οδήγησης ata(4) αναφέρει σφάλματα τύπου «UDMA ICRC» όταν εντοπίσει πρόβλημα στην ορθότητα των δεδομένων σε μια μεταφορά DMA από ή προς τον οδηγό. Το πρόγραμμα οδήγησης θα προσπαθήσει να επαναλάβει τη μεταφορά μερικές φορές. Αν όλες οι απόπειρες αποτύχουν, θα αλλάξει την κατάσταση επικοινωνίας της συσκευής από DMA σε PIO, η οποία είναι πιο αργή.
Το πρόβλημα μπορεί να προκληθεί από πολλούς παράγοντες, αν και ο πιο συνηθισμένος είναι η προβληματική ή λανθασμένη καλωδίωση. Ελέγξτε ότι τα καλώδια ΑΤΑ δεν έχουν υποστεί ζημιά, και ότι είναι κατάλληλων προδιαγραφών για την κατάσταση λειτουργίας Ultra DMA που χρησιμοποιείτε. Αν χρησιμοποιείτε αφαιρούμενα συρτάρια δίσκων, θα πρέπει επίσης να είναι συμβατά. Βεβαιωθείτε ότι υπάρχει καλή επαφή σε όλες τις συνδέσεις. Έχουν επίσης αναφερθεί προβλήματα όταν γίνεται εγκατάσταση ενός παλιού οδηγού στο ίδιο κανάλι DMA με ένα δίσκο Ultra DMA 66 (ή πιο γρήγορο). Τέλος, τα λάθη αυτά μπορεί να σημαίνουν ότι ο δίσκος πρόκειται σύντομα να χαλάσει. Οι περισσότεροι κατασκευαστές δίσκων παρέχουν λογισμικό ελέγχου για τους οδηγούς τους, ελέγξτε λοιπόν το δίσκο σας, και αν χρειάζεται, πάρτε αντίγραφο των δεδομένων σας και αντικαταστήστε τον.
Μπορείτε να χρησιμοποιήσετε το βοηθητικό πρόγραμμα atacontrol(8) για να δείτε και να επιλέξετε την κατάσταση λειτουργίας DMA ή PIO που χρησιμοποιείται από κάθε συσκευή ATA. Πιο συγκεκριμένα, η εντολή atacontrol mode channel θα σας δείξει την κατάσταση λειτουργίας των συσκευών ενός συγκεκριμένου καναλιού ΑΤΑ, όπου το πρωτεύον κανάλι έχει την αρίθμηση 0 κ.ο.κ.
Ο Robert Watson <rwatson@FreeBSD.org>
απάντησε με
σαφήνεια αυτή την ερώτηση στην λίστα freebsd-current, σε μια συζήτηση με τίτλο «lock order reversals - τι σημαίνουν;»
Οι προειδοποιήσεις αυτές προέρχονται από το Witness, ένα διαγνωστικό σύστημα για κλειδώματα κατά τη λειτουργία (run-time lock) το οποίο βρίσκεται στους πυρήνες -CURRENT του FreeBSD (αλλά αφαιρείται στις επίσημες εκδόσεις). Μπορείτε να διαβάσετε περισσότερα για το Witness και τις δυνατότητες του, στη σελίδα manual witness(4). Μεταξύ άλλων το Witness επαληθεύει τη σειρά των run-time locks χρησιμοποιώντας ένα συνδυασμό από ενσωματωμένες σειρές κλειδωμάτων καθώς και από τη σειρά που ανιχνεύεται κατά την εκτέλεση, και παράγει προειδοποιήσεις στην κονσόλα όταν παραβιάζονται. Σκοπός αυτής της λειτουργίας είναι να ανιχνεύονται πιθανά deadlocks τα οποία μπορεί να οφείλονται σε παραβιάσεις της σειράς των κλειδωμάτων. Είναι αξιοσημείωτο ότι το Witness είναι κάπως συντηρητικό, και είναι πιθανόν να δώσει λάθος προειδοποιήσεις. Στην περίπτωση που το Witness αναφέρει ένα πραγματικό πρόβλημα με την σειρά των κλειδωμάτων, είναι σαν να λέει "αν ήσασταν άτυχος, θα σας είχε συμβεί deadlock σε αυτό το σημείο". Υπάρχουν κάποιες γνωστές περιπτώσεις "λανθασμένης διάγνωσης" για τις οποίες χρειάζεται να δημιουργήσουμε καλύτερη τεκμηρίωση ώστε να αποφύγουμε και τις περιττές αναφορές σφαλμάτων. Οι λιγότερο γνωστές περιπτώσεις οφείλονται περισσότερο σε νέα κλειδώματα, καθώς οι αντιστροφές στη σειρά των κλειδωμάτων διορθώνονται γρήγορα επειδή το Witness είναι πάντα απασχολημένο και δημιουργεί συνέχεια νέες προειδοποιήσεις :-). |
||
--Από τον Robert
Watson <rwatson@FreeBSD.org> στη λίστα freebsd-current, στις 14 Δεκεμβρίου 2003 |
Σημείωση: Αυτό που αποκαλούμε "λανθασμένη διάγνωση" δημιουργείται στην πραγματικότητα όταν το Witness βρίσκει κάποιο πολύ πιο σοβαρό λάθος. Τέτοια λάθη είναι τυπικά το σφάλμα σελίδας (page fault) ή λανθασμένα δεδομένα στη μνήμη μέσα στον πυρήνα, ή τέλος σύγκρουση ονομασίας με κάποια mutexes.
Σημείωση: Δείτε την σελίδα του Bjoern Zeeb σχετικά με τις αντιστροφές κλειδωμάτων για την κατάσταση των γνωστών αντιστροφών.
Σημαίνει ότι κλήθηκε μια συνάρτηση με δυνατότητα sleep ενώ την ίδια στιγμή ήταν ενεργό κάποιο κλείδωμα mutex (ή αντίστοιχο χωρίς δυνατότητα sleep).
Ο λόγος για τον οποίο αυτό είναι λάθος είναι επειδή τα mutexes δεν προορίζονται να κρατούνται για μεγάλα χρονικά διαστήματα. Είναι μόνο για τη συντήρηση μικρών περιόδων συγχρονισμού. Αυτή η προγραμματιστική συμφωνία επιτρέπει στους οδηγούς συσκευών να χρησιμοποιούν mutexes για να συγχρονίζονται με τα υπόλοιπα προγράμματα του πυρήνα κατά την διάρκεια των interrupts. Τα interrupts (στο FreeBSD) δεν μπορούν να περιέλθουν σε κατάσταση sleep. Για το λόγο αυτό είναι απαραίτητο να μην μπλοκάρεται ο πυρήνας για μεγάλο διάστημα από κάποιο υποσύστημα που κρατάει ένα mutex.
Για να εντοπιστούν αυτά τα λάθη, μπορούν να προστεθούν υποθέσεις (assertions) στον πυρήνα οι οποίες αλληλεπιδρούν με το υποσύστημα witness για να δώσουν ένα προειδοποιητικό μήνυμα (ή μήνυμα λάθους, ανάλογα με τις ρυθμίσεις του συστήματος) όταν γίνεται μια κλήση η οποία πιθανώς να δημιουργεί μπλοκάρισμα την στιγμή που κρατιέται ένα mutex.
Εν συντομία, αυτού του είδους οι προειδοποιήσεις δεν είναι συνήθως μοιραίες, αλλά υπό ορισμένες ατυχείς προϋποθέσεις, μπορεί να προκαλέσουν ανεπιθύμητα φαινόμενα τα οποία κυμαίνονται από μια στιγμιαία πτώση στην απόκριση του συστήματος, μέχρι πλήρης κατάρρευση.
Το μήνυμα αυτό δεν σημαίνει ότι σας λείπει το βοηθητικό πρόγραμμα touch(1). Το λάθος αυτό προκαλείται συνήθως από λανθασμένη, μελλοντική, σήμανση ημερομηνίας των αρχείων. Αν το ρολόι CMOS του υπολογιστή σας είναι ρυθμισμένο για τοπική ώρα, πρέπει να εκτελέσετε την εντολή adjkerntz -i για να ρυθμίσετε το ρολόι του πυρήνα όταν εκκινείτε σε κατάσταση λειτουργίας ενός χρήστη.
Αυτό το κείμενο, και άλλα κείμενα, μπορεί να βρεθεί στο ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.
Για ερωτήσεις σχετικά με το FreeBSD, διαβάστε την τεκμηρίωση πριν να επικοινωνήσετε με την
<questions@FreeBSD.org>.
Για ερωτήσεις σχετικά με αυτή την τεκμηρίωση, στείλτε e-mail στην <doc@FreeBSD.org>.