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.