在 Linux 中,fsync
是一个关键的系统调用,用于确保文件数据的持久化存储。其核心原理是强制将文件在内存中的修改(即 页面缓存,Page Cache)同步到物理磁盘。以下是其工作原理的详细说明:
1. fsync
的核心作用
- 目标:确保文件数据(数据块 + 元数据)从内存的页面缓存持久化到磁盘。
- 场景:适用于对数据安全性要求高的应用(如数据库、日志系统)。
- 关键特性:
- 阻塞操作:调用
fsync
的进程会等待数据完全写入磁盘后才返回。 - 原子性:保证文件在系统崩溃后恢复到
fsync
完成时的状态。
- 阻塞操作:调用
2. 工作流程
当调用 fsync(fd)
时,Linux 内核会执行以下步骤:
步骤 1:刷新页面缓存
- 数据写入:应用程序通过
write()
写入文件时,数据首先存储在 页面缓存(内存中的临时区域)。 - 标记脏页:修改过的页面会被标记为“脏页”(Dirty Page)ÿ