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.


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}'

12

Verwenden Sie einfach ein du -b Beispiel:

# du -sh .
215G    .

# du -sbh .
344G    .

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 

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.


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

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.
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.