Newsgroup: it.comp.programmare
Titolo: Linux, statfs, dimensioni e utilizzo disco

Ciao a tutti.
 
Ho un problema un po' rognoso: ho un disco dedicato (una scheda MMC,
nello specifico, ma poco importa) che utilizzo per salvare dati con un
embedded su cui gira Linux.
 
A tempo (circa ogni secondo) devo conoscere l'occupazione del disco per
far partire delle procedure.
 
Per conoscere le informazioni di utilizzo del disco, uso la funzione
statfs che mi restituisce il numero di blocchi totali e quelli liberi
del filesystem. Da questi potrei facilmente (basta una sottrazione)
ottenere il numero di blocchi utilizzati, ma il problema sta nel fatto
che appena dopo la formattazione ottengo un utilizzo di circa 150MB su
8G (blocchi utilizzati dal filesystem).
 
Sto già formattando indicando -m0 (e comunque il programma gira come root).
 
Quello che mi piacerebbe avere è il numero di blocchi totali del
filesystem al netto dei blocchi utilizzati per la sua gestione (questa
quantità varia o può variare con l'utilizzo?)
 
Finora trovo soluzioni non percorribili come eseguire un dirwalk e
sommare le dimensioni dei vari file, oppure eseguire un du (formalmente
sono la stessa cosa) e prendere il risultato, ma queste sono operazioni
lunghe e decisamente troppo onerose per l'uso del mio sistema.
 
Suggerimenti?
 
Grazie in anticipo
 

 
 
Non capisco il problema.. statfs non funziona?
Io userei statvfs(3) che nella struttura struct statvfs ha i campi f_blocks
e f_bfree (o f_bavail se sei utente normale).
Ciao!

 ha scritto:

Non funzionano nel senso che mi restituiscono un'occupazione comprensiva
dei blocchi utilizzati per la gestione del filesystem.
 
Infatti formattando un disco da 8GB senza metterci dentro alcun file
mostra un'occupazione di 150MB, o se vogliamo essere precisi il numero di
blocchi totali corrisponde a 8GB, mentre il numero di blocchi disponibili
è di poco più di 7.8GB.
 
A me servirebbe avere in modo veloce, invece, una stima della dimensione
totale del disco al netto dei blocchi utilizzati dal filesystem stesso
(anche se tale numero dovesse cambiare in corsa), o se vogliamo metterlo
al contrario, avere in modo veloce una stima dello spazio occupato da file
e directory.
Quindi per un disco appena formattato vorrei avere un 100% free anche se
mi riportasse una dimensione disco di 7.8GB, e se metto dentro solo 200MB
tra file e directory, avere un'occupazione di 200MB e non di 350MB.
 
DB
 

 
 
Ma, per curiosità, a cosa potrebbe mai essere utile questa informazione?
Chiedo perché magari stai scegliendo la via sbagliata di procedere..
 
Ciao!
 
P.S.
Lo spazio disponibile ti verrà sempre dato come *vero* spazio disponibile: la
gestione del filesystem dev'essere per l'utente il più trasparente possibile..

 
 
Infatti e mi sta bene. Il problema vero è che esiste il numero di blocchi
totali del filesystem e non il numero di blocchi totali disponibili per
l'archiviazione dei file (o il numero di blocchi riservati alla gestione del
filesystem)
 
DB
 

 
 
L'informazione la puoi avere sia guardando in /proc sia con le utility del
filesystem specifico, nel caso di una ext2 con dumpe2fs, ad esempio.
 
Ciao!