我可以查看“同步”操作的进度吗?

我可以查看“同步”操作的进度吗?

我已使用异步方式将一个大文件复制到安装在 Linux 系统上的 USB 磁盘。这会相对较快地返回到命令提示符,但是当我输入 时sync,当然,所有内容都必须写入磁盘,这需要很长时间。

我知道这会很慢,但是有什么地方可以看到计数器降到零吗?观看bufferstop没有帮助。

答案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 秒减少刷新时间。+当然会增加刷新延迟。 )

相关内容