Tamaño de archivo con compresión zfs

9

Usualmente calculo el tamaño de un árbol de directorios completo usando du -ks $DIRECTOY_TREE_ROOT, pero este método no se puede usar cuando la compresión zfs está activada.

El totalvisualizado por ls -lestá bien para un único directorio, pero ¿cuál es la forma más sencilla de obtener el mismo resultado para un árbol de directorios?

EDITAR:

El sistema operativo es Solaris 10.

Estoy buscando un tamaño de archivo real, no el espacio utilizado en el disco.

marcoc
fuente
¿Está buscando el espacio real utilizado en el disco o el tamaño real del archivo?
justarobert

Respuestas:

5

Esto debería funcionar:

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

Solo usa el du -b ejemplo:

# du -sh .
215G    .

# du -sbh .
344G    .
Woyteck
fuente
Doce votos a pesar del hecho de que no hay una opción "-b" con Solaris 10 du...
jlliagre
En Solaris 11, funciona a través degdu -bsh foldername
Copiar Ejecutar Comenzar el
3

Es posible obtener tanto el tamaño del archivo como el uso aproximado del disco directamente desde el comando 'find' con el parámetro '-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
        }
    '
)

Algunos comandos y resultados de muestra:

-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
fuente
2

Este oneliner debería producir el resultado deseado:

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

No tengo una partición ZFS para probarlo, pero en mi partición ext4 produce el mismo resultado que du -ks.

Kenny Rasschaert
fuente
La pregunta se ha editado para preguntar por el tamaño real de los archivos, no el que se usa en el disco, del cual informan tanto du como ls total.
jlliagre
2

man du probablemente ayudaría aquí:

 --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
el wabbit
fuente
Esta no es esa opción para Solaris 10 du. Es una extensión Gnu no estándar.
jlliagre 02 de
Puede ser. Sin embargo, Solaris Express 11 lo tiene.
the-wabbit
44
Solaris 10 no incluye Gnu du. Solaris 11 Express tiene / usr / bin / du que no admite la opción --apparent-size y / usr / gnu / bin / du que lo admite.
jlliagre
2

Voy a incluir la respuesta a esta pregunta para FreeBSD en aras de la exhaustividad. De acuerdo a 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
fuente