จะค้นหากระบวนการที่จะเขียนลงดิสก์เป็นประจำได้อย่างไร


40

ฉันจะค้นหากระบวนการใดที่เขียนลงดิสก์อย่างต่อเนื่อง

ฉันชอบเวิร์กสเตชันของฉันใกล้จะเงียบและฉันเพิ่งสร้างระบบใหม่ (P8B75-M + Core i5 3450s - the 's' เพราะมันมีค่า TDP สูงสุดที่ต่ำกว่า) พร้อมกับแฟน ๆ เงียบ ๆ และติดตั้ง Debian Wheezy 64-bit บนมัน

และมีบางอย่างเข้ามาในเส้นประสาทของฉัน: ฉันสามารถได้ยินรูปแบบบางอย่างเช่นถ้าฮาร์ดดิสก์กำลังเขียนหรือค้นหา someting ( เห็บ ... เห็บ ... เห็บ ... เห็บ ... trrrrrrล้างและทำซ้ำทุก ๆ วินาทีหรือไม่)

ในอดีตฉันมีปัญหาที่คล้ายกันในอดีต (หลายปีที่ผ่านมา) และกลายเป็นว่ามีบันทึก CUPS หรืออะไรบางอย่างและฉันเพียงแค่เปลี่ยนเส้นทางที่บันทึก (ไม่สำคัญ) หนึ่งไปยังดิสก์ RAM (จริง)

แต่ที่นี่ฉันไม่แน่ใจ

ฉันพยายามต่อไปนี้:

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

แต่ไม่มีอะไรเปลี่ยนแปลงที่นั่น

ตอนนี้สิ่งที่แปลกคือฉันยังได้ยินรูปแบบเมื่อพรอมต์ขอให้ฉันป้อนวลีรหัสผ่านถอดรหัส LVM ของฉันแสดง

มันอาจจะเป็นสิ่งที่อยู่ในเคอร์เนล / ระบบที่ฉันเพิ่งติดตั้งหรือฉันมีฮาร์ดดิสก์ที่ผิดพลาดหรือไม่?

hdparm -tT /dev/sda รายงานความเร็ว HD ที่ถูกต้อง (130 GB / s ที่ไม่แคช, sata 6GB) และฉันได้ติดตั้งและรวบรวมจากแหล่งใหญ่ (Emacs) โดยไม่มีปัญหาดังนั้นฉันไม่คิดว่าระบบจะไม่ดี

(HD เป็น Seagate Barracude 500GB)


คุณแน่ใจหรือว่าเป็นฮาร์ดไดรฟ์ที่ส่งเสียงดังและไม่ใช่อย่างอื่นใช่หรือไม่ (ตรวจสอบแฟน ๆ รวมถึงแฟน PSU Had เสียงคลิกที่แปลกมากครั้งเดียวเมื่อสายเคเบิลบางมากอยู่ใกล้เกินไปที่จะเป็นแฟนและบางครั้งจะสัมผัสเล็กน้อยใบมีดและตีกลับหา "คลิก" ไม่กี่ ... .)
จ้า

@ Mat: ฉันจะใช้ฮาร์ดไดรฟ์นอกเคส (ตัวเชื่อมต่อควรยาวพอ) เพื่อให้แน่ใจและฉันจะรายงานกลับ )
Cedric Martin

2
ตรวจสอบให้แน่ใจว่าระบบไฟล์ดิสก์ของคุณถูกเมาท์ relatime หรือ noatime การอ่านไฟล์อาจทำให้การเขียนไปยัง inodes เพื่อบันทึกเวลาเข้าถึง
camh

คำตอบ:


42

คุณพยายามตรวจสอบโปรแกรมที่ชอบiotopแสดงหรือไม่ มันจะบอกคุณว่ากระบวนการชนิดใดกำลังเขียนลงดิสก์

เอาท์พุทตัวอย่าง:

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]

1
ขอบคุณสำหรับเคล็ดลับที่ ผมไม่ทราบว่าเกี่ยวกับiotop ใน Debian ฉันได้อย่างค้นหา apt-แคช iotopเพื่อจะพบว่าผมต้องapt-get iotop คำสั่งเด็ดมาก!
เซดริกมาร์ติน

