Taille de fichier avec compression zfs

9

du -ks $DIRECTOY_TREE_ROOTJ'évalue généralement la taille d'une arborescence de répertoires complète à l'aide , mais cette méthode ne peut pas être utilisée lorsque la compression zfs est activée.

L' totalaffichage par ls -lest correct pour un seul répertoire, mais quelle est la manière la plus simple d'obtenir le même résultat pour une arborescence de répertoires?

ÉDITER:

Le système d'exploitation est Solaris 10.

Je recherche la taille réelle du fichier, pas l'espace utilisé sur le disque.

marcoc
la source
Recherchez-vous l'espace réel utilisé sur le disque ou la taille réelle du fichier?
justarobert

Réponses:

5

Cela devrait simplement fonctionner:

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

Utilisez simplement l' du -b exemple:

# du -sh .
215G    .

# du -sbh .
344G    .
Woyteck
la source
Douze votes du
positifs
Sous Solaris 11, cela fonctionne viagdu -bsh foldername
Copy Run Start
3

Il est possible d'obtenir à la fois la taille du fichier et l'utilisation approximative du disque directement à partir de la commande 'find' avec le paramètre '-ls'

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

Quelques exemples de commande et de sortie:

-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
la source
2

Cette doublure devrait produire le résultat souhaité:

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

Je n'ai pas de partition ZFS pour la tester, mais sur ma partition ext4, elle produit le même résultat que du -ks.

Kenny Rasschaert
la source
La question a été modifiée pour demander la taille réelle des fichiers, pas celle utilisée sur le disque que le total du et ls signalent.
jlliagre
2

man du aiderait probablement ici:

 --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
le-wabbit
la source
Ce n'est pas une telle option sur Solaris 10 du. Il s'agit d'une extension Gnu non standard.
jlliagre
Pourrait être. Solaris Express 11 l'a cependant.
le-wabbit le
4
Solaris 10 ne regroupe pas Gnu du. Solaris 11 Express possède à la fois / usr / bin / du qui ne prend pas en charge l'option --apparent-size et / usr / gnu / bin / du qui la prend en charge.
jlliagre
2

Je vais inclure la réponse à cette question pour FreeBSD par souci d'exhaustivité. Selon 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
la source