我已使用异步方式将一个大文件复制到安装在 Linux 系统上的 USB 磁盘。这会相对较快地返回到命令提示符,但是当我输入 时sync
,当然,所有内容都必须写入磁盘,这需要很长时间。
我知道这会很慢,但是有什么地方可以看到计数器降到零吗?观看buffers
并top
没有帮助。
答案1
观察/proc/meminfo
会发现Dirty
,随着所有数据的流出,数字会随着时间的推移而缩小;其中一些Writeback
也可能会溢出。这将是针对所有设备的摘要,但在系统上的一个设备比其他设备慢得多的情况下,您通常会发现该队列中的所有设备都与其相关。Dirty
当你开始时你可能会发现这个数字很大,而sync
结束时它几乎同时接近 0。尝试这样做以获得交互式显示:
watch -d grep -e Dirty: -e Writeback: /proc/meminfo
对于普通磁盘,我通常可以忽略Writeback
,但我不确定它是否更频繁地出现在 USB 传输路径中。如果它只是上下反弹而没有明显的趋势,你可能可以只看数字Dirty
。
答案2
/sys/block/<device>/stat
您可以在同步时查看相应设备的文件。第9列将指示设备上正在进行的请求数量,同步完成后该数量应降至零。
不知道有什么方法可以将其转换为字节数,但它应该可以让您大致了解有多少“东西”仍在等待处理。
请参阅统计数据.txt内核文档中的文件以获取更多信息。 (我的系统上的该目录中还有一个inflight
文件,看起来它可能包含读写请求,但我找不到相关文档。)
答案3
通过使用 Greg 的答案,您可以简单地sync
在后台运行,同时显示内存中脏块的状态。
要实现此目的,只需运行以下命令:
sync & watch -n 1 grep -e Dirty: /proc/meminfo
这将sync
在后台调用,同时watch
在前面执行。当sync
命令完成时(大约当脏块的大小达到 0 时),您将得到如下所示的输出:
1] + 27260 done sync
这意味着该命令已完成,您可以使用+终止该watch
命令。CtrlC
答案4
您可以使用以下命令查看当前块设备 I/O 流量尼蒙,如:
NMON=ld nmon -s1
(这会预先选择以 1 秒刷新时间显示负载图和磁盘图。也可以通过nmon
不带参数启动来设置,而不是按l
, d
,-
来切换图形并从默认的 2 秒减少刷新时间。+
当然会增加刷新延迟。 )