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

我正在写一个备份脚本

  1. 将数据复制到备份磁盘。
  2. 刷新备份磁盘。
  3. 执行哈希完整性检查。

之前,我曾经sleep(60)等待一分钟,以便数据被内核自动刷新。 我猜这是矫枉过正所以现在我试图sudo hdparm -F --verbose /dev/disk但它报告错误 – HDIO_DRIVE_CMD(flushcache) failed: Invalid exchange多次HDIO_DRIVE_CMD(flushcache) failed: Invalid exchange

我想知道是否有任何标准的方法来刷新caching到硬盘。 我认为这是因为usb-creator-gtk做到了,做到了。

我使用的是Ubuntu x64 9.10

PS:我试图避免“同步”,因为这个网页说这是不安全的。 http://ubuntuforums.org/showthread.php?t=589975

sync是否足够?

编辑:关于你的编辑 – 你试图避免同步,因为在互联网上的一些人在他的职位上CYA免责声明? 也许有什么问题,我不知道同步,但这本身可能值得第二篇文章。

不过,从Linux的信息页面:

同步将内存中缓冲的任何数据写入磁盘。 这可以包括(但不限于)修改的超级块,修改的inode以及延迟的读取和写入。 这必须由内核执行; 同步程序除了执行“同步”系统调用外什么也不做。

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