10 votes

Taille du fichier avec la compression zfs

J'estime généralement la taille d'une arborescence de répertoires entière en utilisant du -ks $DIRECTOY_TREE_ROOT mais cette méthode ne peut pas être utilisée lorsque la compression zfs est activée.

El total affiché par ls -l est acceptable pour un seul répertoire, mais quel est le moyen le plus simple d'obtenir le même résultat pour une arborescence de répertoires ?

EDIT :

Le système d'exploitation est Solaris 10.

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

0 votes

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

13voto

Woyteck Points 131

Il suffit d'utiliser du -b exemple :

# du -sh .
215G    .

# du -sbh .
344G    .

1 votes

Douze votes positifs malgré le fait qu'il n'y a pas d'option "-b" avec Solaris 10. du ...

1 votes

Sur Solaris 11, cela fonctionne via gdu -bsh foldername

5voto

jlliagre Points 8651

Ça devrait marcher :

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

3voto

rmunn Points 101

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

2voto

Kenny Rasschaert Points 8737

Cet oneliner 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 le tester, mais sur ma partition ext4 il donne le même résultat que du -ks .

0 votes

La question a été modifiée pour demander la taille réelle des fichiers, et non celle utilisée sur le disque, que du et ls total indiquent.

2voto

the-wabbit Points 40039

Man du serait probablement utile 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

0 votes

Cette option n'existe pas dans Solaris 10 du. Il s'agit d'une extension Gnu non standard.

0 votes

Ça pourrait l'être. Solaris Express 11 l'a, cependant.

4 votes

Solaris 10 n'intègre pas Gnu du. Solaris 11 Express possède à la fois /usr/bin/du qui ne supporte pas l'option --apparent-size et /usr/gnu/bin/du qui la supporte.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X