在 Linux 系统上,如何知道系统中有多少待写入文件系统的数据?

在 Linux 系统上,如何知道系统中有多少待写入文件系统的数据?

我需要知道机器需要多长时间才能将写入缓存刷新到实际磁盘。现在,当我尝试卸载磁盘时,卸载会等待同步完成。在 USB 上,这需要很长时间(最多一分钟)。即使对于机械磁盘,这也可能需要几秒钟。而且,有时即使命令返回,系统似乎仍在将缓存写入磁盘。

最安全和可预测的方法是,只需知道系统上有多少缓存数据处于待处理状态,然后等待其降至零。“sync”命令确实会刷新,但我想知道在运行“sync”命令之前实际上有多少数据处于待处理状态。

我需要让用户知道何时可以安全地弹出/拔出磁盘。

编辑:似乎可以这样做的方法是观察 /proc/meminfo 的 Dirty。谢谢。

答案1

只是为了知道系统上有多少缓存数据待处理

例如,您可以查看cat /proc/meminfo脏页(已修改但未写回)的数量。

在 USB 上,这需要很长时间(最多一分钟)。

这是 USB 的错 - 写入闪存的速度很慢,尽管现代 USB 棒通常具有访问速度更快的中间缓冲区,因此它们可以假装具有更快的写入时间。

而且,有时即使命令返回,系统似乎仍在将缓存写入磁盘。

否。umount完成后,该分区的所有数据都将被写入。

最安全和可预测的方法是,只需了解系统上有多少缓存数据待处理,然后等待其降至零。

这是无法预测的——时间仍然取决于设备的写入速度。因此,无论闪存需要多长时间才能写入所有这些内容,它都会花费时间。

如果您只是等待而不使用syncumount,写入可能会延迟。因此等待总是会比告诉系统“请将所有修改的数据写回”花费更长的时间。

我需要让用户知道何时可以安全地弹出/拔出磁盘。

安全的做法是umount,当它返回时,你可以拉动设备。如果你想真的安全,您还可以使用eject;如果某些东西仍然处于安装状态,它将会失败,有时会明显改变设备的状态。

编辑

如果您的主要问题是想让用户估计一下他/她需要多长时间才能取出闪存驱动器,那么:

1)执行eject(如果您系统上的变体也自动调用umount,如注释中所述;否则执行umount)。

2)等待eject返回,然后向用户显示一条消息“您现在可以取出闪存驱动器”

3) 同时,使用第二个进程/proc/meminfo以给定的延迟(约 1 秒)反复扫描“脏内存”大小。记住初始脏大小,使用当前脏大小作为完成的估计值(它应该趋向于零),这样您就可以显示进度条。

相关内容