Naprej Nazaj Kazalo

9. Najpogostejša sporočila o napakah

9.1 Modprobe can't locate module, XXX in podobno

(Program modprobe ne najde modula ,,XXX``.)

Te vrste sporočila se pokažejo predvsem ob zagonu ali izklopu sistema. Če se modprobe, insmod, ali rmmod pritožujejo, da ne najdejo modula, dodajte naslednje v datoteko /etc/modules.conf ali v /etc/modutils/aliases, katero pač že imate v svojem sistemu:

alias <ime_modula> off
In uporabite ime modula, ki se pokaže v sporočilu o napaki.

[J. H. M. Dassen]

9.2 Unknown terminal type linux (neznan tip terminala linux) in podobno.

V zgodnjih jedrih so razvijalci spremenili privzeto vrsto zaslona s console na linux. Popraviti morate datoteko /etc/termcap in spremeniti vrstico, ki se glasi

console|con80x25:\
v vrstico
linux|console|con80x25:\

(Morda je v tej vrstici še beseda dumb; če je, jo odstranite.)

Če želite, da bo vaš urejevalnik besedil deloval normalno, morate morda najprej za lupini bash in ksh napisati:

$ TERM=console
ali za lupino csh ali tcsh:
$ setenv TERM console

Nekateri programi namesto datoteke /etc/termcap uporabljajo datoteko /usr/lib/terminfo. Za uporabo takih programov morate nadgraditi terminfo, ki je del ncurses.

Enako velja za prikaze v X-terminalih. Če vaša distribucija nastavi TERM na nekaj čudnega kot xterm-24-color, ga lahko v ukazni vrstici preprosto vnovič nastavite na splošno vrednost:

$ TERM="xterm"; export TERM
Namesto xterm lahko po potrebi uporabite tudi vt100 ali kaj drugega.

9.3 INET: Warning: old style ioctl... called!

(INET: Pozor: kličete zastarel ioctl.)

Poskušate uporabljati stare pripomočke za nastavitev omrežja. Nove najdete na mestu ftp://ftp.linux.org.uk/pub/linux/Networking/PROGRAMS/NetTools/ (žal le izvirno kodo).

Upoštevajte, da teh programov ne morete uporabljati tako kakor starejših. Oglejte si NET-2 HOWTO za navodila o pravilni nastavitvi starejših omrežnih programov. Še bolje: oglejte si NET-3 HOWTO in nadgradite svoje omrežno programje.

9.4 ld: unrecognized option '-m486'

(ld: neznana izbira '-m486')

Uporabljate staro različico povezovalnika ld. Namestite novejši paket binutils -- vsebuje tudi najnovejši ld. Poglejte na ftp://tsx-11.mit.edu/pub/linux/packages/GCC/, datoteka je binutils-2.6.0.2.bin.tar.gz.

9.5 GCC sporoči notranjo napako: Internal compiler error.

Če je napaka ponovljiva (tj. vedno se pokaže na istem kraju na isti datoteki -- tudi če znova zaženete računalnik in poskusite še enkrat, s stabilnim jedrom), ste odkrili hrošč prevajalnika GCC. Pošljite opis hrošča razvijalcem -- podrobnosti si oglejte v dokumentaciji GCC Info (F1-i v Emacsu in izberite GCC) -- preverite, ali imate zadnjo dostopno različico GCC.

Težava pravzaprav verjetno ni specifična za Linux; če niste prevajali programa, ki ga prevaja veliko uporabnikov Linuxa, ne pošiljajte poročila o napaki v skupine comp.os.linux.*.

Če napaka ni ponovljiva, imate verjetno težave s pomnilnikom -- glej razdelek make pravi Error 139.

9.6 make pravi Error 139

(Napaka št. 139.)

Vaš prevajalski gonilnik (gcc) je izvrgel posmrtne ostanke. Verjetno imate pokvarjeno, hroščato ali staro različico GCC -- omislite si najnovejšo izdajo EGCS. Lahko pa vam tudi zmanjkuje izmenjalnega prostora -- več o tem v razdelku Zakaj moj računalnik deluje zelo počasi, ko uporabljam GCC/X/...?.

Če to ne odpravi težav, imate verjetno pokvarjen pomnilnik ali disk. Preverite frekvenco ure, čakalna stanja in osvežilne čase za vaše čipe SIMM in predpomnilnik (včasih se moti tudi strojni priročnik). Če je vse nastavljeno, kot mora biti, imate najbrž zanič SIMM ali matično ploščo ali disk ali krmilnik.

