Bagaimana menemukan proses mana yang secara teratur menulis ke disk?

41

Bagaimana saya bisa menemukan proses mana yang terus-menerus menulis ke disk?

Saya suka workstation saya menjadi dekat dengan sunyi dan saya hanya membangun sistem baru (P8B75-M + Core i5 3450s - 's' karena memiliki TDP max lebih rendah) dengan kipas yang tenang dll. Dan menginstal Debian Wheezy 64-bit di atasnya.

Dan ada sesuatu yang mengganggu saya: Saya dapat mendengar semacam pola seperti jika hard disk sedang menulis atau mencari sesuatu ( centang ... centang ... centang ... trrrrrr bilas dan ulangi setiap detik atau lebih).

Di masa lalu saya memiliki masalah yang sama di masa lalu (bertahun-tahun yang lalu) dan ternyata itu adalah beberapa log CUPS atau sesuatu dan saya hanya diarahkan kembali bahwa satu (tidak penting) masuk ke disk RAM (nyata).

Tapi di sini saya tidak yakin.

Saya mencoba yang berikut ini:

ls -lR /var/log > /tmp/a.tmp && sleep 5 && ls -lR /var/log > /tmp/b.tmp && diff /tmp/?.tmp

tapi tidak ada yang berubah di sana.

Sekarang yang aneh adalah bahwa saya juga mendengar polanya ketika prompt meminta saya untuk memasukkan frasa sandi dekripsi LVM saya ditampilkan.

Mungkinkah itu sesuatu di kernel / sistem yang baru saja saya instal atau apakah saya memiliki harddisk yang rusak?

hdparm -tT /dev/sda melaporkan kecepatan HD yang benar (130 GB / s non-cache, sata 6GB) dan saya sudah menginstal dan dikompilasi dari sumber besar (Emacs) tanpa masalah jadi saya tidak berpikir sistemnya buruk.

(HD adalah Seagate Barracude 500GB)

Cedric Martin
sumber
Apakah Anda yakin itu adalah hard drive yang membuat suara itu, dan bukan sesuatu yang lain? (Periksa kipas, termasuk kipas PSU. Mendapat bunyi klik yang sangat aneh ketika kabel yang sangat tipis terlalu dekat dengan kipas dan kadang-kadang akan sedikit menyentuh bilah dan terpental untuk beberapa "klik" ...)
Mat
@Mat: Saya akan mengambil hard drive di luar kasing (konektornya harus cukup panjang) untuk memastikan dan saya akan melaporkan kembali; )
Cedric Martin
2
Pastikan sistem file disk Anda dipasang relatime atau noatime. Membaca file dapat menyebabkan menulis ke inode untuk merekam waktu akses.
camh

Jawaban:

43

Apakah Anda mencoba memeriksa program apa iotopyang ditampilkan? Ini akan memberi tahu Anda dengan tepat proses apa yang sedang ditulis ke disk.

contoh output:

Total DISK READ: 0.00 B/s | Total DISK WRITE: 0.00 B/s
  TID  PRIO  USER     DISK READ  DISK WRITE  SWAPIN     IO>    COMMAND
    1 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % init
    2 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [kthreadd]
    3 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [ksoftirqd/0]
    6 rt/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [migration/0]
    7 rt/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [watchdog/0]
    8 rt/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [migration/1]
 1033 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [flush-8:0]
   10 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [ksoftirqd/1]
mnmnc
sumber
1
terima kasih atas tipnya. Saya tidak tahu tentang iotop . Pada Debian, saya melakukan pencarian apt-cache iotop untuk mengetahui bahwa saya harus apt-get iotop . Perintah yang sangat keren!
Cedric Martin
3
Saya menggunakan iotop -o -b -d 10yang setiap 10 detik mencetak daftar proses yang membaca / menulis ke disk dan jumlah bandwidth IO yang digunakan.
ndemou
15

Anda dapat mengaktifkan IO debugging melalui echo 1 > /proc/sys/vm/block_dumpdan kemudian menonton pesan debugging di / var / log / syslog . Ini memiliki keuntungan mendapatkan beberapa jenis file log dengan aktivitas masa lalu sedangkan iotophanya menunjukkan aktivitas saat ini.

