Розмір файлу зі стисненням zfs


9

Зазвичай я оцінюю розмір цілого дерева каталогів за допомогою du -ks $DIRECTOY_TREE_ROOT, але цей метод не можна використовувати, коли компресія zfs увімкнена.

totalВідображаються ls -lнормально для одного каталогу, але це найпростіший спосіб , щоб отримати той же результат для дерева каталогів?

Редагувати:

Операційна система - Solaris 10.

Я шукаю реальний розмір файлу, а не простір, який використовується на диску.


Ви шукаєте фактичний простір, що використовується на диску, або справжній розмір файлу?
justarobert

Відповіді:


5

Це має просто працювати:

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

12

Просто використовуйте du -b приклад:

# du -sh .
215G    .

# du -sbh .
344G    .

Дванадцять голосів, незважаючи на те, що немає варіанту "-b" з Solaris 10 du...
jlliagre

На Solaris 11 він працює черезgdu -bsh foldername
Copy 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

Цей онлайнер повинен отримати бажаний результат:

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

У мене немає розділу ZFS, щоб перевірити його, але на моєму розділі ext4 він видає той же результат, що і du -ks.


Питання було відредаговано так, щоб задати фактичний розмір файлів, а не той, який використовується на диску, про який повідомляють як du, так і ls.
jlliagre

2

man du, мабуть, допоможе тут:

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

Це не такий варіант os 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.
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.