如何从命令行刷新硬盘和闪存盘(或文件系统)的缓存?

时间:2010-03-05 02:34:03

标签: linux ubuntu

我正在编写一个备份脚本

  1. 将数据复制到备份磁盘。
  2. 刷新备份磁盘。
  3. 执行哈希完整性检查。
  4. 之前我曾经sleep(60)等待一分钟,以便内核自动刷新数据。我猜这太过分了,所以现在我正在尝试sudo hdparm -F --verbose /dev/disk,但它多次报告错误 - HDIO_DRIVE_CMD(flushcache) failed: Invalid exchange

    我想知道是否有任何标准方法将缓存刷新到硬盘。我认为是因为usb-creator-gtk做到了,umount做到了。

    我正在使用Ubuntu x64 9.10

    PS:我正在尝试避免“同步”,因为此页面显示安全。 http://ubuntuforums.org/showthread.php?t=589975

2 个答案:

答案 0 :(得分:31)

sync是否足够?

编辑关于您的编辑 - 您试图避免同步,因为互联网上的某个人在他的帖子上放了一个CYA免责声明?也许我不知道同步有什么问题,但本身可能值得第二篇文章。

仍然,从linux信息页面:

sync将内存中缓冲的所有数据写入磁盘。这个可以 包括(但不限于)修改的超级块,修改的inode, 并延迟读写。这必须由内核实现; 同步程序只执行“同步”系统调用。

答案 1 :(得分:3)

你想要fsync(man section 2)函数调用,但是如果你在脚本中这样做,你可能想要使用sync命令(man section 8),它只调用sync()。