df dice che il disco è pieno, ma non lo è


58

Su un server virtualizzato con Ubuntu 10.04, df riporta quanto segue:

# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda1             7.4G  7.0G     0 100% /
none                  498M  160K  498M   1% /dev
none                  500M     0  500M   0% /dev/shm
none                  500M   92K  500M   1% /var/run
none                  500M     0  500M   0% /var/lock
none                  500M     0  500M   0% /lib/init/rw
/dev/sda3             917G  305G  566G  36% /home

Questo mi sconcerta per due motivi: 1.) df dice che / dev / sda1, montato su /, ha una capacità di 7,4 gigabyte, di cui solo 7,0 gigabyte sono in uso, ma riporta / essendo pieno al 100%; e 2.) Posso creare file su / così chiaramente ha spazio a disposizione.

Forse rilevante è che la directory / www è un collegamento simbolico a / home / www, che si trova su una partizione diversa (/ dev / sda3, montata su / home).

Qualcuno può offrire suggerimenti su cosa potrebbe succedere qui? Il server sembra funzionare senza problemi, ma voglio assicurarmi che non ci siano problemi con la tabella delle partizioni, i file system o qualcos'altro che potrebbe provocare l'implosione (o l'esplosione) in seguito.


Grazie a tutti per le risposte utili. Non riesco a creare file come un normale utente, quindi sembra che sia il buffer del 5 percento che impedisce la catastrofe. Ora ho solo bisogno di capire perché il disco è pieno (sono un po 'preoccupato che qualcosa di dannoso potrebbe succedere perché nessuno dei file di registro occupa così tanto spazio e non c'è molto software installato, solo un semplice server LAMP) ...
Chris,

3
Il primo posto che vorrei cercare è / tmp. Un'altra possibilità è che hai un file cancellato a cui un programma in esecuzione è trattenuto. Penso che tu possa eseguire 'lsof | grep cancellato "come root per trovarli.
Scott,

Risposte:


103

È possibile che un processo abbia aperto un file di grandi dimensioni che da allora è stato eliminato. Dovrai terminare questo processo per liberare spazio. Potresti essere in grado di identificare il processo usando lsof. Su Linux i file eliminati ma aperti sono noti a lsof e contrassegnati come (eliminati) nell'output di lsof.

Puoi verificarlo con sudo lsof +L1


8
Ha risolto il mistero per me. Ho rimosso un file di registro di grandi dimensioni da uwsgi senza riavviare il servizio. Quando interrogato df -ah, ho il disco pieno, ma du -sh /dice che dovrei avere spazio libero. Dopo aver riavviato Uwsgi ho avuto molto spazio libero!
Fabio Montefuscolo,

Avevo 40G di tronchi bloccati nel limbo e lsof + L1 mi ha dato la visione a raggi X per vedere cosa è successo ;-) Tutto quello che dovevo fare era riavviare il servizio.
PJ Brunet,

46

Il 5% (per impostazione predefinita) del filesystem è riservato ai casi in cui il filesystem si riempie per evitare gravi problemi. Il tuo filesystem è pieno. Non sta accadendo nulla di catastrofico a causa del buffer del 5%: a root è consentito utilizzare quel buffer di sicurezza e, nella configurazione, gli utenti non root non hanno motivo di scrivere in quel file system.

Se hai demoni eseguiti come utente non root ma che hanno bisogno di gestire i file in quel file system, le cose si romperanno. Un demone comune è named. Un altro è ntpd.


1
Alla domanda su PERCHÉ il tuo disco è pieno, 7G non ha davvero molto spazio. Sembra anche che tutto sia stato scaricato in una partizione / filesystem ( /). Questa è generalmente considerata una cosa negativa (perché se qualcosa va in tilt si /riempie e il mondo finisce) ma le distribuzioni Linux continuano a farlo perché è "più semplice". Inizierei cercando /var(esp. /var/log) File di log enormi. du -hs /(come root) ti aiuterà a trovare le directory più grandi e forse ti indicherà ciò che deve essere ripulito.
voretaq7,

35

Potresti essere fuori dagli inode. Controlla l'utilizzo dell'inode con questo comando:

df -i

17

La maggior parte dei filesystem Linux riserva il 5% di spazio solo per l'utente root.

Puoi vederlo con ad es

dumpe2fs /dev/sda1 | grep -i reserved

Puoi modificare l'importo riservato usando:

tune2fs -m 0 /dev/sda1

Nella maggior parte dei casi il server sembrerà continuare a funzionare correttamente, supponendo che tutti i processi vengano eseguiti come "root".


8

Ho avuto questo problema e sono rimasto sconcertato dal fatto che l'eliminazione di vari file di grandi dimensioni non ha migliorato la situazione (non sapevo del buffer del 5%) seguendo comunque alcuni indizi

Dalla radice ho camminato lungo le più grandi directory rivelate facendo ripetutamente: -

du -sh */ 

fino a quando non arrivai una directory per i file di registro del server web che aveva dei registri assolutamente enormi

con cui ho troncato

:>lighttpd.error.log

improvvisamente df -h è sceso al 48%!


14
Questo dovrebbe davvero finire con "... quindi ho impostato la rotazione del registro".
hayalci,

hayalci: trovato che la logrotazione puntava alla directory sbagliata.
zzapper,

8

Oltre alle cause già suggerite, in alcuni casi potrebbe essere anche la seguente:

  • un disco diverso è montato "sopra" la cartella esistente che è piena di dati
  • du calcolerà la dimensione spesa del disco montato e df mostrerà realmente speso
  • soluzione: (quando possibile) smontare tutti i dischi non root e ricontrollare le dimensioni du -md 1. Risolvi la situazione spostando la cartella nascosta in un altro posto o montandola in un altro posto.

come trovi punti di montaggio diversi da df?
Hogan,

@Hogan: forse chiamare "mount" o "cat / etc / fstab" sarebbe d'aiuto?
Robert Lujo,

5

df -hsta arrotondando i valori. Anche le percentuali sono arrotondate. Ometti -he vedrai differenze più precise.

Oh. E ext3 e derivati ​​riservano una percentuale (default 5%) per il file system proprio per questa costellazione problematica. Se il tuo filesystem di root sarebbe davvero pieno (0 byte rimanenti) non puoi avviare il sistema. Quindi la parte riservata lo impedisce.


Potrebbe anche essere che ha finito gli inode gratuiti. Esegui 'df -i' per ottenere l'utilizzo degli inode.
Andrew Case,

Non ha fornito informazioni sul fatto che il disco sia pieno. Pensa solo che il disco sia pieno. Lo spazio utilizzato al 100% senza errori è solo "praticamente pieno".
mailq,

1

Ho fatto un grande aggiornamento di diverse librerie e c'erano molte librerie e file temporali non necessari, quindi ho liberato spazio nella cartella "/" usando:

apt-get install -f
sudo apt-get clean

E svuota la spazzatura


Questo è un consiglio generale ragionevole sulla riduzione dell'utilizzo del disco, ma non affronta la domanda sul perché df dice che il disco è pieno quando non lo è.
Andrew Schulman,

0

controlla il / lost + found, avevo un sistema (centos 7) e alcuni file nel / lost + found hanno mangiato tutto lo spazio


0

Se la partizione è btrfs, potrebbe esserci un volume secondario che occupa spazio. Un filesystem btrfs può avere molti sottovolumi, solo uno dei quali è montato. È possibile utilizzare btrfs subvolume list <dir>per elencare tutti i volumi secondari e btrfs subvolume delete <dir>/<subvolume>per eliminarne uno. Assicurarsi di non eliminare quello montato per impostazione predefinita.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.