我正在编写一个备份脚本
之前我曾经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
答案 0 :(得分:31)
sync
是否足够?
编辑关于您的编辑 - 您试图避免同步,因为互联网上的某个人在他的帖子上放了一个CYA免责声明?也许我不知道同步有什么问题,但本身可能值得第二篇文章。
仍然,从linux信息页面:
sync将内存中缓冲的所有数据写入磁盘。这个可以 包括(但不限于)修改的超级块,修改的inode, 并延迟读写。这必须由内核实现; 同步程序只执行“同步”系统调用。
答案 1 :(得分:3)
你想要fsync(man section 2)函数调用,但是如果你在脚本中这样做,你可能想要使用sync命令(man section 8),它只调用sync()。