Cari tahu proses apa yang ditulis ke hard drive


32

Di Lenovo T400 dan Ubuntu saya, lampu untuk penulisan hard drive terus berkedip. Saya bertanya-tanya apakah di Linux dimungkinkan untuk mengetahui proses apa yang saya / O lakukan pada hard drive? Sama seperti oleh top, Anda dapat mengetahui proses apa yang menggunakan sebagian besar CPU dan memori.

Jawaban:


42

Iotop adalah alat yang bagus untuk apa yang Anda inginkan. Hal ini juga memungkinkan seseorang untuk menampilkan jumlah akumulasi I / O pada setiap BACA DISK, DISK MENULIS, SWAPIN, dan IO (persentase keseluruhan). Ini melalui antarmuka yang bagus:

  • Anda cukup menekan apada keyboard, dan itu akan mengurutkan proses paling lapar di atas.
  • Membalik urutan, Anda cukup menekan r.
  • Jika Anda ingin mengurutkan berdasarkan kolom lain, Anda cukup menekan tombol kiri / kanan.

Seperti top, presentasi agak sibuk. Hal lain adalah ia tidak memiliki banyak sekali opsi yang topmemiliki (mis. Saya tidak dapat memilih untuk menyembunyikan kolom mana pun yang saya tidak tertarik), tetapi alat ini lebih dari cukup baik untuk tujuan spesifiknya.


3
Powertop juga berguna untuk menemukan apa yang menghabiskan baterai pada laptop; iotop masih menjadi tempat pertama untuk mencari akses disk.
Gilles 'SANGAT berhenti menjadi jahat'

seseorang dapat lulus -o( --only) untuk benar-benar menyaring semua tugas yang tidak melakukan I / O. Ini membuat daftar kurang ramai
Marcin Orlowski

15

Anda dapat menggunakan lsof( man lsof ). Berikut ini akan mengembalikan daftar semua file yang terbuka untuk ditulis:

lsof | grep -e "[[:digit:]]\+w"

1
File apa yang terbuka, dan file apa yang sebenarnya diakses adalah dua hal yang berbeda.
psusi

@psusi File terbuka untuk menulis kemungkinan besar sedang "diakses." Juga, lebih banyak informasi dapat diambil dengan mempelajari lsof melalui manpage-nya.
James Sumners

5
File yang terbuka untuk ditulis mungkin ditulis pada beberapa titik, tetapi belum tentu saat ini. Banyak file yang tetap terbuka tetapi jarang ditulis. Di sisi lain, file yang sedang ditulis untuk dapat dibuka dan ditutup dengan cepat sehingga tidak akan muncul di lsof. Either way, itu sangat membantu mencari tahu proses apa yang sebenarnya menulis ke disk saat ini.
psusi

Perintah wdari di atas membuat Anda mengambil file yang terbuka hanya untuk menulis . File yang terbuka untuk ditulis dan dibaca ( u) tidak akan ditampilkan, tetapi juga dapat ditulis. Jika Anda ingin melihat file terbuka untuk ditulis dan untuk dibaca + tulis, saya yakin ini yang Anda cari:lsof | grep -e "[[:digit:]]\+[wu]\{1\}"
Martijn

1
@ Martijn Anda akan ingin menggunakan grep -e**w**untuk menghindari pencocokan [0-9]\+[wu]di dalam kolom lain


2

Khusus untuk aktivitas disk yang rendah, perlu menggunakan iotop dalam mode batch, untuk mencegah jalur akses pendek menghilang dengan cepat. Jawaban oleh Bagaimana saya mencatat sistem file baca / tulis dengan nama file di Linux? menunjukkan cara melakukan ini.

Sejauh ini iotopadalah solusi keseluruhan terbaik. Perintah berikut memberi Anda output waktu-nyata dari semua proses menggunakan disk.

iotop -bktoqqq -d .5

where: -b     is batch mode
       -k     is kilobytes/s
       -t     adds timestamp
       -o     only show processes or threads actually doing I/O
       -qqq   removes output headers
       -d .5  updates every .5 seconds

Setelah Anda memiliki id proses, Anda juga dapat menemukan file

 lsof -p $PID

1
Bagaimana jawaban ini berbeda dari jawaban di atas (sangat lama)? Adalah baik ketika menjawab pertanyaan lama untuk menjelaskan bagaimana jawaban Anda berbeda dari jawaban sebelumnya. Ini membantu pembaca mengurutkan di antara jawaban.
Stephen Rauch

Terima kasih telah menunjukkan ini. Saya telah mengedit jawaban ini dengan mempertimbangkan komentar Anda.
Frank Breitling
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.