Ukuran file dengan kompresi zfs


9

Saya biasanya memperkirakan ukuran seluruh pohon direktori menggunakan du -ks $DIRECTOY_TREE_ROOT, tetapi metode ini tidak dapat digunakan ketika kompresi zfs aktif.

The totalditampilkan oleh ls -lok untuk satu direktori, namun yang adalah cara paling sederhana untuk mendapatkan hasil yang sama untuk pohon direktori?

EDIT:

Sistem operasinya adalah Solaris 10.

Saya mencari ukuran file nyata, bukan ruang yang digunakan pada disk.


Apakah Anda mencari ruang aktual yang digunakan pada disk, atau ukuran file sebenarnya?
justarobert

Jawaban:


5

Ini seharusnya bekerja:

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

12

Cukup gunakan du -b contoh:

# du -sh .
215G    .

# du -sbh .
344G    .

Dua belas suara terbanyak meskipun faktanya tidak ada opsi "-b" dengan Solaris 10 du...
jlliagre

Pada Solaris 11, ia bekerja melaluigdu -bsh foldername
Salin Jalankan Mulai

3

Dimungkinkan untuk mendapatkan ukuran file dan perkiraan penggunaan disk secara langsung dari perintah 'find' dengan parameter '-l'

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

Beberapa contoh perintah dan keluaran:

-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 ini harus menghasilkan hasil yang diinginkan:

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

Saya tidak memiliki partisi ZFS untuk mengujinya, tetapi pada partisi ext4 saya menghasilkan hasil yang sama dengan du -ks.


Pertanyaannya telah diedit untuk menanyakan ukuran file aktual, bukan yang digunakan pada disk yang dilaporkan oleh du dan ls total.
jlliagre

2

man du mungkin akan membantu di sini:

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

Ini tidak ada opsi seperti itu Solaris 10 du. Ini adalah ekstensi Gnu non standar.
jlliagre

Mungkin. Solaris Express 11 memang memilikinya.
the-wabbit

4
Solaris 10 tidak mengikat Gnu du. Solaris 11 Express memiliki / usr / bin / du yang tidak mendukung opsi --apparent-size dan / usr / gnu / bin / du yang mendukungnya.
jlliagre

2

Saya akan memasukkan jawaban untuk pertanyaan ini untuk FreeBSD demi kelengkapan. Menurut man du:

 -A      Display the apparent size instead of the disk usage.  This can be
         helpful when operating on compressed volumes or sparse files.
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.