sviluppo-web-qa.it

differenza du vs. df

Ho un fileserver in cui df riporta il 94% di/full. Ma secondo du, viene usato molto meno:

# df -h /
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda3             270G  240G   17G  94% /
# du -hxs /
124G    /

Ho letto che i file aperti ma eliminati potrebbero essere responsabili, ma un riavvio non ha risolto questo problema.

Questo è Linux, ext3.

saluti

33
Andreas Kuntzagk

Ok, l'ho trovato.

Avevo un vecchio backup su/mnt/Backup nello stesso filesystem e poi un'unità esterna montata in quel posto. Quindi du non ha visto i file. Quindi ripulire questo mi ha restituito il mio spazio su disco.

Probabilmente è successo in questo modo: l'unità esterna una volta era smontata mentre era in esecuzione lo script di backup giornaliero.

32
Andreas Kuntzagk

Non credo che troverai una spiegazione più approfondita che quindi questo link per tutti i motivi per cui potrebbe essere spento. Alcuni punti salienti che potrebbero aiutare:

  • Qual è il tuo utilizzo dell'inode, se è quasi al 100% che può rovinare le cose:

    df -i

  • Qual è la dimensione del tuo blocco? Molti file di piccole dimensioni e blocchi di grandi dimensioni potrebbero inclinarlo un po '.

    Sudo tune2fs -l/dev/sda1 | grep 'Block size'

  • File eliminati, hai detto di aver studiato questo, ma per ottenere lo spazio totale potresti usare la seguente pipeline (mi piace trovare invece di lsof solo perché lsof è un problema da analizzare):

    Sudo find/proc/*/fd -printf "% l\t% s\n" | grep cancellato | cut -f2 | (tr '\ n' +; echo 0) | avanti Cristo

Tuttavia, è quasi 2x spento. Esegui fsck sulla partizione mentre è smontata per sicurezza.

18
Kyle Brandt

Sembra che i file vengano rimossi mentre i processi li hanno ancora aperti. Questa disconnessione si verifica perché il comando du somma lo spazio dei file presenti nel file system, mentre df mostra i blocchi disponibili nel file system. I blocchi di un file aperto ed eliminato non vengono liberati fino alla chiusura di quel file.

Puoi trovare quali processi hanno file aperti ma eliminati esaminando/proc

find /proc/*/fd -ls | grep deleted
11
TCampbell

Il motivo più probabile nel tuo caso è che hai molti file molto piccoli (più piccoli della dimensione del blocco sul disco). In tal caso df riporterà la somma di tutti i blocchi utilizzati, mentre du riporterà la somma effettiva delle dimensioni del file.

8
wolfgangsz

Sono d'accordo

lsof +L 1 /home | grep -i deleted

è un buon punto di partenza, nel mio caso noto che avevo molti script Perl in esecuzione e che mantenevano in vita molti file, anche se avrebbero dovuto essere eliminati.

Ho ucciso le funzioni Perl e questo ha reso du e df quasi identici, caso chiuso.

7
Sverre

Per impostazione predefinita, quando si formatta un filesystem con EXT3, il 5% dell'unità è riservato per il root. df tiene conto di questa riserva quando segnala ciò che è disponibile, mentre du mostra ciò che è effettivamente in uso.

È possibile visualizzare i blocchi riservati eseguendo:

tune2fs -l/dev/sda | grep -i riserva

e otterrai qualcosa come:

Reserved block count:     412825
Reserved GDT blocks:      1022
Reserved blocks uid:      0 (user root)
Reserved blocks gid:      0 (group root)

Se desideri regolarlo a una percentuale inferiore, puoi farlo con qualcosa del genere

tune2fs -m 1/dev/sda

Puoi ridurlo a 0, tuttavia, dato che questo è il tuo filesystem di root, diffiderei di farlo. Se il filesystem effettivamente riempito può rendere difficili le attività di manutenzione necessarie per ripulirlo.

1
Alex

È possibile che forse du non aggiunga anche le dimensioni delle directory? Tuttavia, sembra una differenza ENORME, che non può essere responsabile di tutto ciò.

0
Brian Knoblauch