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.


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


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 

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.


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

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.
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.