How to monitor disk I/O in Linux from command line

If your Linux system gets slow down due to heavy disk I/O activities, you probably want to know which processes or users (in case of multi-user systems) are the culprit for such activities. You may also wish to monitor disk I/O trending over time as part of daily Linux system administration. Here I will introduce several disk I/O monitoring tools on Linux.

Monitor disk I/O on per-process basis

If you want to monitor disk I/O activities of individual Linux processes, you can try iotop. This tool shows a sorted list of the most I/O intensive processes in real time via top-like interface.

To install iotop on Ubuntu or Debian, run the following.

$ sudo apt-get install iotop

To install iotop on Fedora, run:

$ sudo yum install iotop

To install iotop on CentOS or RHEL, first set up RepoForge repository on your system, and then use yum command.

$ sudo yum install iotop

To monitor disk I/O with iotop:

$ sudo iotop

Running iotop without any argument like above shows a list of all existing processes regardless of their disk I/O activities. If you want iotop to only show processes that are actually doing disk I/O, run the following instead.

$ sudo iotop -o

Monitor disk I/O on per-disk basis

If you are interested in monitoring disk read/write rates of individual disks, you can use iostat. To use this tool, you need to run sysstat package.

To install sysstat on Ubuntu or Debian:

$ sudo apt-get install sysstat

To install sysstat on CentOS, RHEL or Fedora:

$ sudo yum install sysstat

To monitor disk I/O of individual disks with iostat:

$ sudo iostat <update_interval_in_seconds>
Linux 3.2.0-29-generic-pae (my_host) 	04/06/2013 	_i686_	(2 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           2.11    0.08    3.20    3.65    0.00   90.96

Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
sda              55.77      1403.98      2138.71    4139635    6306020

Subscribe to Xmodulo

Do you want to receive Linux FAQs, detailed tutorials and tips published at Xmodulo? Enter your email address below, and we will deliver our Linux posts straight to your email box, for free. Delivery powered by Google Feedburner.

The following two tabs change content below.
Dan Nanni is the founder and also a regular contributor of He is a Linux/FOSS enthusiast who loves to get his hands dirty with his Linux box. He likes to procrastinate when he is supposed to be busy and productive. When he is otherwise free, he likes to watch movies and shop for the coolest gadgets.

7 thoughts on “How to monitor disk I/O in Linux from command line

  1. My laptop is always getting so hot! I think it's actually more of a HDD problem but I still wanna try iotop.

    • More likely a high CPU load, I guess. "Top" to identify the most CPU-heavy processes and cpulimit to leash them might help.

  2. vmstat is also pretty good for that too. And there is Glance if you are willing to fork out the money for it, but it is actually an excellent tool.

  3. Thanks for this tutorial.
    How can I install this in CLOUDLINUX 6.5 x86_64 standard - server?

  4. Lots of people have found collectl very useful - sort of a swiss army knife because it can report anything most of the 'standard' tools report and do it in a much more compressed easy to read format. If you want to look at detailed disk data just run collectl -sD and you'll see similar output to iostat but in what I'd claim is much easier to read. see for just a subset of what it can do.

    Best of all you can save the data to disk and play it back as often as you like, changing switches each time.

    try it, you'll like it...

Leave a comment

Your email address will not be published. Required fields are marked *

Current ye@r *