Domanda

Recentemente ho esaurito lo spazio su disco su un'unità su un server FreeBSD.Ho troncato il file che causava problemi ma non vedo la modifica riflessa durante l'esecuzione df.Quando corro du -d0 sulla partizione mostra il valore corretto.C'è un modo per forzare l'aggiornamento di queste informazioni?Cosa fa sì che l'output qui sia diverso?

È stato utile?

Soluzione

Questo probabilmente è incentrato su Come hai troncato il file. du E df segnalare cose diverse come questo post su unix.com spiega.Solo perché lo spazio non viene utilizzato non significa necessariamente che sia libero...

Altri suggerimenti

In BSD una voce di directory è semplicemente uno dei tanti riferimenti ai dati del file sottostante (chiamato inode).Quando un file viene eliminato con il comando rm(1) viene diminuito solo il conteggio dei riferimenti.Se il conteggio di riferimento è ancora positivo (ad es.il file ha altre voci di directory a causa di collegamenti simbolici), i dati del file sottostante non vengono rimossi.

I nuovi utenti BSD spesso non si rendono conto che un programma che ha un file aperto contiene anche un riferimento.Ciò impedisce che i dati del file sottostante scompaiano mentre il processo li utilizza.Quando il processo chiude il file, se il conteggio dei riferimenti scende a zero, lo spazio file viene contrassegnato come disponibile.Questo schema viene utilizzato per evitare problemi di tipo Microsoft Windows in cui non ti consente di eliminare un file perché qualche programma non specificato lo ha ancora aperto.

Un modo semplice per osservarlo è fare quanto segue

cp /bin/cat /tmp/cat-test
/tmp/cat-test &
rm /tmp/cat-test

Fino al termine del processo in background, lo spazio file utilizzato da /tmp/cat-test rimarrà allocato e non disponibile come riportato da df(1) ma il comando du(1) non sarà in grado di tenerne conto poiché non ha più un nome del file.

Si noti che se il sistema dovesse bloccarsi senza che il processo chiuda il file, i dati del file saranno ancora presenti ma senza riferimenti, sarà necessaria un'esecuzione di fsck(8) per recuperare lo spazio del filesystem.

I processi che tengono aperti i file sono uno dei motivi per cui il comando newsyslog(8) invia segnali a syslogd o ad altri programmi di registrazione per informarli che dovrebbero chiudere e riaprire i file di registro dopo averli ruotati.

I softupdate possono anche influenzare lo spazio libero del filesystem poiché l'effettivo recupero dello spazio dell'inode può essere posticipato;il comando sync(8) può essere utilizzato per incoraggiare che ciò avvenga prima.

Df --sync funziona?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top