过去网上流行一种段子,写了很久的论文,没保存,一停电全完蛋。
我不知道过去是否真的发生这种状况,就现在来看是不可能出现了,现在一般的创作软件(Office、Adobe、Autodesk系列等)都有自动保存机制的,在过去为什么会传出这种段子呢?
文件不是直接写入磁盘的
Word不保存会丢(假如这是真的),是因为没保存的文件并不在磁盘上,当我们Ctrl+S之后,它才会保存。不过这个保存完成也不一定意味着文件已经保存在磁盘上了。
在Linux系统中,常见的文件系统都不会在用户调用write(2)返回后就意味着文件已经写入磁盘(除非open的flag里面有O_DIRECT
),要写的东西只是在内存中(如果内存够用),然后等一段时间后写入磁盘。那么问题来了,等多长时间呢?
文件系统刷新
文件系统刷新时间由这两个文件控制
/proc/sys/vm/dirty_writeback_centisecs
/proc/sys/vm/dirty_expire_centisecs
它们的单位是0.01s,dirty_writeback_centisecs是刷新进程的唤醒间隔的,典型值为5s,不过刷新进程被唤醒也不一定会刷新,dirty_expire_centisecs会决定是否刷新,典型值为30s,也就是说,当一个文件修改时间超过30s,就一定会被刷新到磁盘上。手动设置常常这样写
echo 500 > /proc/sys/vm/dirty_writeback_centisecs
echo 3000 > /proc/sys/vm/dirty_expire_centisecs
这是在内存充足的情况下,如果内存比较紧张时,又会如何?什么叫内存紧张?