找出正在写入硬盘的进程


31

在我的Lenovo T400和Ubuntu上,硬盘驱动器写入指示灯一直闪烁。我想知道在Linux中是否可以找出正在对硬盘进行I / O的进程?与一样top,您可以找出哪些进程正在占用最多的CPU和内存。

Answers:


41

Iotop是满足您需求的好工具。它还允许人们在DISK READ,DISK WRITE,SWAPIN和IO(总百分比)中的任何一个上显示I / O的累计量。这是通过一个漂亮的界面:

  • 您只需按a键盘,它将把最饥饿的进程排在最前面。
  • 颠倒顺序,您只需按r
  • 如果要按其他列排序,只需按向左/向右键。

像一样top演示很忙。另一件事是,它没有各种各样的选项top(例如,我无法选择隐藏我不感兴趣的任何列),但是该工具足以满足其特定目的。


3
Powertop还有助于查找笔记本电脑电池的电量。iotop仍然是寻找磁盘访问权的第一个地方。
吉尔斯(Gilles)'所以

可以通过-o--only)来实际过滤掉所有不执行任何I / O的任务。这使列表变得不那么拥挤
Marcin Orlowski

15

您可以使用lsofman lsof)。以下内容将返回所有可以写入的文件列表:

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

1
哪些文件是打开的,哪些文件是实际访问的,这是两件不同的事情。
psusi 2011年

@psusi很可能会“访问”用于写入的打开文件。另外,可以通过其手册页学习lsof来检索更多信息。
James Sumners 2011年

5
可以在某个时候写入打开的文件以供写入,但不一定要立即写入。许多文件保持打开状态,但很少写入。另一方面,写入的文件可能会快速打开和关闭,因此不会在lsof中显示。无论哪种方式,弄清楚当前实际上是什么进程正在写入磁盘都无济于事。
psusi 2011年

w从上述使得该命令使用grep命令查找已打开供写入文件。文件打开写作阅读(u)将不会被显示出来,但它们也可以被写入。如果您希望打开文件以进行写和读+写操作,我相信这就是您想要的:lsof | grep -e "[[:digit:]]\+[wu]\{1\}"
Martijn 2014年

1
@Martijn您将要使用grep -e**w**以避免[0-9]\+[wu]在其他列内进行匹配


2

尤其是对于磁盘活动较少的情况,有必要以批处理方式使用iotop,以防止短访问线路快速消失。答案是如何在Linux中记录文件系统按文件名读取/写入的信息?显示了如何执行此操作。

到目前为止,这iotop是最好的整体解决方案。以下命令为您提供了使用磁盘的所有进程的实时输出。

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

有了进程ID后,您还可以找到带有

 lsof -p $PID

1
这个答案与以上(很旧)的答案有何不同?回答一个古老的问题时,最好解释一下您的答案与以前的答案有何不同。这有助于读者在答案之间进行排序。
斯蒂芬·劳奇

感谢您指出了这一点。考虑到您的评论,我已经编辑了此答案。
Frank Breitling
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.