Размер файла со сжатием zfs

9

Обычно я оцениваю размер целого дерева каталогов du -ks $DIRECTOY_TREE_ROOT, но этот метод нельзя использовать, когда включено сжатие zfs.

totalОтображаются ls -lнормально для одного каталога, но это самый простой способ , чтобы получить тот же результат для дерева каталогов?

РЕДАКТИРОВАТЬ:

Операционная система - Solaris 10.

Я ищу реальный размер файла, а не место на диске.

marcoc
источник
Вы ищете реальное место на диске или реальный размер файла?
Джастароберт

Ответы:

5

Это должно просто работать:

find . -type f -exec ls -l {} + | nawk '{s=s+$5}
END {print s}'
jlliagre
источник
12

Просто используйте du -b пример:

# du -sh .
215G    .

# du -sbh .
344G    .
Woyteck
источник
Двенадцать голосов "за", несмотря на то, что с Solaris 10 нет опции "-b" du...
jlliagre
На Solaris 11 это работает черезgdu -bsh foldername
Копировать Run Start
3

Можно получить размер файла и приблизительное использование диска непосредственно из команды 'find' с параметром '-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
        }
    '
)

Некоторые примеры команд и вывод:

-bash-3.00# lsdu test_sloccount/
Path: test_sloccount/ 
  Total Size: 30.90 MB 
  Disk Usage: 1.43 MB 
  Compress Ratio: 21.6250 
Хосе Са
источник
2

Этот oneliner должен дать желаемый результат:

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

У меня нет раздела ZFS для тестирования, но на моем разделе ext4 он выдает тот же результат, что и du -ks.

Кенни Рассчарт
источник
Вопрос был отредактирован, чтобы задать фактический размер файлов, а не тот, который используется на диске, о котором сообщают и du, и ls total.
Jlliagre
2

Ман дю, вероятно, поможет здесь:

 --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
заместитель Wabbit
источник
Это не такой вариант ОС Solaris 10 du. Это нестандартное расширение Gnu.
Jlliagre
Возможно. Хотя у Solaris Express 11 он есть.
the-wabbit
4
Solaris 10 не включает Gnu du. В Solaris 11 Express есть и / usr / bin / du, который не поддерживает параметр --apparent-size, и / usr / gnu / bin / du, который его поддерживает.
Jlliagre
2

Я собираюсь включить ответ на этот вопрос для FreeBSD для полноты картины. По словам 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
источник