Cloud with rain
.:G
G:.
0 and 1 serie, black on white
pulled card
myjsp.feelinglinux.com
ver. 1.1.9-4
Hallo, welcome to my world.
Here you can find some stuff about computer science.
<<< Enjoy your visit! >>>
0 and 1 serie, white on black

L'importanza di leggere i log: un piccolo problema d'harddisk

        Scritto: Giansante Gabriele, 03/01/2003     

Con questo articoletto-esempio, vorrei mettere in evidenza come sia spesso indispensabile dare un'occhiata almeno ogni tanto ai file di log e come sia necessario darsi da fare guardando come funzionano certi meccanismi, al fine di individuare i problemi che possono sorgere. Si possono cosi' limitare i danni.


Cercando in /var/log/messages la presenza di indirizi IP bloccati dal firewall, ho trovato anche dei messaggi di questo tipo:
Jan 3 04:02:58 oneserver kernel: hdb: read_intr: status=0x59 
   { DriveReady SeekComplete DataRequest Error }
Jan 3 04:02:58 oneserver kernel: hdb: read_intr: error=0x40 
  { UncorrectableError }, LBAsect=50331874, sector=50331811
Jan 3 04:02:58 oneserver kernel: end_request: I/O error, dev
   03:41 (hdb), sector 50331811
Jan 3 04:02:58 oneserver kernel: EXT2-fs error (device ide0(
  3,65)): ext2_read_inode: unable to read inode block - ino
  de=3133921, block=6291476
ripetuti alcune decine di volte, consecutivamente, identici a meno dell'ora e degli inode.
Le due righe precedenti a questa serie sono:
Jan 3 04:02:00 oneserver CROND[7697]: (root) CMD (run-parts 
   /etc/cron.daily)