3
ฉันใช้iotop -o -b -d 10ซึ่งทุก ๆ 10 วินาทีพิมพ์รายการของกระบวนการที่อ่าน / เขียนไปยังดิสก์และจำนวนแบนด์วิดท์ของ IO ที่ใช้
ndemou

15

คุณสามารถเปิดใช้ IO แก้จุดบกพร่องผ่านecho 1 > /proc/sys/vm/block_dumpแล้วดูข้อความแก้จุดบกพร่องใน/ var / log / syslog นี่เป็นข้อดีของการได้รับไฟล์บันทึกบางประเภทด้วยกิจกรรมที่ผ่านมาในขณะที่iotopแสดงเฉพาะกิจกรรมปัจจุบัน


3
เป็นเรื่องที่บ้าอย่างยิ่งที่จะเปิดใช้งาน sysloging เมื่อ block_dump เปิดใช้งาน การบันทึกทำให้เกิดกิจกรรมดิสก์ซึ่งทำให้การบันทึกซึ่งเป็นสาเหตุของกิจกรรมดิสก์ ฯลฯ ควรหยุด syslog ก่อนเปิดใช้งานสิ่งนี้ (และใช้ dmesg เพื่ออ่านข้อความ)
dan3

คุณพูดถูกจริง ๆ ถึงแม้ว่าเอฟเฟกต์จะไม่น่าทึ่งเท่าที่คุณอธิบาย หากคุณเพียงแค่ต้องการดูกิจกรรมดิสก์ไม่จำเป็นต้องหยุด syslog daemon
scai

ฉันลองมันเมื่อประมาณ 2 ปีที่แล้วและมันก็หยุดเครื่องจักรของฉัน หนึ่งในวันนี้เมื่อฉันมีอะไรที่สำคัญทำงานผมจะพยายามอีกครั้ง :)
dan3

ฉันลองแล้วไม่มีอะไรเกิดขึ้นจริง โดยเฉพาะอย่างยิ่งเนื่องจากการบัฟเฟอร์ระบบไฟล์ การเขียนไปยัง syslog ไม่ได้ทริกเกอร์การเขียนลงดิสก์ทันที
scai

1
ฉันจะสมมติว่ามีอัตรา จำกัด อัตราทั่วไปในสถานที่สำหรับข้อความบันทึกซึ่งจัดการกรณีนี้ด้วย (?)
Volker Siegel

5

สมมติว่าเสียงดิสก์เกิดจากกระบวนการที่ทำให้เกิดการเขียนและไม่ใช่ปัญหาที่เกิดขึ้นกับดิสก์บางประการคุณสามารถใช้ระบบย่อยการตรวจสอบ (ติดตั้งauditdแพ็กเกจ ) วางsyncสายโทรศัพท์และเพื่อน ๆ ของมัน:

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

/var/log/audit/audit.logดูบันทึกใน ระวังอย่าทำเช่นนี้หากการตรวจสอบบันทึกตัวเองถูกลบทิ้ง! ตรวจสอบใน/etc/auditd.confที่ตั้งค่าตัวเลือกflushnone

หากไฟล์ถูกลบบ่อยผู้ร้ายน่าจะเป็นระบบบันทึก ตัวอย่างเช่นหากคุณเข้าสู่ระบบล้มเหลวในการพยายามเชื่อมต่อเข้ามาและมีคนกำลังตรวจสอบเครื่องของคุณว่าจะสร้างรายการจำนวนมาก สิ่งนี้สามารถทำให้ดิสก์ส่งเสียงแบบปืนกล ด้วยล็อกพื้นฐาน daemon sysklogd ให้ตรวจสอบ/etc/syslog.confว่าถ้าชื่อไฟล์บันทึกไม่ถูกนำหน้าด้วย-จากนั้นบันทึกนั้นจะถูกล้างไปยังดิสก์หลังจากการเขียนแต่ละครั้ง


@StephenKitt Huh ไม่ผู้ถามพูดถึง Debian ดังนั้นฉันจึงเปลี่ยนเป็นลิงก์ไปยังแพ็คเกจ Debian
Gilles 'หยุดความชั่วร้าย'

3

