Filesystem Linux; differenza nel calcolo delle dimensioni usando df & du


8

Quando eseguo dfmostra che il dispositivo di root è pieno.

Filesystem            Size  Used Avail Use% Mounted on
/dev/sda1             9.9G  9.4G     0 100% /

Ho esaminato l' inodeutilizzo e c'è abbastanza spazio disponibile per il dispositivo root

Filesystem            Inodes   IUsed   IFree IUse% Mounted on
/dev/sda1               640K    103K    538K   16% /

Ma, quando eseguo il ducomando, mostra che ho usato solo 2Gda 9.9G.

ip-XXX-XXX-XXX-XXX:/$ du -xh --max-depth=1
14M ./etc
4.0K ./mnt
96K ./tmp
3.5M ./bin
0   ./sys
964K ./boot
4.0K ./srv
0   ./dev
55M ./lib
25M ./root
1.1G ./usr
4.0K ./opt
846M ./var
4.3M ./sbin
23M ./home
16K ./lost+found
0   ./proc
2.0G .

Mi sta facendo diventare matto e anche interessante. Questo è un grosso problema per noi poiché il disco di root /è pieno e alcune funzioni del nostro sito non funzionano.

Aiutatemi a risolvere (anche capire) questo problema.

Grazie.



@Gilles come hai detto, ho corso du -x /e vedo solo 2G e ho calcolato la dimensione dell'inode che è 160M. Mi ha aiutato a capire le cose, ma voglio solo risolvere questo problema.
Rakesh Sankar,

Hai eseguito ducome root? Altrimenti può solo riferire sui file a cui puoi accedere.
Gilles,

@Gilles Sto correndo comeroot
Rakesh Sankar il

Non ho altro da aggiungere qui oltre all'ottimo ncduprogramma, che aiuta a visualizzare l'utilizzo del disco.
Rob,

Risposte:


4

Quando i file vengono eliminati in * nix, continuano a vivere sul disco (e occupano spazio su disco) per tutto il tempo in cui un processo li ha aperti. È abbastanza comune approfittare di questo per "proteggere" i file temporanei creandoli con dimensioni ridotte, eliminandoli e quindi utilizzando il file eliminato per archiviare i dati senza doversi preoccupare di altri processi (facilmente) per accedervi, quindi la quantità di spazio nei file eliminati può aumentare abbastanza se, per esempio, un database temporaneo o una sessione di editing multimediale vengono gestiti in questo modo. Un'altra possibilità per come si potrebbe avere così tanto spazio "perso" sarebbe se il sistema è stato aggiornato (più volte) senza riavviare o riavviare i programmi, risultando in tutte le vecchie librerie .so aperte da programmi che sono stati avviati prima del aggiornamento e sono ancora in esecuzione.

dfvede lo spazio utilizzato da questi file perché osserva solo lo spazio allocato sul dispositivo, ma dunon li vede perché non vi sono voci di directory corrispondenti.

Lo spazio usato "nascosto" come questo può essere liberato solo quando i processi che hanno aperto file cancellati li chiudono. Puoi trovare questi processi con il fusercomando e terminarli (o, per molti demoni, inviare un segnale che dice loro di chiudere e riaprire tutti i file aperti).


grazie, buone informazioni, qualcosa (altro) che capisco oggi. Ma per trovare uno hiddenspazio usato, provo ad eseguire il fusercomando per vedere tutti i file che vengono utilizzati da un processo ma non collegati - non sono riuscito a trovarne nessuno. Hai qualche comando o direzione che mi porta a trovarlo? Questo è il comando che usofuser -v -a /
Rakesh Sankar il

Ho dovuto riavviarlo per liberarmi dello spazio nascosto ma non sono riuscito a trovare una soluzione adeguata per rimuovere quei file nascosti.
Rakesh Sankar,

1

Ci sono stati momenti in cui se il disco si riempie, può essere confuso fino al riavvio / rimontaggio che il disco è ancora pieno, anche quando hai eliminato un carico di file.


Non riesco a riavviare poiché è un sito di produzione. Ma sto cercando una soluzione che possa aiutarmi a trovare questi spazi nascosti e riportarli indietro.
Rakesh Sankar,

Forse è la produzione ma a volte il riavvio è l'unica risposta. Questo è lo sfortunato problema di essere il tuo disco di root e tutto il tuo sistema operativo è su di esso. Questo è il motivo per cui molti sostengono l'uso di tmp, var, home etc su altri dischi, in quanto possono essere rimontati. Sembra essere più comune che il sistema operativo non si renda conto che lo spazio è disponibile sul disco di root.
BugFinder

1

Da parte mia, ho semplicemente riavviato syslogd per recuperare lo spazio su disco. Mi mancavano 3 GB! Il mio server era attivo e funzionante da 250 giorni.


0

C'è un modo per pulire lo spazio senza riavviare l'applicazione. Ecco i dettagli:

  1. Supponiamo che tu abbia un processo in fooesecuzione e la creazione di un file da 2 GB chiamato abc.log. Ora dì che abc.log è stato eliminato da qualcun altro.

  2. Get foopid (diciamo 123). Quindi /proc/123/fdmostrerà l'elenco dei descrittori di file aperti da foo. Uno con abc.log verrà mostrato come eliminato. Diciamo che fdabs.log è 111. Se corri less /proc/123/fd/111, ti mostrerà comunque tutti quei 2 GB di dati.

  3. Corri echo " " > /proc/123/fd/111. Ciò sovrascriverà il contenuto con una stringa vuota. Dopo questo comando, se provi df, mostrerà altri 2 GB recuperati pulendo abc.log.

Questo è tutto. Ho provato questo su CentOS e funziona.


Questa è una cosa utile da sapere. Ma non è una risposta alla domanda.
Isaac Rabinovitch il

mi dispiace che il mio ans sia stato più mirato alla pulizia dello spazio su disco se si conosce l'ID del processo che ha eliminato il file. Per questo caso specifico, devi esaminare tutti i file in / proc / [0-9] * / fd, grep quelli eliminati e seguire la logica sopra menzionata.
Kaustubh Sathe,

Se sei davvero curioso di sapere quale file ha causato la perdita di spazio su disco, pulisci il file eliminato alla volta, controlla ogni volta df output e registra queste informazioni.
Kaustubh Sathe,
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.