Come vedere l'utilizzo del disco con un sovraccarico minore in bash?


8
du -csh /

Quanto sopra richiederà un sacco di tempo per calcolare, c'è un modo per vedere il risultato meno accurato con meno spese generali?

AGGIORNARE

Quello che voglio sapere è la dimensione totale in una directory specifica.

Risposte:


9

Per quanto riguarda una versione più ottimizzata du, non ne sono consapevole. Le cose che vengono in mente sono:

  1. Archivia questi file su un disco ram o qualcosa del genere.
  2. Se solo un'applicazione scrive in questa cartella e nella sua sottocartella, tenere traccia dell'applicazione.
  3. Se tutti questi file hanno le stesse dimensioni e ne distribuiscono uniformemente tra le directory, puoi semplicemente contare il numero di sottodirectory e moltiplicarlo per file per directory e quindi dimensioni per file. Puoi farlo rapidamente usando semplicemente il conteggio dei collegamenti reali per la directory se solo tu hai una sola struttura profonda ( stat -c '%h') - 2.
  4. Rendi tutti questi file di proprietà di un utente specifico e utilizza il meccanismo delle quote.
  5. Usa una partizione dedicata e usa solo df. Anche un filesystem virtuale (un file su un filesystem montato tramite loopback) potrebbe fare altrettanto.

Di tutte queste, la quota e le opzioni di partizione dedicate sono probabilmente le più semplici ed efficienti.


6

Il problema è che 'du' deve enumerare ogni oggetto nel sotto-albero. Questa è un'operazione ad alta intensità di metadati e richiede un po 'di tempo per la maggior parte dei filesystem Linux. Alcuni file system, NTFS e NSS di Novell vengono in mente, hanno la capacità di tenere traccia delle dimensioni di directory come questa nei metadati, il che rende questa operazione molto più veloce. In genere, se il file system supporta quote di directory di qualche tipo, deve tenere traccia di questi dati internamente per l'applicazione, ogni modifica delle dimensioni viene replicata nell'albero delle directory nel punto quota (NTFS) o in ogni directory (NSS ) quando accade, quindi ottenere una dimensione dell'albero delle directory è molto veloce.

Sfortunatamente, non esiste un modo per accelerare la corsa, solo soluzioni alternative.

  • Esegui 'du' in modalità batch e live con risultati non live
  • Crea un nuovo file system e usa invece 'df'
  • Crea un file di grandi dimensioni che conterrà la tua directory, montalo in loopback, formattalo e usa 'df' invece su quel nuovo mount-point. Se hai bisogno di più spazio, smonta il mount loopback, estendi il file e rimontalo.

+1 Questa è una risposta molto utile.
Richard Holloway,

4
du -h --max-depth=1

Fornisce le dimensioni in formato KB / MB / GB umano dalla directory di lavoro corrente.


Penso che vogliono sapere perché Du impiega così tanto tempo a generare e rispondere. Penso che anche Windows si comporti allo stesso modo. Se si fa clic con il pulsante destro del mouse su una directory, è necessario attendere mentre calcola la dimensione di ogni sottodirectory. È solo il modo in cui funziona il filesystem.
Unix Janitor,

Sì, a meno che non eseguano un servizio di indicizzazione o qualcosa del genere.
David Rickman,

3

Con gli strumenti standard devi ottenere la dimensione di ogni file nella directory ogni volta che vuoi conoscere la dimensione totale. Un modo forse più efficace per farlo sarebbe quello di avere un "monitor delle dimensioni della directory", che tiene traccia delle dimensioni correnti della directory. Non esiste una cosa del genere (di cui io sia a conoscenza), ma potresti implementarne una inotify. Forse non con bash (e inotify-tools), ma probabilmente potresti usare python e pyinotify, per esempio.


2

Potresti trovare gt5utile. Memorizza le duinformazioni più recenti e fa una differenza rispetto alla successiva esecuzione. Visualizza il suo output utilizzando un browser in modalità testo come links.


2

Inoltre, considera l'opzione -x su du - "un file system" se lo stai facendo

du -xh / --max-depth=1 

Vedrai solo il riepilogo dell'utilizzo del disco sulla partizione di root e non proverà ad aggiungere / proc, / sys, / dev e così via ...


2

se si desidera solo l'utilizzo del disco per il file system di root, quindi

df -h /


1

No. Potresti periodicamente fare un pip su un file di testo, in un cron job impostato per essere eseguito durante la notte, quindi non hai dati abbastanza attuali immediatamente disponibili?

Si noti che la misurazione dello spazio su disco utilizzato da una cartella contenente un numero elevato di file in Windows richiede allo stesso modo del tempo.



0

df -kh /

questo ti mostrerà la quantità di spazio su disco utilizzata e disponibile.


0

Forse

df -h

testo extra poiché una risposta breve e concisa non è sufficiente per serverfault per pensare che io sia umano.


Ma devo conoscere la dimensione totale in una directory specifica
apache l'

quindi usare dovrà usare du
The Unix Janitor l'

Ma in Windows, posso vedere lo spazio totale utilizzato senza sovraccarico, perché non è possibile in Linux?
Apache,

sei serio? ntfs non è ext3
The Unix Janitor

1
@apache, oh c'è sovraccarico, prova a vedere le dimensioni di una cartella da 20 GB con un sacco di file da 10-20 MB. C'è def overhead.
Zypher,

0

Per trovare lo spazio in quella directory, elencalo invece di /. Per trovare lo spazio nelle directory fooe bar, elencare entrambi:

du -csh foo bar

0

Dovresti usare dnotify per calcolare l'utilizzo del disco se il filesystem non viene cambiato spesso.

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.