我已经使用异步将一个大文件复制到安装在Linux系统上的USB磁盘上。这会很快返回到命令提示符,但是当我输入sync时,当然所有内容都必须进入磁盘,这需要很长时间。但是在某个地方可以看到计数器降为零吗?在buffers中观看top没有帮助。

评论

有关更多信息,请参见:lwn.net/Articles/572911

#1 楼

查看/proc/meminfo将显示随着所有数据假脱机,Dirty的数量随着时间的推移而缩小。其中一些也可能溢出到Writeback中。这将是针对所有设备的摘要,但是在系统上一台设备比其余设备慢得多的情况下,通常会遇到该队列中所有与之相关的设备。启动时您可能会发现Dirty数字较大,而sync在接近0的同一时间结束。请尝试以下操作以获得交互式显示:常规磁盘,我通常可以忽略Writeback,但是我不确定USB传输路径中是否更多地使用了它。如果只是在没有明显趋势的情况下上下反弹,则可能只需看一下Dirty数字即可。

评论


在我的系统上,当Dirty为空时,回写将保持几兆,直到接近尾声,这时它也开始下降。

–mattdm
2012年10月8日在2:02

#2 楼

您可以在同步时查看相应设备的/sys/block/<device>/stat文件。第9列将指示设备上的进行中请求数量,同步完成后该数量应降至零。应该让您大致了解仍有多少“填充”待处理。

有关更多信息,请参阅内核文档中的stat.txt文件。 (我的系统上该目录中还有一个inflight文件,看起来它可能包含读写运行中的请求,但我找不到有关此文件的文档。)

评论


仅供参考,结合其他答案:watch -t -n1'awk“ {print \ $ 9}” / sys / block / sdd / stat'

–mattdm
2012年10月8日在1:59

对于我的USB记忆棒,在复制操作和随后的整个同步过程中,它倾向于徘徊在150左右。它确实为0,但仅在最后。这使得其他答案对于不耐烦地观察进度更加有用。

–mattdm
2012年10月8日在2:01

(尽管从理论上讲,我只希望查看适当的设备,而不是查看系统范围的信息。)

–mattdm
2012年10月8日在2:03

有没有一种方法来获取已写入(已同步,刷新后不在运行中)或缓存要写入驱动器的字节数?如果每个驱动器都有写缓存大小,则可以将其与du一起使用,以计算在驱动器上同步的实际数据。

– Unfa
17年4月26日在10:06

#3 楼

通过使用Greg的答案,您可以简单地让sync在后台运行,同时在内存中显示脏块的状态。

要实现此目的,只需运行以下命令:

这将在后台执行sync的同时在后台调用watch。当sync命令完成时(大约在Dirty块的大小达到0时),您将获得如下所示的输出:
该命令已完成,您可以使用Ctrl + C终止watch命令。

评论


顺便说一句:我知道这是一个古老的问题,但这是第一个在有人寻找它时在Google上弹出的问题,我想添加找到的解决方案。

– jflemieux
17年5月24日下午14:15

太糟糕的sync / umount不能从内核获取更新,并且如果被告知可以直接打印这种东西。

–mcr
17-10-7在22:16