Ketika mengelola sistem Linux, saya sering menemukan diri saya kesulitan untuk melacak pelakunya setelah partisi penuh. Saya biasanya menggunakan du / | sort -nr
tetapi pada sistem file besar ini membutuhkan waktu lama sebelum hasilnya dikembalikan.
Juga, ini biasanya berhasil dalam menyoroti pelaku terburuk tetapi saya sering menemukan diri saya terpaksa du
tanpa sort
dalam kasus yang lebih halus dan kemudian harus menjelajah melalui output.
Saya lebih suka solusi command line yang bergantung pada perintah Linux standar karena saya harus mengelola beberapa sistem dan menginstal perangkat lunak baru itu merepotkan (terutama ketika kehabisan ruang disk!)
command-line
partition
disk-usage
command
Stephen Kitt
sumber
sumber
Jawaban:
Coba
ncdu
, penganalisis penggunaan disk baris perintah yang luar biasa:sumber
sudo apt install ncdu
di ubuntu mendapatkannya dengan mudah. Ini luar biasancdu -x
untuk hanya menghitung file dan direktori pada sistem file yang sama dengan direktori yang sedang dipindai.sudo ncdu -rx /
harus memberikan pembacaan bersih pada direktori / file terbesar HANYA pada drive area root. (-r
= read-only,-x
= tetap pada filesystem yang sama (artinya: jangan melintasi mount filesystem lain))Jangan langsung ke
du /
. Gunakandf
untuk menemukan partisi yang menyakiti Anda, dan kemudian cobadu
perintah.Salah satu yang ingin saya coba adalah
karena mencetak ukuran dalam "bentuk yang dapat dibaca manusia". Kecuali Anda memiliki partisi yang sangat kecil, mencari direktori di gigabytes adalah filter yang cukup bagus untuk apa yang Anda inginkan. Ini akan memakan waktu, tetapi kecuali jika Anda memiliki kuota yang diatur, saya pikir itulah yang akan terjadi.
Seperti @jchavannes tunjukkan dalam komentar, ekspresi bisa menjadi lebih tepat jika Anda menemukan terlalu banyak positif palsu. Saya memasukkan saran, yang memang membuatnya lebih baik, tetapi masih ada positif palsu, jadi hanya ada pengorbanan (expr sederhana, hasil lebih buruk; expr lebih kompleks dan lebih lama, hasil lebih baik). Jika Anda memiliki terlalu banyak direktori kecil yang muncul di output Anda, sesuaikan regex Anda. Sebagai contoh,
bahkan lebih akurat (direktori <1GB tidak akan terdaftar).
Jika Anda lakukan memiliki kuota, Anda dapat menggunakan
untuk menemukan pengguna yang memonopoli disk.
sumber
grep '[0-9]G'
mengandung banyak positif palsu dan juga menghilangkan desimal. Ini bekerja lebih baik untuk saya:sudo du -h / | grep -P '^[0-9\.]+G'
[GT]
bukan hanyaG
du -h | sort -hr | head
Untuk tampilan pertama, gunakan tampilan "ringkasan" dari
du
:Efeknya adalah untuk mencetak ukuran setiap argumennya, yaitu setiap folder root dalam kasus di atas.
Lebih lanjut, GNU
du
dan BSDdu
dapat dibatasi oleh kedalaman ( tetapi POSIXdu
tidak bisa! ):GNU (Linux, ...):
BSD (macOS, ...):
Ini akan membatasi tampilan output hingga kedalaman 3. Tentu saja ukuran yang dihitung dan ditampilkan masih total dari kedalaman penuh. Namun demikian, membatasi kedalaman tampilan secara drastis mempercepat perhitungan.
Opsi bermanfaat lainnya adalah
-h
(kata-kata pada GNU dan BSD tetapi, sekali lagi, bukan pada POSIX-onlydu
) untuk output "yang dapat dibaca manusia" (yaitu menggunakan KiB, MiB dll .).sumber
du
mengeluh tentang-d
mencoba--max-depth 5
sebagai gantinya.du -hcd 1 /directory
. -h untuk dibaca manusia, c untuk total dan d untuk kedalaman.du -hd 1 <folder to inspect> | sort -hr | head
du --max-depth 5 -h /* 2>&1 | grep '[0-9\.]\+G' | sort -hr | head
untuk menyaring Izin ditolakAnda juga dapat menjalankan perintah berikut menggunakan
du
:-s
pilihan merangkum dan menampilkan total untuk setiap argumen.h
mencetak Mio, Gio, dll.x
= tetap dalam satu sistem file (sangat berguna).P
= jangan ikuti symlinks (yang dapat menyebabkan file dihitung dua kali misalnya).Hati-hati,
/root
direktori tidak akan ditampilkan, Anda harus menjalankan~# du -Pshx /root 2>/dev/null
untuk mendapatkan itu (sekali, saya berjuang banyak tidak menunjukkan bahwa/root
direktori saya sudah penuh).Edit: Opsi terkoreksi -P
sumber
du -Pshx .* * 2>/dev/null
+ direktori tersembunyi / sistemMenemukan file terbesar di sistem file selalu akan memakan waktu lama. Menurut definisi Anda harus menelusuri seluruh sistem file untuk mencari file besar. Satu-satunya solusi adalah menjalankan cron job di semua sistem Anda agar file siap sebelumnya.
Satu hal lagi, opsi x du berguna untuk mencegah du mengikuti titik mount ke sistem file lain. Yaitu:
Perintah penuh yang biasanya saya jalankan adalah:
The
-m
berarti kembali hasil dalam megabyte, dansort -rn
akan mengurutkan hasil jumlah terbesar pertama. Anda kemudian dapat membuka use.txt di editor, dan folder terbesar (dimulai dengan /) akan berada di atas.sumber
-x
benderanya!ncdu
- setidaknya lebih cepat daridu
ataufind
(tergantung pada kedalaman dan argumen) ..sudo du -xm / | sort -rn > ~/usage.txt
Saya selalu menggunakan
du -sm * | sort -n
, yang memberi Anda daftar diurutkan berapa banyak subdirektori dari direktori kerja saat ini habis, dalam mebibytes.Anda juga dapat mencoba Konqueror, yang memiliki mode "ukuran tampilan", yang mirip dengan apa yang dilakukan WinDirStat pada Windows: ia memberi Anda gambaran viual file / direktori mana yang menggunakan sebagian besar ruang Anda.
Pembaruan: pada versi yang lebih baru, Anda juga dapat menggunakan
du -sh * | sort -h
yang akan menampilkan filesize yang dapat dibaca manusia dan mengurutkannya. (angka akan berakhiran dengan K, M, G, ...)Untuk orang-orang yang mencari alternatif untuk tampilan ukuran file Konqueror KDE3 dapat melihat filelight, meskipun itu tidak begitu baik.
sumber
Saya menggunakan ini untuk 25 pelanggar terburuk teratas di bawah direktori saat ini
sumber
-h
, kemungkinan akan mengubah efek darisort -nr
perintah - artinya pengurutan tidak akan berfungsi lagi, dan kemudianhead
perintah juga tidak akan berfungsi lagiDi perusahaan sebelumnya, kami dulu memiliki pekerjaan cron yang dijalankan semalam dan mengidentifikasi file apa pun dengan ukuran tertentu, misalnya
temukan / -ukuran + 10000k
Anda mungkin ingin lebih selektif tentang direktori yang Anda cari, dan hati-hati terhadap semua drive yang dipasang dari jarak jauh yang mungkin offline.
sumber
-x
opsi find untuk memastikan Anda tidak menemukan file di perangkat lain selain titik awal dari perintah find Anda. Ini memperbaiki masalah drive yang dipasang dari jarak jauh.Salah satu opsi adalah menjalankan perintah du / sort Anda sebagai tugas cron, dan menghasilkan file, jadi sudah ada di sana saat Anda membutuhkannya.
sumber
Untuk commandline saya pikir metode du / sort adalah yang terbaik. Jika Anda tidak berada di server, Anda harus melihat Baobab - Penganalisis penggunaan disk . Program ini juga membutuhkan waktu untuk dijalankan, tetapi Anda dapat dengan mudah menemukan sub direktori yang dalam, jauh di bawah semua ISO Linux yang lama.
sumber
saya menggunakan
dan saya mengubah kedalaman maksimum sesuai dengan kebutuhan saya. Opsi "c" mencetak total untuk folder dan opsi "h" mencetak ukuran dalam K, M, atau G yang sesuai. Seperti yang dikatakan orang lain, masih memindai semua direktori, tetapi membatasi output dengan cara yang saya temukan lebih mudah untuk menemukan direktori besar.
sumber
Saya akan ke urutan kedua
xdiskusage
. Tapi saya akan menambahkan dalam catatan bahwa itu sebenarnya adalah frontend du dan dapat membaca output du dari file. Jadi Anda dapat menjalankandu -ax /home > ~/home-du
server Anda,scp
file kembali, dan kemudian menganalisisnya secara grafis. Atau pipa melalui ssh.sumber
Coba masukkan output dari du ke skrip awk sederhana yang memeriksa untuk melihat apakah ukuran direktori lebih besar dari beberapa ambang batas, jika demikian mencetaknya. Anda tidak harus menunggu seluruh pohon dilintasi sebelum Anda mulai mendapatkan info (vs. banyak jawaban lainnya).
Misalnya, berikut ini menampilkan direktori apa pun yang mengkonsumsi lebih dari sekitar 500 MB.
Untuk membuat hal di atas sedikit lebih dapat digunakan kembali, Anda dapat mendefinisikan suatu fungsi di .bashrc Anda, (atau Anda bisa membuatnya menjadi skrip mandiri).
Jadi
dubig 200 ~/
terlihat di bawah direktori home (tanpa mengikuti symlinks off device) untuk direktori yang menggunakan lebih dari 200 MB.sumber
du -k
akan membuatnya sangat yakin bahwa du menggunakan unit KBdu -kx $2 | awk '$1>'$(($1*1024))
(jika Anda hanya menentukan kondisi alias pola untuk memulai tindakan defaultnyaprint $0
)du -kx / | awk '$1 > 500000'
du -kx / | tee /tmp/du.log | awk '$1 > 500000'
. Ini sangat membantu karena jika pemfilteran pertama Anda ternyata tidak membuahkan hasil, Anda dapat mencoba nilai-nilai lain seperti iniawk '$1 > 200000' /tmp/du.log
atau memeriksa output lengkap seperti inisort -nr /tmp/du.log|less
tanpa memindai ulang seluruh sistem fileSaya suka xdiskusage tua yang bagus sebagai alternatif grafis untuk du (1).
sumber
Saya lebih suka menggunakan yang berikut untuk mendapatkan ikhtisar dan menelusuri dari sana ...
Ini akan menampilkan hasil dengan output yang dapat dibaca manusia seperti GB, MB. Ini juga akan mencegah traverse melalui sistem file jarak jauh. The
-s
pilihan hanya menunjukkan ringkasan dari setiap folder yang ditemukan sehingga Anda dapat menelusuri lebih lanjut jika tertarik rincian lebih lanjut dari folder. Ingatlah bahwa solusi ini hanya akan menampilkan folder sehingga Anda ingin menghilangkan / setelah tanda bintang jika Anda menginginkan file juga.sumber
Tidak disebutkan di sini tetapi Anda juga harus memeriksa lsof jika ada file yang dihapus / digantung. Saya memiliki file tmp 5.9GB yang dihapus dari cronjob yang melarikan diri.
https://serverfault.com/questions/207100/how-can-i-find-phantom-storage-usage Membantu saya mencari pemilik proses dari file tersebut (cron) dan kemudian saya bisa
/proc/{cron id}/fd/{file handle #}
mengurangi file di pertanyaan untuk memulai pelarian, atasi itu, dan kemudian gema ""> file untuk membersihkan ruang dan biarkan cron dengan anggun menutup sendiri.sumber
Dari terminal, Anda bisa mendapatkan representasi visual dari penggunaan disk dengan dutree
Ini sangat cepat dan ringan karena diterapkan di Rust
Lihat semua detail penggunaan di situs web
sumber
Untuk du baris perintah (dan opsi itu) tampaknya menjadi cara terbaik. DiskHog sepertinya menggunakan du / df info dari cron job juga sehingga saran Peter mungkin merupakan kombinasi terbaik dari yang sederhana dan efektif.
( FileLight dan KDirStat ideal untuk GUI.)
sumber
Anda dapat menggunakan alat standar seperti
find
dansort
untuk menganalisis penggunaan ruang disk Anda.Daftar direktori yang diurutkan berdasarkan ukurannya:
Daftar file yang diurutkan berdasarkan ukurannya:
sumber
Mungkin patut untuk dicatat bahwa
mc
(Midnight Commander, manajer file mode teks klasik) secara default hanya menunjukkan ukuran inode direktori (biasanya4096
) tetapi dengan CtrlSpaceatau dengan Alat menu Anda dapat melihat ruang yang ditempati oleh direktori yang dipilih dalam sebuah tulisan yang dapat dibaca manusia. format (misalnya, beberapa suka103151M
).Sebagai contoh, gambar di bawah ini menunjukkan ukuran penuh dari distribusi vanilla TeX Live tahun 2018 dan 2017, sedangkan versi tahun 2015 dan 2016 hanya menunjukkan ukuran inode (tetapi masing-masing hampir 5 Gb).
Artinya, CtrlSpaceharus dilakukan satu per satu, hanya untuk level direktori yang sebenarnya, tetapi sangat cepat dan praktis ketika Anda bernavigasi dengan
mc
yang mungkin Anda tidak perluncdu
(yang memang, hanya untuk tujuan ini lebih baik). Jika tidak, Anda juga dapat larincdu
darimc
. tanpa keluar darimc
atau meluncurkan terminal lain.sumber
Pada awalnya saya memeriksa ukuran direktori, seperti:
sumber
Jika Anda tahu bahwa file besar telah ditambahkan dalam beberapa hari terakhir (katakanlah, 3), maka Anda dapat menggunakan perintah find bersama "
ls -ltra
" untuk menemukan file yang baru ditambahkan:Ini akan memberi Anda hanya file ("
-type f
"), bukan direktori; hanya file dengan waktu modifikasi selama 3 hari terakhir ("-mtime -3
") dan jalankan "ls -lart
" terhadap setiap file yang ditemukan ("-exec
" bagian).sumber
Untuk memahami penggunaan ruang disk yang tidak proporsional, sering kali berguna untuk memulai di direktori root dan menelusuri beberapa anak terbesarnya.
Kita bisa melakukannya dengan
Itu adalah:
sekarang katakanlah / usr tampak terlalu besar
sekarang jika / usr / local mencurigakan besar
dan seterusnya...
sumber
Saya telah menggunakan perintah ini untuk menemukan file yang lebih besar dari 100 MB:
sumber
Saya telah berhasil melacak pelanggar terburuk (s) piping
du
output dalam bentuk yang dapat dibaca manusiaegrep
dan cocok dengan ekspresi reguler.Sebagai contoh:
yang seharusnya mengembalikan semuanya 500 MB atau lebih tinggi.
sumber
du -k | awk '$1 > 500000'
. Jauh lebih mudah untuk memahami, mengedit, dan memperbaiki pada percobaan pertama.Jika Anda menginginkan kecepatan, Anda dapat mengaktifkan kuota pada sistem file yang ingin Anda pantau (Anda tidak perlu menetapkan kuota untuk pengguna mana pun), dan menggunakan skrip yang menggunakan perintah kuota untuk mendaftar ruang disk yang digunakan oleh setiap pengguna. Misalnya:
akan memberi Anda penggunaan disk dalam blok untuk pengguna tertentu pada sistem file tertentu. Anda harus dapat memeriksa penggunaan dalam hitungan detik dengan cara ini.
Untuk mengaktifkan kuota, Anda perlu menambahkan usrquota ke opsi sistem file di file / etc / fstab Anda dan kemudian mungkin reboot sehingga kuota cek dapat dijalankan pada sistem file idle sebelum kuotaon dipanggil.
sumber
Berikut adalah aplikasi kecil yang menggunakan pengambilan sampel dalam untuk menemukan tumor di disk atau direktori apa pun. Itu berjalan pohon direktori dua kali, sekali untuk mengukurnya, dan kedua kalinya untuk mencetak jalan ke 20 byte "acak" di bawah direktori.
Outputnya terlihat seperti ini untuk direktori Program Files saya:
Ini memberitahu saya bahwa direktori tersebut 7.9gb, di antaranya
Cukup sederhana untuk bertanya apakah semua ini dapat dibongkar.
Ini juga menceritakan tentang jenis file yang didistribusikan di seluruh sistem file, tetapi secara bersama-sama mewakili peluang untuk menghemat ruang:
Ini menunjukkan banyak hal lain di sana juga, yang mungkin bisa saya lakukan tanpa, seperti "SmartDevices" dan "ce" dukungan (~ 15%).
Memang butuh waktu linier, tetapi tidak harus sering dilakukan.
Contoh hal yang telah ditemukan:
sumber
Saya memiliki masalah serupa, tetapi jawaban pada halaman ini tidak cukup. Saya menemukan perintah berikut sebagai yang paling berguna untuk daftar:
du -a / | sort -n -r | head -n 20
Yang akan menunjukkan kepada saya 20 pelanggar terbesar. Namun meskipun saya menjalankan ini, itu tidak menunjukkan kepada saya masalah sebenarnya, karena saya sudah menghapus file. Tangkapannya adalah bahwa ada proses yang masih berjalan yang mereferensikan file log yang dihapus ... jadi saya harus membunuh proses itu terlebih dahulu kemudian ruang disk muncul sebagai gratis.
sumber
Anda dapat menggunakan DiskReport.net untuk menghasilkan laporan web online semua disk Anda.
Dengan banyak proses, ini akan menampilkan grafik riwayat untuk semua folder Anda, mudah untuk menemukan apa yang telah tumbuh
sumber
Ada sepotong freeware lintas-platform yang bagus yang disebut JDiskReport yang mencakup GUI untuk mengeksplorasi apa yang mengambil semua ruang itu.
Tangkapan layar contoh:
Tentu saja, Anda perlu membersihkan sedikit ruang secara manual sebelum Anda dapat mengunduh dan menginstalnya, atau mengunduhnya ke drive lain (seperti USB thumbdrive).
(Disalin di sini dari jawaban penulis yang sama pada pertanyaan rangkap)
sumber