2014-04-07 13:42:39 +0000 2014-04-07 13:42:39 +0000
26
26

cancellare i file ma lo spazio su disco è ancora pieno

Ho a che fare con una vecchia scatola CentOS 5.6, senza configurazione lvm, il mio root file system / è pieno, ho cancellato molti vecchi file di log e file di applicazioni che non mi servono, che era più di 2 -5GB di dimensione, tuttavia il mio sistema segnala ancora che il disco è pieno.

[root@tornms1 ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 130G 124G 0 100% /
/dev/sdb1 264G 188M 250G 1% /data
/dev/sda1 99M 24M 71M 26% /boot
tmpfs 2.0G 0 2.0G 0% /dev/shm

[root@tornms1 ~]# mount
/dev/sda3 on / type ext3 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
/dev/sdb1 on /data type ext3 (rw)
/dev/sda1 on /boot type ext3 (rw)
tmpfs on /dev/shm type tmpfs (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)

Qualche idea su cosa dovrei provare a fare dopo? Purtroppo riavviare la scatola non è un'opzione in questo momento.

Risposte (9)

38
38
38
2014-04-07 14:02:13 +0000

Qui potrebbero accadere due cose.

Primo, il vostro filesystem ha riservato dello spazio su cui solo root può scrivere, in modo che i processi critici del sistema non cadano quando gli utenti normali finiscono lo spazio su disco. Ecco perché vedi 124G di 130G usati, ma zero disponibili. Forse i file che hai cancellato hanno portato l'utilizzo a questo punto, ma non sotto la soglia per gli utenti normali.

Se questa è la tua situazione e sei disperato, potresti modificare la quantità di spazio riservato a root. Per ridurlo all'1% (il default è il 5%), il tuo comando sarebbe

# tune2fs -m 1 /dev/sda3

Secondo, il sistema operativo non rilascia spazio sul disco per i file cancellati che sono ancora aperti. Se hai cancellato (per esempio) uno dei file di log di Apache, dovrai riavviare Apache per liberare lo spazio.

18
18
18
2015-09-24 09:32:08 +0000

Se cancellate un file che viene usato da un processo, non potete più visualizzare il file da ls. Il processo sta ancora scrivendo su quel file finché non fermate il processo.

Per visualizzare quei file cancellati, eseguite semplicementelsof|grep delete

10
10
10
2014-04-07 21:03:43 +0000

Altri 2 modi per ottenere il problema del disco pieno:

1) nascosto sotto un punto di montaggio: linux mostrerà un disco pieno con file “nascosti” sotto un punto di montaggio. Se avete dei dati scritti sul disco e ci montate sopra un altro filesystem, linux nota correttamente l'utilizzo del disco anche se non potete vedere i file sotto il punto di montaggio. Se avete montaggi nfs, provate a smontarli e guardate se qualcosa è stato accidentalmente scritto in quelle directory prima del montaggio.

2) File corrotti: Lo vedo occasionalmente nel trasferimento di file da windows a linux via SMB. Un file non riesce a chiudere il descrittore del file e ci si ritrova con un file di 4GB di spazzatura.

Questo può essere più noioso da risolvere, perché è necessario trovare la sottodirectory in cui si trova il file, ma è facile da risolvere perché il file stesso è facilmente rimovibile. Io uso il comando du e faccio un elenco delle sottodirectory di root per scoprire dove viene usato lo spazio del file.

cd /
du -sh ./*

Il numero di directory di primo livello è di solito limitato, quindi imposto il flag human readable -h per vedere quale sottodirectory è il monopolizzatore di spazio.

Poi si fa un cd nella figlia problematica e si ripete il processo per tutti gli elementi in essa contenuti. Per rendere più facile individuare gli elementi grandi, cambiamo leggermente il du e lo accoppiamo con un ordinamento.

cd /<suspiciously large dir>
du -s ./* | sort -n

che produce un output dal più piccolo al più grande per dimensione in byte per tutti i file e le directory

4 ./bin 
462220 ./Documents
578899 ./Downloads
5788998769 ./Grocery List

Una volta individuato il file sovradimensionato, di solito lo si può semplicemente cancellare.

4
4
4
2014-04-07 14:27:52 +0000

Potreste scoprire quali file sono aperti con lsof. Può produrre un sacco di output, così ho limitato l'esempio qui sotto alle linee che finiscono con log:

# lsof | grep log$
rsyslogd 2109 syslog 0u unix 0xffff88022fa230c0 0t0 8894 /dev/log
rsyslogd 2109 syslog 1w REG 252,6 62393 26 /var/log/syslog
rsyslogd 2109 syslog 2w REG 252,6 113725 122 /var/log/auth.log
rsyslogd 2109 syslog 3u unix 0xffff88022fa23740 0t0 8921 /var/spool/postfix/dev/log
rsyslogd 2109 syslog 5w REG 252,6 65624 106 /var/log/mail.log
/usr/sbin 2129 root 2w REG 252,6 93602 38 /var/log/munin/munin-node.log
/usr/sbin 2129 root 4w REG 252,6 93602 38 /var/log/munin/munin-node.log
...
1
1
1
2017-06-08 10:02:04 +0000

Se alcuni file vengono cancellati ma sono ancora utilizzati da qualche processo, allora il loro spazio non verrà rilasciato. In questo caso o riavviate un processo che sta usando il file o annullate il file. È sempre una buona pratica annullare tali file invece di cancellarli. Per trovare i file cancellati ma ancora in uso da qualche processo

#lsof +L1

darà l'id del processo e il descrittore del file. Per annullare il file cancellato dal descrittore del file

#echo "" > /proc/$pid/fd/$fd
1
1
1
2020-02-27 01:18:39 +0000

Nella maggior parte dei casi, se cancelliamo un file di log, il file non viene più visualizzato da ls. Il processo continua a scrivere su quel file fino a quando non si ferma il processo.

1
1
1
2017-10-31 13:45:06 +0000

Digitare il comando

#lsof +L1

che mostrerà l'elenco dei file che detengono memoria con citazione cancellata.

Nota il pid (id del processo) del file

Uccidi il processo

#kill <pid>

La memoria sarà rilasciata dal processo

Controlla con il comando

#df -h
0
0
0
2016-06-02 09:58:41 +0000

Problema reale osservato in natura:

Assicuratevi di cancellare i file reali e non i symlink ai file. Questo può essere il caso dei file di log in particolare.

0
0
0
2016-01-23 08:00:36 +0000

In aggiunta a ciò che è stato spiegato, il problema potrebbe essere che c'è un altro punto di montaggio della directory del file cancellato su un altro dispositivo disco collegato sullo stesso server. Controllate i montaggi attuali e le voci di fstab.