scai
sumber
4
Sangat gila untuk membiarkan sysloging diaktifkan ketika block_dump aktif. Logging menyebabkan aktivitas disk, yang menyebabkan logging, yang menyebabkan aktivitas disk, dll. Lebih baik hentikan syslog sebelum mengaktifkan ini (dan gunakan dmesg untuk membaca pesan-pesan)
dan3
Anda memang benar, meskipun efeknya tidak sedramatis yang Anda gambarkan. Jika Anda hanya ingin mengintip aktivitas disk tidak perlu menghentikan daemon syslog.
scai
Saya sudah mencobanya sekitar 2 tahun yang lalu dan itu menghentikan mesin saya. Suatu hari ketika saya tidak memiliki kegiatan lari yang penting saya akan mencobanya lagi :)
dan3
Saya mencobanya, tidak ada yang benar-benar terjadi. Terutama karena buffering sistem file. Tulis ke syslog tidak langsung memicu menulis ke disk.
scai
1
Saya akan berasumsi ada tingkat tarif umum yang membatasi untuk pesan log, yang menangani kasus ini juga (?)
Volker Siegel
5

Dengan asumsi bahwa suara disk disebabkan oleh proses yang menyebabkan penulisan dan bukan karena masalah disk spindown , Anda dapat menggunakan subsistem audit (instal auditdpaket ). Letakkan arloji di synctelepon dan teman-temannya:

auditctl -S sync -S fsync -S fdatasync -a exit,always

Tonton log masuk /var/log/audit/audit.log. Berhati-hatilah untuk tidak melakukan ini jika audit log sendiri memerah! Periksa /etc/auditd.confbahwa flushopsi diatur ke none.

Jika file sering dibilas, kemungkinan penyebabnya adalah log sistem. Misalnya, jika Anda mencatat upaya koneksi masuk yang gagal dan seseorang sedang memeriksa mesin Anda, itu akan menghasilkan banyak entri; ini dapat menyebabkan disk memancarkan suara gaya senapan mesin. Dengan log daemon sysklogd dasar, periksa /etc/syslog.conf: jika nama file log tidak didahului oleh -, maka log tersebut akan dihapus ke disk setelah setiap penulisan.

Gilles 'SANGAT berhenti menjadi jahat'
sumber
@StephenKitt Huh. Tidak. Penanya menyebut Debian jadi saya mengubahnya ke tautan ke paket Debian.
Gilles 'SANGAT berhenti menjadi jahat'
3

Mungkin hard disk Anda berputar secara otomatis, banyak hard disk tingkat konsumen yang melakukannya belakangan ini. Sayangnya pada sistem yang sarat muatan, ini mengakibatkan drive terus-menerus berputar dan kemudian berputar lagi, terutama jika Anda menjalankan hddtemp atau serupa untuk memantau suhu drive (kebanyakan drive dengan bodohnya tidak membiarkan Anda menanyakan nilai suhu SMART tanpa memutar drive - cretinous!).

Ini tidak hanya menjengkelkan, ia dapat aus drive lebih cepat karena banyak drive hanya memiliki jumlah siklus taman yang terbatas. mis. lihat https://bugs.launchpad.net/ubuntu/+source/hdparm/+bug/952556 untuk deskripsi masalahnya.

Saya menonaktifkan idle-spindown pada semua drive saya dengan sedikit kode shell berikut. Anda bisa meletakkannya di skrip /etc/rc.boot, atau di /etc/rc.local atau serupa.

untuk disk di / dev / sd? ; melakukan
  / sbin / hdparm -q -S 0 "$ disk"
