我在软件RAID1中使用带有2个2TB SATA3硬盘的Ubuntu 12.04。 文件系统是ext4,其中data=writeback 。
当使用find . -maxdepth 1 -name '*' -delete find . -maxdepth 1 -name '*' -delete -delete删除目录中的大量文件,每隔一段时间做一次df显示:
最初大量的文件被删除, iotop显示了大部分IO的find操作。

稍后 df显示文件数量保持不变, iotop显示IO使用现在由jbd2和md4_raid1占主导地位。

几分钟后 , df显示文件数量再次下降。
任何人都可以解释此行为? 这是正常的还是有什么问题,我的服务器? 另外,3个进程如何同时有99.99%的IO使用率呢?
这是我所期望的。 查找find的文件,即它从VFS中读取,当数据不在caching中时,它需要从磁盘中获取。 在处理每个文件时,它会将要写入的更改排入队列。 在某个时候,写入缓冲区已满,所做的更改必须写入磁盘 – 此时进行写入的进程将被阻塞,进一步进行写入或读取请求,直到有足够的空间缓冲更多的写入。
您可以通过降低进程的I / O优先级来防止系统被阻塞:
ionice -c3 nice -15 find ... -delete
如果这还不够,那么你可以使用chrt把进程放到SCHED_IDLE类中。