Bagaimana cara melihat penggunaan disk dengan lebih sedikit overhead dalam bash?

8
du -csh /

Hal di atas akan membutuhkan banyak waktu untuk menghitung, adakah cara untuk melihat hasil yang kurang akurat dengan overhead yang lebih sedikit?

MEMPERBARUI

Yang ingin saya ketahui adalah ukuran total di bawah direktori tertentu.

apache
sumber

Jawaban:

9

Sejauh versi yang lebih optimal du, saya tidak menyadarinya. Hal-hal yang terlintas dalam pikiran adalah:

  1. Simpan file-file ini pada ram ram atau sesuatu seperti itu.
  2. Jika hanya satu aplikasi yang menulis ke folder ini dan sub foldernya, maka mintalah aplikasi melacaknya.
  3. Jika semua file ini memiliki ukuran yang sama dan jumlah yang merata di antara direktori, Anda bisa menghitung jumlah sub direktori dan mengalikannya dengan file per direktori dan kemudian ukuran per file. Anda dapat melakukan ini dengan cepat hanya dengan menggunakan penghitungan tautan keras untuk direktori jika hanya Anda memiliki struktur dalam satu direktori ( stat -c '%h') - 2.
  4. Jadikan semua file ini milik pengguna tertentu dan gunakan mekanisme kuota.
  5. Gunakan partisi khusus dan gunakan saja df. Sistem file virtual (file pada sistem file yang dipasang melalui loopback) juga bisa melakukan ini.

Dari semua ini, kuota dan opsi partisi khusus mungkin yang paling mudah dan paling efisien.

Kyle Brandt
sumber
6

Masalahnya adalah bahwa 'du' harus menghitung setiap objek di sub-tree. Ini adalah operasi intensif metadata, dan membutuhkan waktu cukup lama untuk sebagian besar sistem file Linux. Beberapa sistem file, NTFS dan Novell NSS muncul di benak, memiliki kemampuan untuk melacak ukuran direktori seperti ini dalam metadata yang membuat operasi ini jauh lebih cepat. Secara umum, jika sistem file Anda mendukung kuota direktori, ia harus melacak data ini secara internal untuk penegakan, setiap perubahan ukuran direplikasi hingga pohon direktori ke kuota-point (NTFS) atau setiap direktori (NSS ) ketika itu terjadi, jadi mendapatkan ukuran direktori-tree sangat cepat.

Sayangnya, tidak ada cara untuk membuat du bekerja lebih cepat, hanya bekerja-sekitar.

  • Jalankan 'du' dalam mode batch dan hidup dengan hasil non-live
  • Buat sistem file baru dan gunakan 'df' sebagai gantinya
  • Buat file besar yang akan menampung direktori Anda, mountback-mount, format, dan gunakan 'df' sebagai gantinya pada mount-point baru itu. Jika Anda membutuhkan lebih banyak ruang, lepaskan pemasangan loopback, perpanjang file, dan pasang kembali.
sysadmin1138
sumber
+1 Ini adalah jawaban yang sangat berguna.
Richard Holloway
4
du -h --max-depth=1

Memberi Anda ukuran dalam format KB / MB / GB manusia dari direktori kerja Anda saat ini.

David Rickman
sumber
Saya pikir mereka ingin tahu mengapa perlu begitu lama bagi du untuk menghasilkan dan menjawab. Saya pikir windows juga bertindak sama. Jika Anda mengklik kanan sebuah direktori maka Anda harus menunggu sementara itu menghitung ukuran setiap subdirektori. Hanya cara sistem berkas bekerja.
The Unix Janitor
Ya, kecuali mereka menjalankan layanan pengindeksan atau sesuatu.
David Rickman
3

Dengan alat standar Anda harus mendapatkan ukuran setiap file dalam direktori setiap kali Anda ingin mengetahui ukuran total. Cara yang mungkin lebih efisien untuk melakukannya adalah dengan memiliki "monitor ukuran direktori", yang melacak ukuran direktori saat ini. Tidak ada hal seperti itu (yang saya tahu), tetapi Anda bisa menerapkannya dengan inotify. Mungkin tidak dengan bash (dan inotify-tools), tetapi Anda mungkin bisa menggunakan python dan pyinotify, misalnya.

Dan Andreatta
sumber
2

Anda mungkin menemukan gt5berguna. Ini menyimpan duinformasi terbaru dan melakukan perbedaan terhadap itu saat dijalankan berikutnya. Ini menampilkan outputnya menggunakan browser mode teks seperti links.

Dijeda sampai pemberitahuan lebih lanjut.
sumber
2

Juga, pertimbangkan opsi -x pada du - "satu sistem file" jika Anda melakukan

du -xh / --max-depth=1 

Anda hanya akan melihat ringkasan penggunaan disk di partisi root Anda, dan itu tidak akan mencoba menambahkan / proc, / sys, / dev, dan seterusnya ...

Jason
sumber
2

jika Anda hanya ingin penggunaan disk untuk sistem file root, maka

df -j /


sumber
1

Tidak. Bisakah Anda melakukan du piped secara berkala ke file teks, dalam sebuah cron job yang diatur untuk dijalankan dalam semalam, sehingga Anda tidak memiliki data terkini yang segera tersedia?

Perhatikan bahwa mengukur ruang disk yang digunakan oleh folder yang berisi no besar file di Windows juga membutuhkan waktu.

xenny
sumber
0

df -h akan melakukan triknya

Antoine Benkemoun
sumber
Yang ingin saya ketahui adalah ukuran total di bawah direktori tertentu.
apache
0

df -kh /

ini akan menunjukkan jumlah ruang disk yang digunakan dan tersedia.

Unix Janitor
sumber
0

Mungkin

df -h

teks tambahan karena jawaban singkat dan ringkas tidak cukup bagi serverfault untuk menganggap saya manusia.


sumber
Tapi saya perlu tahu ukuran total di bawah direktori tertentu
apache
maka gunakan harus menggunakan du
The Unix Janitor
Tetapi di windows, saya dapat melihat total ruang yang digunakan tanpa overhead, mengapa tidak bisa di linux?
apache
Apakah kamu serius? ntfs bukan ext3
The Unix Janitor
1
@apache, oh ada overhead, coba lihat ukuran folder 20GB dengan banyak file 10-20 MB. Ada def overhead.
Zypher
0

Untuk menemukan ruang di bawah direktori itu saja, daftar bukan /. Untuk menemukan ruang di bawah direktori foodan bar, daftarkan keduanya:

du -csh foo bar
mpez0
sumber
0

Anda harus menggunakan dnotify untuk menghitung penggunaan disk jika sistem file tidak sering diubah.

Mircea Vutcovici
sumber