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.

marcoc
sumber
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}'
Jlliagre
sumber
12

Cukup gunakan du -b contoh:

# du -sh .
215G    .

# du -sbh .
344G    .
Woyteck
sumber
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 
Jose Sa
sumber
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.

Kenny Rasschaert
sumber
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
the-wabbit
sumber
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.
baitisj
sumber