Kami memiliki sistem file besar di mana du
ringkasan (penggunaan disk) penuh memakan waktu lebih dari dua menit. Saya ingin menemukan cara untuk mempercepat ringkasan penggunaan disk untuk direktori arbitrer pada sistem file itu.
Untuk cabang-cabang kecil saya perhatikan bahwa du
hasilnya tampaknya di-cache entah bagaimana, karena permintaan ulang jauh lebih cepat, tetapi pada cabang-cabang besar kecepatan menjadi diabaikan.
Apakah ada cara sederhana untuk mempercepat du
, atau hasil cache yang lebih agresif untuk cabang yang belum dimodifikasi sejak pencarian sebelumnya?
Atau adakah perintah alternatif yang dapat memberikan ringkasan penggunaan disk lebih cepat?
filesystems
cache
disk-usage
Ian Mackinnon
sumber
sumber
du
akan menjadi buruk, tetapi skrip pembungkus yang lebih cepat dengan antarmuka yang identik akan sangat berguna bagi kami. Lebih lanjut, saya akan berharap bahwa hasil caching tergantung pada waktu yang dimodifikasi terakhir (dan dengan asumsi tidak ada operasi disk-lebar, misalnya defragmentasi) akan memberikan hasil ukuran yang tepat: apakah saya kehilangan sesuatu?find
. Tapi kemudian adalocate
.StatFs
perkiraan ukuran direktori super cepat. Itu hampir 1000x lebih cepat untuk direktori besar dan kompleks, dibandingkan dengandu
.Jawaban:
Apa yang Anda lihat ketika Anda menjalankan kembali perintah du adalah efek buffering disk. Setelah Anda membaca blok, buffer disknya disimpan di cache buffer hingga blok itu diperlukan. Untuk du Anda perlu membaca direktori dan inode untuk setiap file di direktori. Hasil du tidak di-cache dalam kasus ini, tetapi dapat diturunkan dengan IO disk yang jauh lebih sedikit.
Meskipun dimungkinkan untuk memaksa sistem untuk menyimpan informasi ini, kinerja keseluruhan akan berkurang karena ruang buffer yang diperlukan tidak akan tersedia untuk file yang diakses secara aktif.
Direktori itu sendiri tidak tahu seberapa besar suatu file, sehingga setiap inode file perlu diakses. Untuk menjaga agar nilai cache di-up to date setiap kali file berubah ukuran, nilai yang di-cache perlu diperbarui. Karena sebuah file dapat dicantumkan dalam 0 atau lebih direktori, ini membutuhkan setiap inode file untuk mengetahui direktori mana yang terdaftar. Ini akan sangat menyulitkan struktur inode dan mengurangi kinerja IO. Juga karena du memungkinkan Anda untuk mendapatkan hasil dengan asumsi ukuran blok yang berbeda, data yang diperlukan dalam cache perlu menambah atau mengurangi nilai yang di-cache untuk setiap ukuran blok yang mungkin semakin memperlambat kinerja.
sumber
Jika Anda dapat mengatur hierarki file yang berbeda untuk menjadi milik grup yang berbeda, Anda dapat mengatur kuota disk . Jangan berikan batas atas (atau jadikan ukuran disk) kecuali Anda menginginkannya. Anda masih dapat mengetahui secara instan berapa banyak kuota (efektif tak terbatas) yang digunakan grup.
Ini memang mengharuskan sistem file Anda mendukung kuota per-grup. Ext Linux [234] dan Solaris / * BSD / Linux's zfs lakukan. Akan lebih baik untuk kasus penggunaan Anda jika kuota grup memperhitungkan ACL, tapi saya rasa tidak.
sumber
Penggunaan umum
du
dapat sangat dipercepat dengan menggunakanncdu
.ncdu - NCurses Disk Usage
melakukan
du
, cache hasil dan menunjukkannya dalam gui baris perintah yang bagus, agak sebanding dengandu -hc -d 1 | sort -h
. Pengindeksan awal memakan waktu yang samadu
, tetapi mencari "pelakunya" yang mengisi ruang berharga dipercepat, karena semua subdirektori memiliki informasi cache yang awalnya di-cache tersedia.Jika subdirektori yang diperlukan dapat di-refresh dengan menekan [r] dan file / folder dapat dihapus dengan menekan [d], yang keduanya memperbarui statistik untuk semua direktori induk. Penghapusan meminta konfirmasi.
Jika perlu, percepatan lebih lanjut dapat dicapai dengan berkhotbah
ncdu -1xo- / | gzip >export.gz
di cronjob dan kemudian mengaksesnyazcat export.gz | ncdu -f-
, tetapi jelas memberikan informasi yang lebih usang.sumber
Saya lebih suka menggunakan agedu
Agedu adalah bagian dari perangkat lunak yang mencoba mencari file yang lama dan tidak digunakan dengan anggapan bahwa file-file ini kemungkinan besar tidak diinginkan. (mis. Unduhan yang hanya dilihat sekali.)
sumber
Seperti yang disebutkan oleh SHW,
agedu
memang membuat indeks. Saya pikir saya akan berbagi cara lain untuk membuat indeks, setelah membaca tentanglocatedb
. Anda dapat membuat versi Anda sendirilocatedb
daridu
keluaran:awk
mengatur ulang du output untuk memiliki nama file terlebih dahulu, sehinggafrcode
berfungsi dengan benar. Kemudian gunakanlocate
dengan database ini untuk melaporkan penggunaan disk dengan cepat:Anda dapat mengembangkan ini sesuai dengan kebutuhan Anda. Saya pikir ini adalah penggunaan yang bagus dari locatedb.
sumber
(lihat https://duc.zevv.nl ) mungkin yang Anda cari.
Duc menyimpan penggunaan disk dalam basis data yang dioptimalkan, menghasilkan antarmuka pengguna yang cepat. Tidak ada waktu tunggu setelah indeks selesai.
Memperbarui indeks sangat cepat bagi saya (kurang dari 10 detik untuk sekitar 950k file dalam direktori 121k, 2,8 TB). Memiliki GUI dan UI ncurses juga.
Penggunaan misalnya:
Dari situs web:
sumber
Saya memiliki cronjob yang diatur untuk menjalankan updatedb setiap 10 menit. Membuat semua buffer filesystem tetap bagus dan segar. Mungkin juga gunakan RAM murah itu untuk sesuatu yang baik. Gunakan slabtop, lihat 'sebelum' dan 'setelah'.
sumber
updatedb
tidak mengatakan apa pun tentang penggunaan disk. Jika Anda melakukannya hanya untuk melintasi disk, Anda akan merusak kinerja secara keseluruhan.du
lambat karena Anda harus mengakses metadata dari sejumlah besar file yang berpotensi, tersebar di sekitar disk. Jika Anda menjalankan updatedb secara agresif, metadata untuk semua file terpaksa disimpan dalam RAM. Lain kali Anda menjalankan operasi metadata-berat lainnya, alih-alih melakukan ribuan pencarian di disk, Anda menggunakan cache. Biasanya Anda memiliki peluang kecil untuk menyimpan bagian tertentu dari metadata pohon itu di-cache. Dengan 'metadata cache priming' saya, sangat mungkin bahwa data yang Anda inginkan baru di-cache. Tidak ada pencarian fisik == CEPAT.Jika Anda hanya perlu mengetahui ukuran direktori, Anda dapat mempercepatnya dengan hanya menghindari menulis informasi ke layar. Karena grand total adalah baris terakhir dari
du
perintah, Anda bisa langsung mengirimnyatail
.Struktur direktori 2GB membutuhkan waktu lebih dari satu detik untuk daftar lengkap tetapi kurang dari seperlima dari itu dengan formulir ini.
sumber
du -hs
lebih nyaman untuk tujuan itu.--max-depth 1