首页/系统/Linux 运维命令速查/sync 刷写缓存到磁盘
磁盘与文件系统51 条

sync 刷写缓存到磁盘

sync 把页缓存与文件系统日志强制写盘;拔盘、断电前、克隆后都用它确保数据落到稳定存储,也支持按文件/文件系统粒度刷写。

Linux 运维命令速查系统更新于 2026-10-13

sync 是什么

Linux 写文件时先把数据放进页缓存,由内核在稍后刷到磁盘,这样写操作很快,但断电或拔盘时缓存里的数据就丢了。sync 的作用是主动触发一次刷写,把脏页与文件系统日志提交到磁盘。它与 umount、fsync 属于同一类保障手段,只是适用范围不同。

基本信息

适用平台Linux/Unix(coreutils;较新版本支持按文件与文件系统刷写)
命令语法sync [选项] [文件...]
常用选项-f 只刷指定文件所在的文件系统;直接给文件参数则刷与该文件相关的写入
相关接口fsync 与 fdatasync 是编程接口,用于单文件;umount 会先刷写再卸载
查看进度/proc/meminfo 的 Dirty 与 Writeback 字段可观察脏页与回写量

典型使用场景

  • 拔除移动存储前的保险动作:确保数据不在缓存里
  • 镜像与备份后:dd 或复制完成后刷一次再卸载
  • 卸载失败处置:先 sync 与 sync -f,再排查占用者
  • 维护窗口准备:重启或断电前确认脏页已落地
  • 排查 IO 抖动:观察同步时的脏页与回写变化

常用示例

常用示例
sync                                  # 刷写全部文件系统的脏页
sync /data/file.img                   # 只刷与该文件相关的写入
sync -f /data                         # 只刷该文件系统
watch -n2 grep -E 'Dirty|Writeback' /proc/meminfo   # 观察脏页与回写量
dd if=image.iso of=/dev/sdb bs=4M conv=fsync status=progress   # 写盘并强制刷写

相关概念读法

项含义怎么看
Dirty待写回的脏页字节数写入高峰时会上升,刷写后回落
Writeback正在回写的字节数长期高位说明存储跟不上写入速度
sync 命令触发一次全局或范围刷写返回不代表硬件缓存已清空
fsync 与 fdatasync对单个文件的刷写接口程序侧保障持久性的标准手段
umount卸载前自动刷写卸载成功是数据已落盘的强信号
conv=fsyncdd 的刷写选项写完立即同步,适合镜像写入
拔 U 盘、移动盘,或 dd 写镜像完成之后,养成先 sync 再卸载的习惯:卸载成功返回才算稳妥;设备忙时先 fuser -m 看占用者,而不是直接拔线或强制卸载。
共享存储与网络文件系统要另眼看待:客户端侧的 sync 只能保证本地缓存已提交给服务端,服务端是否真正落盘、何时落盘,取决于它自己的写策略与缓存设置,不能靠客户端一条命令兜住。
sync 返回只表示内核已受理并开始写出,不等于硬件缓存里的数据已经落到盘片——磁盘自身的写缓存仍可能持有数据。关键操作应以 umount 成功为完成标志,或使用 dd 的 conv=fsync 这类显式同步选项。

易错点

  • sync 返回不等于硬件缓存清空,关键操作后应卸载设备或用 dd conv=fsync
  • sync -f 会同步整个文件系统的脏页,而不只是那个文件,写密集系统上仍可能引发 IO 抖动
  • 数据量大时 sync 可能阻塞较久(要写完所有脏页才返回),脚本里要预留时间
  • 对移动设备直接拔线而不卸载,即使刚跑过 sync 也可能因为设备自身缓存而丢数据
  • 把 sync 当作性能优化手段是误解:它只会让写入更慢更确定,不会提升吞吐

数据来源与参考

  • man 1 sync(coreutils)
  • 内核文档 admin-guide/sysctl/vm(dirty_* 参数)

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