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

Vik*_*ary 17 linux ubuntu

我正在写一个备份脚本

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

之前我曾经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

Duc*_*uck 32

是否sync足够?

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

仍然,从Linux信息页面:

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

  • 我认为他必须运行"同步",而不是"男人1同步".:-) (2认同)

Geo*_*rge 5

您需要 fsync(man 第 2 节)函数调用,但如果您在脚本中执行此操作,您可能需要使用sync 命令(man 第 8 节),该命令仅调用sync()。

  • 实际上,命令行“sync”(第8节)调用系统函数“sync()”(第2节),而不是系统函数“fsync(int fd)”(第2节)。在一种情况下,所有文件都会同步,在另一种情况下,仅同步仍打开的特定文件。 (9认同)