มันอาจเป็นไดรฟ์ของคุณหมุนโดยอัตโนมัติลงไดรฟ์ระดับผู้บริโภคจำนวนมากทำวันนี้ น่าเสียดายที่แม้แต่ระบบที่โหลดเบาผลลัพธ์ก็จะส่งผลให้ไดรฟ์หมุนไปมาอย่างต่อเนื่องและหมุนอีกครั้งโดยเฉพาะอย่างยิ่งหากคุณใช้ hddtemp หรือคล้ายกับการตรวจสอบอุณหภูมิของไดรฟ์ (ไดรฟ์ส่วนใหญ่อย่างโง่เขลา โดยไม่ต้องปั่นขึ้นขับ

สิ่งนี้ไม่เพียง แต่น่ารำคาญเท่านั้น แต่ยังสามารถเสื่อมสภาพไดรฟ์ได้เร็วขึ้นเนื่องจากไดรฟ์หลายตัวมีจำนวนรอบที่ จำกัด เท่านั้น เช่นดูhttps://bugs.launchpad.net/ubuntu/+source/hdparm/+bug/952556สำหรับคำอธิบายปัญหา

ฉันปิดการใช้งาน spindown ในทุกไดรฟ์ของฉันด้วยรหัสเชลล์ต่อไปนี้ คุณสามารถวางไว้ในสคริปต์ /etc/rc.boot หรือใน /etc/rc.local หรือคล้ายกัน

สำหรับดิสก์ใน / dev / sd? ; ทำ
  / sbin / hdparm -q -S 0 "$ disk"
เสร็จแล้ว

2
ที่คุณไม่สามารถค้นหาการอ่านสมาร์ทโดยไม่ต้องหมุนไดรฟ์ทำให้ฉันพูดไม่ออก: - / ตอนนี้เห็นได้ชัดว่าปัญหา "การปั่น" อาจซับซ้อนมากขึ้น เกี่ยวกับการปิดการหมุน: ในตัวมันเองจะไม่ทำให้ HD เสื่อมสภาพเร็วขึ้นหรือ ฉันหมายถึง: มันไม่เคย "พักผ่อน" ตราบใดที่ระบบยังเปิดอยู่?
เซดริกมาร์ติน

IIRC คุณสามารถค้นหาค่า SMART บางค่าโดยไม่ทำให้ไดรฟ์หมุน แต่อุณหภูมิไม่ใช่ค่าใดค่าหนึ่งในไดรฟ์ที่ฉันทดสอบ (รวมรุ่นจาก WD, Seagate, Samsung, Hitachi) ซึ่งแน่นอนว่าบ้าเพราะความกังวลเกี่ยวกับอุณหภูมิเป็นหนึ่งในเหตุผลในการใช้งานไดรฟ์ Re: wear: AIUI 1. ความเร็วคงที่นั้นน้อยกว่าการเปลี่ยนความเร็ว 2. ไดรฟ์ต้องจอดหัวในพื้นที่ปลอดภัยและไดรฟ์ได้รับการจัดอันดับให้ทำเช่นนั้นหลายครั้ง (IIRC ถึงสองสามแสน - เกินได้ง่ายถ้าไดรฟ์ไม่ทำงานและหมุนขึ้นทุกสองสามวินาที)
cas

มันเป็นการถกเถียงกันมานานว่าจะเป็นการดีกว่าถ้าปล่อยให้ไดรฟ์ทำงานหรือหมุนลง โดยส่วนตัวฉันเชื่อว่าเป็นการดีที่สุดที่จะปล่อยให้พวกเขาทำงาน - ฉันปิดคอมพิวเตอร์ในตอนกลางคืนและเมื่อฉันออกไปข้างนอก แต่นอกเหนือจากนั้นฉันไม่เคยหมุนไดรฟ์ลง บางคนชอบปั่นมันลงพูดตอนกลางคืนถ้าพวกเขาทิ้งคอมพิวเตอร์ไว้หรือไม่ได้ใช้งานคอมพิวเตอร์เป็นเวลานานและในกรณีเช่นนี้ข้อดีของการปั่นมันทิ้งไว้สักสองสามชั่วโมงแทนที่จะปล่อยให้พวกมันวิ่งได้ . สิ่งที่ไม่ดีคือเมื่อฮาร์ดไดรฟ์หมุนซ้ำ ๆ ซ้ำ ๆ ในช่วงเวลาสั้น ๆ
Micheal Johnson

โปรดทราบว่าการหมุนไดรฟ์ลงหลังจากที่ไม่ได้ใช้งานเป็นเวลาสองสามชั่วโมงนั้นค่อนข้างโง่เพราะถ้ามันไม่ได้ใช้งานสองสามชั่วโมงก็น่าจะใช้งานได้อีกครั้งภายในหนึ่งชั่วโมง ในกรณีนี้มันจะดีกว่าถ้าจะหมุนไดรฟ์ลงทันทีถ้าไม่ได้ใช้งาน (เช่นภายใน 10 นาที) แต่ก็เป็นไปได้ที่ไดรฟ์จะไม่ได้ใช้งานเป็นเวลาสองสามนาทีเมื่อมีคนใช้คอมพิวเตอร์และมีแนวโน้มว่า ไดรฟ์อีกครั้งในไม่ช้า
Micheal Johnson

ฉันคิดว่าสิ่งนี้จะแก้ไขปัญหาของฉันได้เนื่องจากฉันได้ยินว่าไดรฟ์ส่งเสียงเป็นจังหวะ (3-4 ครั้ง / วินาที) เหมือนการเขียนแม้ว่าจะไม่ได้ติดตั้งก็ตาม! แต่ฉันยังคงได้ยินเสียงหลังจากใช้คำสั่งนี้ ไม่แยแสก็ใช้ไดรฟ์ผมจะกลับขึ้น SSD ภายในของฉัน ...
ไมเคิล

1

ฉันเพิ่งค้นพบว่าสมาร์ททำให้ดิสก์ USB ภายนอกหมุนขึ้นอีกครั้งในราสเบอร์รี่ปี่ของฉัน แม้ว่าโดยทั่วไปแล้ว SMART จะเป็นสิ่งที่ดี แต่ฉันตัดสินใจที่จะปิดการใช้งานอีกครั้งและตั้งแต่นั้นมาดูเหมือนว่ากิจกรรมดิสก์ที่ไม่ต้องการได้หยุดลง


คุณสามารถกำหนดค่าสมาร์ทดีมอนไม่ให้สแกนดิสก์ USB ได้ส่วนใหญ่การแจกแจงลินุกซ์ที่ดีต้องทำตามค่าเริ่มต้น
lzap

1

คุณสามารถขาดสิ่งนี้ได้เล็กน้อย ควรแคบลงให้มากที่สุด

find / -mount -newer /proc -print

ให้ไฟล์ที่แก้ไขตั้งแต่การบู๊ตบนอุปกรณ์ฟิสิคัลของระบบ / files การรู้จักไฟล์อาจช่วยระบุตัวเขียนได้


1

ในกรณีที่คุณต้องการ จำกัด ให้แคบลงไปยังดิสก์ที่แน่นอนให้ใช้สิ่งต่อไปนี้:

เรียกใช้lsblkและค้นหาหมายเลขอุปกรณ์ ในกรณีด้านล่างมันเป็น9: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

รันlsof | grep '9,126'ด้วยการ:แทนที่ด้วย,เปรียบเทียบกับหมายเลขดิสก์ด้านบน ในกรณีของฉันปรากฏขึ้นเป็น:

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

ด้วย PID ของการ389162ฆ่ากระบวนการนี้โดยใช้:

kill -9 389162

-1

ปัญหาคือระบบต้องการล้างข้อมูลจากบัฟเฟอร์ดิสก์ไปยังดิสก์ตลอด 5 วินาทีหรือมากกว่านั้นโดยค่าเริ่มต้น ดังนั้นหากดิสก์หมุนลงจะมีตัวเลือกน้อยอื่นนอกจากหมุนกลับขึ้นมาอีกครั้งเมื่อต้องการล้างข้อมูล hdparm -B 255 /dev/hdaxดังนั้นปัญหาที่เกิดขึ้นไม่ได้จริงๆที่หลีกเลี่ยงได้นอกเหนือจากการปิดการใช้งานดาวน์สปินหรือการจัดการพลังงานดิสก์ให้บริการโดยสิ้นเชิง นี่อาจเป็นตัวเลือกที่ดีกว่าเนื่องจากการรีสตาร์ทบ่อยครั้งอาจสร้างความเสียหายได้มากกว่าการอยู่ตลอดเวลา


1
มันจะล้างข้อมูลเท่านั้นหากมีข้อมูลใด ๆ ที่จะล้างออก หากดิสก์ไม่ได้ใช้งานจริงแสดงว่าไม่มีข้อมูลบัฟเฟอร์ใด ๆ ที่จะลบทิ้ง
Micheal Johnson
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.