linux user group brescia

immagine del castello

Archivio della mailing list

Domanda forse impossibboli...

Luca Giuzzi giuzzi a dmf.bs.unicatt.it
Gio 21 Set 2000 09:44:58 UTC
>    e perche' "solo" gli ultimi 8k? E il resto (cioe`, quello prima)?

Il buffer e' organizzato in modo circolare... sta alle applicazioni e/o all'utente 
 processare i dati che vengono visualizzati dal kernel. Le informnazioni importanti,
 ripeto, devono essere copiate su syslog se si vuole mantenerle... il syslogd c'e'
 apposta per questo.
Ricontrollando i sorgenti del kernel ho visto che la dimensione del buffer e' in effetti
 di 16k e non solo 8... se vuoi si puo' aumentare... e' definita in
kernel/printk.c 
dall'istruzione

#define LOG_BUF_LEN     (16384)
 
...piu' chiaro di cosi' :)

16k sono d'altronde un buon compromesso fra spazio usato (e' memoria allocata dal kernel e
 non swappabile) e funzionalita': su sistemi `normali' bastano ad immagazzinare tutti i messaggi
 emessi dal kernel durante il boot e pure durante il funzionamento normale (bachi di gnome 
 esclusi)...
 In altri casi (tipo su macchine SMP) durante il boot vengono `sparati' fra i 16 e i 18k di
 messaggi... il tutto viene registrato comunque sul syslog (ricordiamo che
 do_syslog() e' pure una funzione di kernel) ma il buffer non basta [e, in fondo, in questi
 casi nemmeno serve... se il sistema parte... se il sistema non parte, allora e' bene
 mettere la console su seriale e registrare la' l'output visto che localmente non
 si arriva mai ad una shell].


Il voler sapere "come si fa'" a realizzare qualchecosa e' comunque una cosa meritevole...

L'unico modo per avere tutti i messaggi registrati in un UNICO file e' di reindirizzare la
 console da schermo a qualche altra parte. La cosa e' fattibile, ma -se si vuole buttarla
 su file-  e' bene essere pronti ad affrontare piu' programmi `not so well behaved' di
 quanto solitamente si vorrebbe: non tutti i programmi eseguiti durante l'inizializzazione
 infatti controllano che file descriptors sono aperti e potrebbero scrivere su una partizione
 disco (non sul filesystem) quello che credono sia mandato su stderr.
[il problema e' l'ordine con cui gli fd sono allocati... e' successo!]

Una soluzione piu' semplice e' quella di dividere la parte registrata dal kernel
 (e salvabile tramite dmesg, se non e' gia' stata salvata dagli script in /var da 
 qualche parte) da quella prodotta dall'avvio dei vari programmi.

Purtroppo la sequenza di boot (dopo che il controllo e' stato passato ad init) e'
 MOLTO distribution-specific, per cui non posso suggerire un metodo "universale" per
 risolvere il tutto. Sotto RH 6.1 (la macchina su cui sto verificando e' una RH6.1 piu'
 qualche modifica) il file da cambiare e' /etc/rc.d/rc
 con l'aggiunta di opportune redirezioni per ogni funzione di stampa...
 [o la modifica di echo]

Ciao,
 lg



Maggiori informazioni sulla lista Lug