Hai dei registri fuori controllo. Invece di eliminare come un matto ogni giorno, trova il file oi file in rapida crescita e guarda dentro per scoprire cosa potrebbe causare questo. Forse un programma gira in loop registrando una condizione. Disabilita quel programma, disabilita la sua registrazione o prova a correggere la condizione di cui si lamenta.
Se un file cresce davanti ai tuoi occhi e non hai idea di quale programma vi stia scrivendo, potresti scoprirlo facilmente. Ecco un esempio Chi ha /var/log/syslog
aperto? Usiamo il fuser
comando:
# fuser /var/log/syslog
/var/log/syslog: 602
È /var/log/syslog
aperto solo un processo . È il processo 602. Cos'è quello? Non preoccupiamoci di ps
e grep
, ma guardiamo /proc
direttamente al filesystem:
# ls -l /proc/602/exe
lrwxrwxrwx 1 root root 0 Mar 29 17:45 /proc/602/exe -> /usr/sbin/rsyslogd
Ah, lo è rsyslogd
. Non siamo sorpresi che si rsyslogd
sia /var/log/syslog/
aperto.
Questo metodo non è garantito per funzionare. Il motivo è che i programmi non devono tenere aperti i file per poter scrivere su di essi. Supponiamo di avere un processo che apre un file, lo accoda e poi lo chiude. Avrai un'indagine un po 'più difficile. Potresti correre fuser
molte volte fino a quando per caso non prendi il processo "in flagrante". Questo stesso processo potrebbe entrare e uscire rapidamente dall'esistenza. Un altro problema è che più processi potrebbero avere il file aperto, ma solo uno lo sta ingrandendo. In tal caso, è possibile tracciare le loro chiamate di sistema.
# fuser /var/log/huge-annoying-file
/var/log/huge-annoying-file: 1234 23459
Oops! Sono aperti due processi: 1234 e 23459. Vediamo cosa stanno facendo:
# strace -p 1234
Process 1234 attached - interrupt to quit
select(1, NULL, NULL, NULL, {9, 922666}
Non sta facendo nulla, sta solo bloccando una select
chiamata. Ctrl-C per interrompere la traccia:
select(1, NULL, NULL, NULL, {9, 922666}^C <unfinished ...>
Controlla il prossimo:
# strace -p 23459
write(5, "Useless garbage ..."..., 512) = 512
write(5, "More useless garbage ..."..., 512) = 512
write(5, "More useless garbage ..."..., 512) = 512
write(5, "More useless garbage ..."..., 512) = 512
write(5, "More useless garbage ..."..., 512) = 512
write(5, "More useless garbage ..."..., 512) = 512
write(5, "More useless garbage ..."..., 512) = 512
^C
Oops, quello sta scrivendo costantemente. Deve essere quello cattivo. Possiamo persino verificare che il descrittore di file 5 su cui sta scrivendo il processo sia in realtà il file di grandi dimensioni:
# ls -l /proc/23459/fd/5
lr-x------ 1 root root 64 Apr 3 23:39 /proc/23459/fd/5 -> /var/log/huge-annoying-file
Non sospetto che tu abbia un filesystem corrotto, ma per forzare un controllo completo, non devi avviare un DVD.
Innanzitutto, rivedi l'impostazione del numero massimo di montaggi del tuo filesystem. Identifica la tua partizione usando il comando df. Esempio su un sistema Ubuntu che ho qui:
# df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda1 18062108 5499320 11645284 33% /
udev 392152 4 392148 1% /dev
tmpfs 159768 768 159000 1% /run
none 5120 0 5120 0% /run/lock
none 399416 200 399216 1% /run/shm
/dev/sr0 43668 43668 0 100% /media/VBOXADDITIONS_4.1.4_74291
Puoi vedere che il /
filesystem è montato /dev/sda1
. Lo stesso /dev/sda1
vale per il dispositivo di archiviazione della partizione root (e l'unica partizione in questo particolare sistema).
Diamo un'occhiata ad alcuni attributi di quel file system. Questo è sicuro da fare anche se è montato. Il comando emette molto output. Ecco un estratto:
$ dumpe2fs /dev/sda1
dumpe2fs 1.42 (29-Nov-2011)
Filesystem volume name: <none>
Last mounted on: /
[ ... SNIP ... ]
Last mount time: Fri Mar 29 17:45:18 2013
Last write time: Tue Mar 5 09:08:03 2013
Mount count: 22
Maximum mount count: 22
[ ... SNIP ... ]
Ehi guarda, il conteggio delle montature è uguale al conteggio delle montature massimo. La prossima volta che riavvio, ci sarà un controllo del filesystem. L'importante è che il numero di mount sia un valore positivo. Se il tuo è zero, modificalo in un valore positivo come 22 usando tune2fs -c 22 /dev/whatever
. Zero significa che un controllo non viene mai forzato indipendentemente da quante volte è montata la partizione. I sistemi raramente riavviati dovrebbero avere valori bassi qui. Un server che si arresta una volta all'anno potrebbe probabilmente usare un fsck ogni volta che si riavvia. È inoltre possibile impostare intervalli di controllo basati sulla data.
Ora per forzare un controllo, puoi sovrascrivere il conteggio effettivo in modo che sia maggiore o uguale al massimo, quindi riavviare. Questo è fatto con il capitale C
: tune2fs -C 1234 /dev/whatever
. Ora la partizione sembra essere stata montata 1234 volte senza un controllo, che è maggiore del massimo di una o due cifre.
sudo du -sh /var/* ~/.xsession-errors
favore? (quei due posti che mi aspetterei di esplodere se c'è qualcosa di sciocco). Altrimenti, sono con Eliah - questo è indicativo di problemi con il disco. Prendi questo sul serio.