selesai
cas
sumber
2
bahwa Anda tidak dapat meminta pembacaan SMART tanpa memutar drive membuat saya kehabisan kata-kata: - / Sekarang jelas masalah "spinning down" bisa menjadi sangat rumit. Mengenai menonaktifkan spinning down: bukankah itu dengan sendirinya menyebabkan HD lebih cepat aus? Maksud saya: tidak pernah "beristirahat" selama sistem masih aktif?
Cedric Martin
IIRC Anda dapat meminta beberapa nilai SMART tanpa menyebabkan drive berputar, tetapi suhu bukan salah satunya pada salah satu drive yang telah saya uji (termasuk model dari WD, Seagate, Samsung, Hitachi). Yang, tentu saja, gila karena kekhawatiran tentang suhu adalah salah satu alasan untuk idle drive. re: wear: AIUI 1. kecepatan konstan kurang dipakai daripada mengubah kecepatan. 2. drive harus memarkir kepala di area yang aman dan drive hanya dinilai untuk melakukan itu berkali-kali (IIRC hingga beberapa ratus ribu - mudah dilampaui jika drive dalam keadaan diam dan berputar setiap beberapa detik)
cas
Ini adalah perdebatan panjang tentang apakah lebih baik membiarkan drive berjalan atau memutarnya. Secara pribadi saya percaya yang terbaik adalah membiarkannya berjalan - saya mematikan komputer saya di malam hari dan ketika saya keluar tetapi selain itu saya tidak pernah memutar drive saya ke bawah. Beberapa orang lebih suka memutarnya, misalnya, pada malam hari jika mereka membiarkan komputer menyala atau jika komputer dalam waktu lama, dan dalam kasus seperti itu, keuntungan menurunkannya selama beberapa jam dibandingkan membiarkannya berjalan masih bisa diperdebatkan . Apa yang tidak pernah baik adalah ketika hard drive berulang kali berputar naik dan kembali dalam waktu singkat.
Micheal Johnson
Perhatikan juga bahwa memutar drive ke bawah setelah diam selama beberapa jam agak konyol, karena jika diam selama beberapa jam maka kemungkinan akan digunakan kembali dalam satu jam. Dalam hal ini, tampaknya akan lebih baik untuk memutar drive ke bawah segera jika idle (seperti, dalam waktu 10 menit), tetapi juga mungkin bagi drive untuk diam selama beberapa menit ketika seseorang menggunakan komputer dan kemungkinan membutuhkan drive lagi segera.
Micheal Johnson
Saya pikir yakin ini akan memperbaiki masalah saya karena saya mendengar drive membuat suara clacking berkala (3-4 kali / detik) seperti sedang menulis walaupun tidak terpasang! Tapi saya masih mendengar suara berisik setelah menjalankan perintah ini. Yang mengkhawatirkan, ini adalah drive yang saya gunakan untuk mencadangkan SSD internal saya ...
Michael
1

Saya baru saja menemukan bahwa smart menyebabkan disk USB eksternal berputar berulang-ulang pada raspberry pi saya. Walaupun SMART pada umumnya adalah hal yang baik, saya memutuskan untuk menonaktifkannya lagi dan sejak saat itu tampaknya aktivitas disk yang tidak diinginkan telah berhenti

jro
sumber
Anda dapat mengonfigurasi daemon pintar agar tidak memindai disk USB, kebanyakan distribusi linux yang baik melakukan ini secara default.
lzap
1

Anda bisa sedikit kesal. Harus mempersempitnya untuk sebagian besar.

find / -mount -newer /proc -print

Berikan file yang dimodifikasi sejak boot pada perangkat fisik sistem / file. Mengetahui file kemungkinan akan membantu mengidentifikasi penulis.

pengguna190618
sumber
1

Jika Anda perlu mempersempitnya ke disk yang tepat gunakan yang berikut ini:

jalankan lsblkdan cari nomor perangkat. Dalam kasus di bawah ini9:126

NAME        MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINT
sda           8:0    0   7.3T  0 disk  
└─md126       9:126  0  13.8T  0 raid0 /mnt/InternalPhase
sdb           8:16   0   7.3T  0 disk  
└─md126       9:126  0  13.8T  0 raid0 /mnt/InternalPhase
sdc           8:32   0   7.3T  0 disk  
└─sdc1        8:33   0   7.3T  0 part  /mnt/InternalFBE

jalankan lsof | grep '9,126'dengan :ganti dengan ,dibandingkan dengan nomor disk di atas. Dalam kasus saya ini muncul sebagai:

bash      389162            root  cwd       DIR              9,126      4096  449183796 /mnt/InternalPhase/0000000001/CHANNEL01/LIVE/PHASE/DATA/2018/10/04

dengan PID dari 389162kill proses ini menggunakan:

kill -9 389162
Jacques MALAPRADE
sumber
-1

Masalahnya adalah bahwa sistem perlu menyiram data dari buffer disk ke disk selama 5 detik atau lebih secara default. Jadi jika disk tidak berputar, akan ada sedikit pilihan selain untuk memutar kembali ketika flush perlu terjadi. Jadi masalahnya tidak benar-benar dapat dihindari selain dengan menonaktifkan spin downs atau fitur manajemen daya disk sama sekali hdparm -B 255 /dev/hdax. Ini mungkin pilihan yang lebih baik karena memulai kembali begitu sering pasti dapat lebih merusak daripada hanya tinggal di sepanjang waktu.

paul reynolds
sumber
1
Ini hanya akan menyiram data jika ada data untuk menyiram. Jika disk benar-benar tidak digunakan, maka tidak akan ada data buffer untuk mem-flush.
Micheal Johnson