Jan 3 04:02:00 oneserver anacron[7701]: Updated timestamp fo
   r job `cron.daily' to 2003-01-03
E' evidente che si e' trattato di un problema di harddisk. So che tale harddisk e' difettoso e gia' una volta ne ho isolato una partizione con settori danneggiati (ho dovuto spostare "/var" su un altro harddisk!!!). Il problema principale e' nello scoprire chi cerca di accedere a settori danneggiati e quali file si vogliono aprire.
Da quanto e' scritto nel log: si tratta del secondo harddisk (hdb), che contiene solo "/home"; e' solo un problema di lettura, non di scrittura (unable to read inode block); l'orario e' quello di esecuzione del cron giornaliero ("/etc/cron.daily/*") e non e' "anacron" (anacron[7701]: Updated timestamp ...) a provocare il problema.
Altro non si puo' dire o comunque altre informazioni non mi interessano.

Trattandosi del cron giornaliero, quindi bisogna dare un'occhiata a /etc/cron.daily/.
[root@oneserver /var/log]# ls /etc/cron.daily/    
0anacron  logrotate  makewhatis.cron  modbandwidth.sh  slocate.cron  
slrnpull-expire  tetex.cron  tmpwatch
[root@oneserver /var/log]#
0anacron non puo' essere perche' ha compiuto il proprio dovere prima che si verificassero gli errori.
logrotate non puo' essere perche' si tratta della rotazione dei log e per come e' stato configurato il server in esame, non esistono log sul secondo harddisk.
Veniamo a makewhatis.cron. In sostanza, quello che fa e' creare un file di lock e chiamare "makewhatis -u -w" con determinati parametri. Il file di lock non e' su hdb (e comunque si tratta di una scrittura con "touch"). Il comando makewhatis, legge tutte le pagine del manuale dal percorso ricavato con "man --path" (opzione -w) e scrive nel DB di whatis (nome, breve descrizione). Ma le pagine del manuale ed il db di whatis non sono su hdb.
Dopo makewhatis.cron viene modbandwidth.sh, uno script di gestione dei file temporanei usati per la moderazione di banda... non interessa, non agisce su hdb.
E' il momento di slocate.cron. Guardandone il sorgente, ho scoperto che viene chiamato solamente
/usr/bin/updatedb 
   -f "nfs,smbfs,ncpfs,proc,devpts" 
   -e "/tmp,/var/tmp,/usr/tmp,/afs,/net"
"updatedb" serve a catalogare i nomi dei file in una base di dati usata da "find" e "locate".
L'opzione "-f" indica i tipi di filesystem da escludere nella ricerca di tutti i nomi di file, mentre l'opzione "-e" indica le directory da escludere.
Forse sono arrivato ad una prima conclusione. Le restrizioni non includono alcuna directory su hdb e quindi questo puo' essere la causa degli errori. Ho provato a lanciare a mano il comando, aggiungendo l'opzione "-v" (verbose), eseguendo contemporaneamente, su un'altra shell, un "tail -f /var/log/messages".
Appena grazie al tail ho osservato i primi errori di lettura, ho subito bloccato l'esecuzione manuale di updatedb.
Jan  3 13:58:24 oneserver kernel: hdb: read_intr: status=0x59
   { DriveReady SeekComplete DataRequest Error }
Jan  3 13:58:24 oneserver kernel: hdb: read_intr: error=0x40 
  { UncorrectableError }, LBAsect=50331874, sector=50331811
Jan  3 13:58:24 oneserver kernel: end_request: I/O error, dev
   03:41 (hdb), sector 50331811
Jan  3 13:58:24 oneserver kernel: EXT2-fs error (device ide0(
  3,65)): ext2_read_inode: unable to read inode block - inode=31
  33921, block=6291476

Jan  3 13:58:29 oneserver kernel: hdb: read_intr: status=0x59
   { DriveReady SeekComplete DataRequest Error }
Jan  3 13:58:29 oneserver kernel: hdb: read_intr: error=0x40 
  { UncorrectableError }, LBAsect=50331874, sector=50331811
Jan  3 13:58:29 oneserver kernel: end_request: I/O error, dev
   03:41 (hdb), sector 50331811
Jan  3 13:58:29 oneserver kernel: EXT2-fs error (device ide0(
  3,65)): ext2_read_inode: unable to read inode block - inode=31
  33922, block=6291476

Jan  3 13:58:36 oneserver kernel: hdb: read_intr: status=0x59
   { DriveReady SeekComplete DataRequest Error }
Jan  3 13:58:36 oneserver kernel: hdb: read_intr: error=0x40 
  { UncorrectableError }, LBAsect=50331874, sector=50331811
Jan  3 13:58:36 oneserver kernel: end_request: I/O error, dev
   03:41 (hdb), sector 50331811
Jan  3 13:58:36 oneserver kernel: EXT2-fs error (device ide0(
  3,65)): ext2_read_inode: unable to read inode block - inode=31
  33927, block=6291476
Grazie all'opzione "-v" che stampa a video i nomi dei file, ho individuato quelli mi danno problemi ed in particolare la directory che li contiene.
Ho eseguito "e2fsck -nv /dev/hdb1", giusto per avere la conferma ufficiale che qualche problema c'e'!
[root@oneserver /]# e2fsck -nv /dev/hdb1
e2fsck 1.18, 11-Nov-1999 for EXT2 FS 0.5b, 95/08/09
Warning!  /dev/hdb1 is mounted.
/dev/hdb1 contains a file system with errors, check forced.
Pass 1: Checking inodes, blocks, and sizes
Error reading block 6291476 (Attempt to read block from filesystem 
  resulted in short read) while doing inode scan.  Ignore error? no

Error while scanning inodes (3133696): Can't read next inode
Ho quindi isolato il problema, in modo da poter trovare una soluzione temporanea (in attesa di poter sostituire il disco o di poter almeno marcare come "bad" i blocchi difettosi). Mi e' bastato inserire la directory individuata fra quelle da non esaminare (parametri di updatedb).

Appena possibile dovro' usare e2fsck e badblocks per cercare di correggere i problemi e marcare i blocchi come difettosi. La sostituzione dell'harddisk, e' comunque sempre la soluzione migliore e piu' sicura, anche se questo harddisk regge in queste condizioni da circa un anno senza perdere colpi... non troppi ;-)


Hai trovato utile questo articolo?
Aiutami a condividerlo o metti un "mi piace".
Grazie mille!


Gli strumenti di condivisione (Google+, Facebook) sono visibili in alto a destra solo dopo aver accettato la policy di utilizzo dei cookie per questo sito.
FAQ - Come faccio a cambiare la mia scelta?

 

Strumenti (myjsp.feelinglinux.com)
Gioco: allenamento con la tastiera Strumenti di codifica/decodifica URI (%-encoding) e Base64 Strumenti di calcolo online per IP e Reti
QUIZ GAME
Quiz game

Cerca @myjsp.feelinglinux.com

Pubblicita'