写入磁盘时缓存在 RAM 中的内容 - Linux

写入磁盘时缓存在 RAM 中的内容 - Linux

自从我开始使用 Linux 发行版以来,我就一直面临这个问题。以图形方式或使用 复制/移动cp一个/多个大内容(例如大文本文件、tar.gz 存档、ISO 映像文件和电影)时,内容的某些部分会写入磁盘,而某些内容会缓存在内存中(内存)。在复制期间,共享内存和缓存内存的数量急剧增加(用 进行检查free -m)。

一段时间后,文件管理器(例如海豚或者PCManFM)或cp显示复制已完成,但数据实际上并未写入磁盘,直到我执行sync

我认为这不是硬件问题。

  • 我检查了许多不同品牌的内置和外置硬盘以及USB闪存驱动器,但结果都相同。

  • 不是一个硬盘APM问题。我总是禁用硬盘电源管理。

  • 问题与 dd 和 cat 相同,例如dd if=live.iso of=/dev/sdb.

  • 不是特定于发行版的问题。我查了一下 Debian,软呢帽, 乌班图,斯莱克斯, ETC。

  • 我还没有与其他类 Unix 操作系统进行交叉检查。如果有人有/有同样的问题自由BSD,开放BSD等请告诉我。

问题是什么?我该如何解决?

答案1

根据设计,内核会告诉用户空间实用程序在缓存缓冲期间文件操作已成功完成。

尝试编辑 /etc/hdparm.conf 以使用选项禁用写入缓存write_cache = off。然而,这会降低性能,sync如果您想确保写入缓冲区刷新到磁盘,通常首选使用它。

答案2

正如我所评论的(出于明显的性能原因),内核正在使用页面缓存。所以这是一个功能,而不是一个问题。看http://linuxatemyram.com/了解更多。

您可以(但我不建议这样做)使用某些mount选项(禁用或降低页面缓存的使用),并且umount在拔下或删除任何设备(例如 USB 密钥)之前您需要它。然后内核会在卸载之前刷新所有数据。

您还可以做一个sync.

相关内容