自从我开始使用 Linux 发行版以来,我就一直面临这个问题。以图形方式或使用 复制/移动cp
一个/多个大内容(例如大文本文件、tar.gz 存档、ISO 映像文件和电影)时,内容的某些部分会写入磁盘,而某些内容会缓存在内存中(内存)。在复制期间,共享内存和缓存内存的数量急剧增加(用 进行检查free -m
)。
一段时间后,文件管理器(例如海豚或者PCManFM)或cp
显示复制已完成,但数据实际上并未写入磁盘,直到我执行sync
我认为这不是硬件问题。
我检查了许多不同品牌的内置和外置硬盘以及USB闪存驱动器,但结果都相同。
不是一个硬盘APM问题。我总是禁用硬盘电源管理。
问题与 dd 和 cat 相同,例如
dd if=live.iso of=/dev/sdb
.
问题是什么?我该如何解决?
答案1
根据设计,内核会告诉用户空间实用程序在缓存缓冲期间文件操作已成功完成。
尝试编辑 /etc/hdparm.conf 以使用选项禁用写入缓存write_cache = off
。然而,这会降低性能,sync
如果您想确保写入缓冲区刷新到磁盘,通常首选使用它。
答案2
正如我所评论的(出于明显的性能原因),内核正在使用页面缓存。所以这是一个功能,而不是一个问题。看http://linuxatemyram.com/了解更多。
您可以(但我不建议这样做)使用某些mount
选项(禁用或降低页面缓存的使用),并且umount
在拔下或删除任何设备(例如 USB 密钥)之前您需要它。然后内核会在卸载之前刷新所有数据。
您还可以做一个sync
.