mat*_*tdm 144 linux filesystems io async
我已将一个大文件复制到安装在带有异步 Linux 系统上的 USB 磁盘中。这相对较快地返回到命令提示符,但是当我键入时sync,当然,它必须全部转到磁盘,这需要很长时间。
我知道它会很慢,但是有什么地方可以让我看到计数器降到零吗?看着buffers在top没有帮助。
Gre*_*ith 240
随着所有数据的流出,查看/proc/meminfo将显示Dirty数量随着时间的推移而缩小;其中一些也可能会溢出Writeback。这将是对所有设备的总结,但在系统上的一个设备比其他设备慢得多的情况下,您通常最终会发现该队列中的所有内容都与它相关。您可能会在Dirty开始时发现这个数字很大,而在sync它接近 0 的同时完成了。试试这个以获得交互式显示:
watch -d grep -e Dirty: -e Writeback: /proc/meminfo
Run Code Online (Sandbox Code Playgroud)
对于普通磁盘,我通常可以忽略Writeback,但我不确定它是否更频繁地参与 USB 传输路径。如果它只是在没有明显趋势的情况下上下反弹,您可能只需查看Dirty数字即可。
Mat*_*Mat 26
您可以在/sys/block/<device>/stat同步时查看相应设备的文件。在9日的列会显示设备,它应该向下时,同步完成到零上飞行的请求数。
不知道有什么方法可以将其转换为多个字节,但它应该可以让您大致了解有多少“东西”尚待处理。
有关更多信息,请参阅内核文档中的stat.txt文件。(inflight在我的系统上的那个目录中还有一个文件,它看起来可能包含读取和写入正在进行的请求,但我找不到相关的文档。)
小智 16
通过使用 Greg 的答案,您可以简单地sync在后台运行,同时在内存中显示 Dirty 块的状态。
为此,只需运行以下命令:
sync & watch -n 1 grep -e Dirty: /proc/meminfo
Run Code Online (Sandbox Code Playgroud)
这将在前台sync执行时watch在后台调用。当sync命令完成时(大约在 Dirty 块的大小达到 0 时),您将获得如下输出:
1] + 27260 done sync
Run Code Online (Sandbox Code Playgroud)
这意味着该命令已完成,您可以watch使用Ctrl+终止该命令C。
根据其他答案,我制作了这个过于臃肿的单行文字,用于跟踪摘要进度以及特定于设备的进度:
# Create the command
watchSync() {
watch -n1 'grep -E "(Dirty|Write)" /proc/meminfo; echo; ls /sys/block/ | while read device; do awk "{ print \"$device: \" \$9 }" "/sys/block/$device/stat"; done'
}
# Run the command
watchSync
Run Code Online (Sandbox Code Playgroud)
输出如下所示:
Dirty: 848956 kB
Writeback: 125948 kB
WritebackTmp: 0 kB
dm-0: 0
dm-1: 0
loop0: 0
loop1: 0
loop2: 0
loop3: 0
loop4: 0
loop5: 0
loop6: 0
loop7: 0
nvme0n1: 0
sda: 0
sdb: 0
sdc: 124
Run Code Online (Sandbox Code Playgroud)
上面告诉我 1) 我有几个 100,000 kBytes 需要写入,2) 正在写入的设备是sdc. 在这种情况下,当sdc和Writeback达到零时,同步完成(这将同时发生)。
| 归档时间: |
|
| 查看次数: |
72630 次 |
| 最近记录: |