Dateigröße mit zfs-Komprimierung

9

Normalerweise schätze ich die Größe eines gesamten Verzeichnisbaums mit du -ks $DIRECTOY_TREE_ROOT, aber diese Methode kann nicht verwendet werden, wenn die zfs-Komprimierung aktiviert ist.

Die totalAnzeige von ls -list für ein einzelnes Verzeichnis in Ordnung, aber was ist der einfachste Weg, um das gleiche Ergebnis für einen Verzeichnisbaum zu erhalten?

BEARBEITEN:

Betriebssystem ist Solaris 10.

Ich suche nach einer echten Dateigröße, nicht nach dem auf der Festplatte verwendeten Speicherplatz.

marcoc
quelle
Suchen Sie nach tatsächlich verwendetem Speicherplatz auf der Festplatte oder nach der tatsächlichen Dateigröße?
Justarobert

Antworten:

5

Das sollte einfach funktionieren:

find . -type f -exec ls -l {} + | nawk '{s=s+$5}
END {print s}'
jlliagre
quelle
12

Verwenden Sie einfach ein du -b Beispiel:

# du -sh .
215G    .

# du -sbh .
344G    .
Woyteck
quelle
Zwölf Up- du
Votes,
Unter Solaris 11 funktioniert es übergdu -bsh foldername
Copy Run Start
3

Es ist möglich, sowohl die Dateigröße als auch die ungefähre Festplattennutzung direkt über den Befehl 'find' mit dem Parameter '-ls' abzurufen.

 function lsdu() (
    export SEARCH_PATH=$*
    if [ ! -e "$SEARCH_PATH" ]; then
        echo "ERROR: Invalid file or directory ($SEARCH_PATH)"
        return 1
    fi
    find "$SEARCH_PATH" -ls | gawk --lint --posix '
        BEGIN {
            split("B KB MB GB TB PB",type)
            ls=hls=du=hdu=0;
            out_fmt="Path: %s \n  Total Size: %.2f %s \n  Disk Usage: %.2f %s \n  Compress Ratio: %.4f \n"
        }
        NF >= 7 {
            ls += $7
            du += $2
        }
        END {
            du *= 1024
            for(i=5; hls<1; i--) hls = ls / (2^(10*i))
            for(j=5; hdu<1; j--) hdu = du / (2^(10*j))
            printf out_fmt, ENVIRON["SEARCH_PATH"], hls, type[i+2], hdu, type[j+2], ls/du
        }
    '
)

Einige Beispielbefehle und Ausgaben:

-bash-3.00# lsdu test_sloccount/
Path: test_sloccount/ 
  Total Size: 30.90 MB 
  Disk Usage: 1.43 MB 
  Compress Ratio: 21.6250 
Jose Sa.
quelle
2

Dieser Oneliner sollte das gewünschte Ergebnis liefern:

find $DIRECTOY_TREE_ROOT -type d -exec ls -l '{}' \; | awk '/^total\ .[0-9]+$/ { sum+=$(NF) }END{ print sum }'

Ich habe keine ZFS-Partition zum Testen, aber auf meiner ext4-Partition wird das gleiche Ergebnis ausgegeben wie du -ks.

Kenny Rasschaert
quelle
Die Frage wurde bearbeitet, um nach der tatsächlichen Dateigröße zu fragen, nicht nach der auf der Festplatte verwendeten, die sowohl du als auch ls total melden.
Jlliagre
2

man du würde hier wohl helfen:

 --apparent-size
      print apparent sizes, rather than disk usage;  although
      the  apparent size is usually smaller, it may be larger
      due to holes in (`sparse') files,  internal  fragmenta-
      tion, indirect blocks, and the like
the-wabbit
quelle
Dies ist keine solche Option für Solaris 10 du. Es ist eine nicht standardmäßige Gnu-Erweiterung.
Jlliagre
Könnte sein. Solaris Express 11 hat es jedoch.
The-Wabbit
4
Solaris 10 bündelt Gnu du nicht. Solaris 11 Express verfügt sowohl über / usr / bin / du, das die Option --apparent-size nicht unterstützt, als auch über / usr / gnu / bin / du, das sie unterstützt.
Jlliagre
2

Der Vollständigkeit halber werde ich die Antwort auf diese Frage für FreeBSD aufnehmen. Nach man du:

 -A      Display the apparent size instead of the disk usage.  This can be
         helpful when operating on compressed volumes or sparse files.
baitisj
quelle