Kot drugi Unixi je tudi Linux zelo dober preizkuševalnik pomnilnika -- veliko boljši kakor dosovski, posebej za to namenjeni programi.

Poročajo, da povzročajo kloni nekaterih matematičnih koprocesorjev x87 določene težave; poskusite prevesti jedro s posnemanjem matematičnih ukazov, glej Kako prevedem/nadgradim jedro?. Morda boste morali uporabiti v pozivniku LILO ukaz no387, da bo jedro uporabljalo posnemanje, ali pa bo posnemanje uporabljalo samo včasih, večinoma pa pravi koprocesor.

Veliko več informacij o tem najdete v svetovnem spletu na http://www.bitwizard.nl/sig11/.

9.7 shell-init: permission denied, ko se prijavim.

Branje in poganjanje programov v vašem korenskem imeniku in vseh imenikih do vašega domačega mora biti dostopno vsem. Za odpravo težav si oglejte stran v priročniku za chmod (man chmod) ali kakšno knjigo o Unixu.

9.8 No utmp entry. You must exec ..., ko se prijavim.

Vaša datoteka /var/run/utmp je zavožena. V svojih prijavnih skriptih /etc/rc.local ali /etc/rc.d/* morate imeti vrstico:

> /var/run/utmp

Glej razdelek Kako lahko popravim svoj sistem, če sem ga zavozil in se ne morem prijaviti?. Vedite, da lahko v starejših sistemih najdete utmp tudi v imenikih /var/adm/ ali /etc/.

9.9 Warning--bdflush not running.

Sodobna jedra uporabljajo boljšo strategijo za pisanje predpomnjenih diskovnih blokov. Poleg sprememb v jedru to zajema tudi zamenjavo starega programa update, ki je izpisoval vse na vsakih 30 sekund, z novejšim, bolj izpiljenim demonom (pravzaprav z dvema), imenovanim bdflush. Omislite si datoteko bdflush-n.n.tar.gz z mesta, na katerem ste dobili izvirno kodo jedra (razdelek Kako nadgradim/prevedem jedro?) in ga prevedite ter namestite; zagnati se mora pred običajnim zagonskim preverjanjem datotečnega sistema. Novi demon bo odlično deloval tudi s starimi jedri, zato ni razloga, da bi še obdržali stari update.

9.10 Warning: obsolete routing request made.

(Pozor: poslali ste zastarelo zahtevo po usmerjanju.)

Nikar si ne delajte skrbi; to pomeni le, da je različica vašega programa route nekoliko zastarela glede na jedro. Sporočilo lahko izklopite tako, da dobite novo različico route z istega mesta kot izvirno kodo jedra (razdelek Kako nadgradim/prevedem jedro?).

9.11 EXT2-fs: warning: mounting unchecked filesystem.

(EXT2-fs: pozor: nameščam nepregledan datotečni sistem.)

Pognati morate e2fsck (ali fsck -t ext2, če ga imate) z izbiro -a, ki zbriše zastavico ,,umazanosti`` in potem na čisto odmesti razdelek po vsakem pravilnem izklopu sistema.

Najlaže to storite z najnovejšimi ukazi fsck, umount in shutdown. Dobite jih v paketu Rika Faitha util-linux (glej razdelek Kako dobim stvari za Linux po FTP?). Preverite, ali jih prijavni skripti /etc/rc* uporabljajo pravilno.

NB: Ne poskušajte preverjati datotečnega sistema, ki je nameščen v bralno-pisalnem načinu -- to zajema korenski razdelek, če ob zagonu ne vidite sporočila

VFS: mounted root ... read-only

Urediti morate tako, da se korenski datotečni sistem namesti le v bralnem načinu, se preveri, če je treba, in potem namesti v bralno-pisalnem načinu. Preberite si dokumentacijo z util-linux za podrobnosti.

Upoštevajte, da morate določiti pri ukazu mount izbiro -n in tako preprečiti, da bi osvežil /etc/mtab, saj je korenski datotečni sistem še vedno le bralni in lahko sicer mount spodleti!

9.12 EXT2-fs warning: maximal count reached.

To sporočilo izpiše jedro, ko namesti datotečni sistem, označen kot ,,čist``, katerega ,,število priklopov po zadnjem preverjanju`` pa presega določeno vrednost. Rešitev je poiskati najnovejšo različico uporabnih programov za ext2fs (v času pisanja je to e2fsprogs-0.5b.tar.gz) na običajnih mestih (glej razdelek Kako dobim stvari za Linux po FTP?).

Največje število priklopov (mount) lahko vidite in spremenite s programom tune2fs iz tega paketa.

9.13 EXT2-fs warning: checktime reached.

(Čas za pregled datotečnega sistema.)

Jedra od različice 1.0 naprej podpirajo preverjanje datotečnega sistema na določen čas ali na določeno število priklopov. Omislite si najnovejšo različico uporabnih programov za ext2fs (glej razdelek EXT2-fs warning: maximal count reached.).

9.14 df izpiše Cannot read table of mounted filesystems.

Verjetno je nekaj narobe z datoteko /etc/mtab ali /etc/fstab. Če imate skoraj novo različico programa mount, morate ob zagonu izprazniti ali zbrisati datoteko /etc/mtab (to določite v /etc/rc.local ali /etc/rc.d/*), nekako takole:

$ rm -f /etc/mtab*

Nekatere starejše distribucije Linuxa so naredile vnos za korenski razdelek v /etc/mtab z uporabo rdev v /etc/rc*. To je napačno -- nove različice ukaza mount to storijo samodejno.

Druge starejše distribucije imajo tako vrstico v /etc/fstab:

/dev/sdb1 /root ext2 defaults

Tudi to je napačno, vnos /root bi se moral glasiti preprosto /.

9.15 fdisk izpiše Partition X has different physical/logical ...

Če je število razdelka (X, zgoraj) enako 1, je to enak problem kakor v razdelku fdisk: Partition 1 does not start on cylinder boundary.

Če se razdelek začne ali konča s številko cilindra, večjo od 1024, je to zato, ker se standardna dosovska informacija o geometriji diska ne zna spopadati s števili cilindrov, večjimi od 10 bitov. Glej razdelek Kako naj prepričam Linux, da bo delal z mojim diskom?.

9.16 fdisk: Partition 1 does not start on cylinder boundary

Različica fdisk, priložena številnim linuxaškim sistemom, ustvari razdelke, ki ne ustrezajo niti lastnemu preverjanju. Žal ne morete storiti veliko, če ste že namestili svoj sistem, razen da prepišete podatke z razdelka, ga zbrišete, na novo ustvarite in prepišete podatke nazaj.

Problemom se lahko izognete z uporabo najnovejšega fdisk, ki je v paketu Rika Faitha util-linux (dostopnega na vseh običajnih mestih za FTP). Alternativa temu, če ustvarjate novi razdelek št. 1, ki se začne na prvem cilindru, bi bila, da naredite naslednje (za ustvaritev razdelka, ki je všeč fdisku):

  1. Na običajen način naredite razdelek št. 1 s fdiskom. Izpis p bo izpisal pritožbo, da je z razdelkom nekaj narobe.
  2. Napišite u, da nastavite sektorski način in spet naredite p. Prepišite številko s stolpca End.
  3. Zbrišite razdelek št. 1.
  4. Še vedno v sektorskem načinu, spet ustvarite razdelek št. 1. Nastavite prvi sektor tako, da se bo ujemal s številom sektorjev na sled. To je sektorsko število prve vrstice izhoda p. Nastavite zadnji sektor na vrednost, opisano zgoraj v drugi točki.
  5. Napišite u za vnovični zagon cilindrskega načina in nadaljujte z drugimi razdelki.

Prezrite sporočila o nealociranih sektorjih -- nanašajo se na sektorje prve sledi, razen tistih iz glavnega zagonskega zapisa (Master Boot Record), ki se ne uporabljajo, če zaženete prvi razdelek na 2. sledi.

9.17 fdisk izpiše partition n has an odd number of sectors.

Diskovna razdelitvena shema v računalnikih PC deluje s 512-zlogovnimi sektorji, vendar Linux uporablja bloke velikosti 1 Kb. Če imate razdelek z lihim številom sektorjev, ostane zadnji sektor neuporabljen. Prezrite sporočilo.

9.18 mtools izpiše cannot initialize drive X

To pomeni, da mtools nima dostopa do pogona. Vzrokov je lahko več.

Pogosto je to zaradi napačnih dovoljenj disketnih napravah (/dev/fd0* in /dev/fd1*) -- uporabnik, ki kliče mtools, mora imeti ustrezen dostop. Za podrobnosti si oglejte referenčni priročnik, kako se uporablja chmod.

Večina različic mtools, ki jih dobite poleg Linuxa (a ne standardna različica GNU), uporablja vsebino datoteke /etc/mtools za podatek o tem, katere naprave in gostote zapisa naj uporablja, namesto da bi imela to informacijo prevedeno v izvedljivi datoteki. Pogosto to sploh ni dokumentirano.

Najlažji dostop do dosovskih datotek (predvsem tistih na razdelkih diska) najdete v razdelku Kako dostopam do datotek na dosovskem razdelku ali disketi?. Pazite, da ne boste nikoli uporabljali mtools za dostop do datotek na razdelku, priklopljenim z datotečnim sistemom msdosfs.

9.19 Na začetku zaganjanja sistema: Memory tight

To pomeni, da imate zelo veliko jedro, kar pomeni, da mora Linux opravljati posebne čarovnije s pomnilnikom, da bi se lahko zagnal z biosa. To dejstvo ni povezano s količino fizičnega pomnilnika v vašem stroju. Ignorirajte sporočilo ali prevedite jedro le z gonilniki in lastnostmi, ki jih potrebujete (glej vprašanje Kako nadgradim/prevedem jedro?).

9.20 Moj sistemski dnevnik pravi `end_request: I/O error, ...'.

To sporočilo o napaki in podobna sporočila skoraj vedno kažejo na strojno napako, povezano z diskom.

To je splošni indikator strojne napake. Edini način, kako preprečiti nadaljnjo izgubo podatkov je popoln, pravilen izklop sistema (s shutdown). Zagotoviti morate tudi, da so vsi podatki na pogonu rezervno arhivirani, in jih obnoviti na delujočem disku.

To sporočilo o napaki lahko pomeni tudi slabo povezavo s pogonom, posebno pri doma narejenih sistemih. Če sami nameščate disk IDE, vedno uporabite nove kable. Najbrž je to dobra zamisel tudi pri diskih SCSI.

V nekem primeru je ta problem sovpadal z ozemljitvenimi težavami med sistemsko ploščo in ohišjem enega od strojev. Preden zvalite krivdo na disk, preverite, ali so vse električne povezave čiste in trdne.

[Peter Moulder, Theodore T'so]

9.21 You don't exist. Go away.

(Ne obstajaš. Izgini!)

Ne gre za okužbo z virusom. To sporočilo pride od programov, kot so write, talk in wall, če kličoče število UID ne ustreza nobenemu uporabniku (verjetno zato, ker je datoteka /etc/passwd pokvarjena) ali če zveza (navadno psevdoterminal) ni pravilno zapisana v utmp (verjetno zato, ker ste jo čudno vzpostavili).

9.22 Operation not permitted.

(Operacija ni dovoljena.)

Eden ali več bitov z lastnostmi datoteke ali imenika je nastavljen nepravilno. Če je, na primer, nastavljen bit ,,I``, ne boste mogli spreminjati dovoljenja datoteke s chmod.

Rešitev je, da uporabite lsattr za prikaz lastnosti datoteke in imenika, in chattr, da jih prižgete ali ugasnete. Dokumentacija o programih je na straneh referenčnega priročnika.

[Paul Campbell]

9.23 ime programa: error in loading shared libraries: lib.xxx.so.

Ali tudi: x: cannot open shared object file: No such file or directory.

Podobno sporočilo, ko program, ki ga skušate zagnati, uporablja deljene knjižnice, navadno pomeni eno od dvojega: program je bodisi preveden na stroju z drugim naborom knjižnic ali poti do knjižnic, kot so vaše; ali pa ste nadgradili svoje knjižnice, ne pa tudi programa.

Izvedljivi programi, ki so povezani z dinamičnimi knjižnicami, pričakujejo polno ime do vsake knjižnične datoteke, ki jih zahtevajo. Deljene knjižnice, ki se zanašajo na druge knjižnice, prav tako. To je zato, da so odvisnosti med odvisnostmi deljenih predmetov jasne, kolikor je mogoče, in zaradi varnosti.

Če ne morete prevesti izvedljive datoteke, je verjetno dolgoročno najbolj zaželena alternativa, da ugotovite, katere knjižnice izvedljiva datoteka potrebuje z ukazom:

ldd ime-programa
Izhod je seznam deljenih knjižnic v sistemu, ki jih mora program poganjati, kot tudi manjkajoče knjižnice. Potem lahko dodaste knjižnične pakete ali pa, če knjižnice že obstajajo v drugem imeniku, lahko ustvarite simbolno povezavo, da jih program lahko najde. Na primer, če program zahteva /usr/lib/libncurses.so.2 in ima vaš stroj /lib/libncurses.so.2, lahko ustvarite povezavo, kjer program pričakuje, da bo našel knjižnico, npr.:
# cd /usr/lib && ln -s /lib/libncurses.so.2 .
Vedeti pa morate, da lahko ustvarjanje povezav do knjižnic kot te smatramo tudi za varnostno tveganje, in da dodatne povezave, ki jih boste ustvarili, ne bodo združljive s prihodnjimi nadgradnjami. To je le hiter popravek za združljivost nazaj.

Morda bo treba tudi nekaj ugibanja, da bi ugotovili, v natanko katerem od sistemskih knjižničnih imenikov program pričakuje, da bo našel datoteko z deljeno knjižnico, saj ldd ne našteva poti do knjižnic, ki jih ne more najti. Program bo verjetno povedal tekočemu povezovalniku /lib/ld.so, naj gleda za deljene knjižnice v /lib, /usr/lib, /usr/local/lib ali /usr/X11R6/lib, če je odjemnik za X. Vendar to ne pomeni, da knjižnic ni moč namestiti drugam. Pomaga, če imate pred nadaljevanjem nekaj pojma o izvirni nastavitvi knjižnic.

Preverite tudi, ali po izdelavi simbolne povezave poganjate ldconfig, tako da ima ld.so osveženi pogled sistemskih knjižnic. Preveriti morate tudi, ali so vsi knjižnični imeniki našteti v /etc/ld.so.conf in morda v okoljski spremenljivki LD_LIBRARY_PATH.

9.24 init: Id "x" respawning too fast: disabled for 5 minutes.

(init: Id "x" se prehitro znova vali: onemogočeno za 5 minut.)

V večini distribucij to pomeni, da se sistem privzeto zaganja v raven teka 5, ki naj bi znova izvalil (znova zagnal, ko zapustite) grafično prijavo prek xdm, kdm, gdm ali česarkoli že, in sistem ne najde programa.

Vendar lahko ,,Id`` pomeni tudi odsotnost ali napačno nastavitev drugega programa, kot mingetty, če init skuša znova izvaliti sebe več kot desetkrat v 2 minutah.

Id ,,x`` je številka najbolj levega stolpca v datoteki /etc/inittab:

# Run gettys in standard runlevels
1:2345:respawn:/sbin/mingetty tty1
2:2345:respawn:/sbin/mingetty tty2
3:2345:respawn:/sbin/mingetty tty3
4:2345:respawn:/sbin/mingetty tty4
5:2345:respawn:/sbin/mingetty tty5
6:2345:respawn:/sbin/mingetty tty6
Če zakomentirate kritično vrstico in potem popravite pokvarjeni program in ga preskusite v ukazni vrstici, boste videli sporočila o napakah, ki gredo na standardni izhod za napake (konzolo), če napake ne gredo v sistemsko dnevniško datoteko. Odkomentirajte vrstico in znova zaženite init s ,,kill -SIGHUP 1`` ali ,,telinit q``, da se init znova inicializira in prebere datoteko /etc/inittab.

Po drugi strani pa nekateri sistemi med zagonom pišejo prek /etc/inittab. V tem primeru si oglejte stran referenčnega priročnika za init in/ali nastavitve v /etc/sysconfig/init.

Za podrobne informacije si oglejte referenčne strani za init in /etc/inittab.

[Carl King]

9.25 Strežnik FTP pravi: 421 service not available, remote server has closed connection.

(Storitev 421 ni na voljo, oddaljeni strežnik je zaprl povezavo.)

Če strežnik FTP ne dovoljuje prijav, je verjetno pravilno nastavljen, a težava je verjetno pri istovetenju uporabnikov med prijavo. Strežniki za FTP v trenutnih distribucijah pogosto istovetijo uporabnike s knjižnico PAM (angl. Pluggable Authentication Modules, vstavljivi moduli za istovetenje), in v tem primeru bi morala biti na voljo datoteka za istovetenje /etc/pam.d/ftp. Splošna datoteka za istovetenje bi morala biti videti takole. (Prelom prve vrstice ,,auth`` je zaradi lažjega branja. Ta vnos je pravzaprav ena sama dolga vrstica.)

#%PAM-1.0
auth                required /lib/security/pam_listfile.so item=user
                    sense=deny file=/etc/ftpusers onerr=succeed
auth                required /lib/security/pam_pwdb.so shadow nullok
auth                required /lib/security/pam_shells.so
account             required /lib/security/pam_pwdb.so
session             required /lib/security/pam_pwdb.so
Prepričajte se tudi, da je datoteka /etc/ftpusers ali katerakoli datoteka z uporabniki v prvi vrstici ,,auth`` pravilno nastavljena.

Mimogrede, vzorčna datoteka ftp zgoraj je pravzaprav datoteka ftpd/ftp.pam.sample iz paketa ftpd-BSD-0.3.1.tar.gz. Hvala lepa Davidu A. Madoreu za ta prenos, ki smo ga zelo potrebovali.


Naprej Nazaj Kazalo