如何使同步/ FSYNC / syncfs到便携式设备后确认数据的完整性(How to make s

2019-10-19 03:55发布

基于同步手册页面上,也不能保证调用同步后的光盘将刷新其缓存:“根据标准规范(例如,POSIX.1-2001),同步()调度写,但实际写入之前可能会返回做然而,由于1.3.20版本Linux并实际等待(这仍然不能保证数据的完整性。现代磁盘有大缓存)。“

而且,FSYNC手册中,有没有这方面的记载。

有没有办法让确保所有写入光盘调用同步之后尤其是便携设备(USB)已经完成的方法呢? 我曾经遇到过的情况下的数据和元数据信息还没有完全写入光盘调用sync / FSYNC之后。 我很好奇,如何在Windows的“安全删除设备” / Linux的人都知道所有的数据都通过设备本身已经完全写入。

Answer 1:

我很好奇,如何在Windows的“安全删除设备” / Linux的人都知道所有的数据都通过设备本身已经完全写入。

对于IXish系统:

卸载使用的USB设备的分区umount命令或umount()系统调用 。


blockdev --flushbufs

可能冲洗装置的缓冲区,但不会再次访问该设备和补充缓冲区保持人。


也有是在这个内核接口/proc文件系统:

/proc/sys/vm/drop_caches

可用于冲洗不同的缓冲液:

从逐字https://www.kernel.org/doc/Documentation/sysctl/vm.txt

[...]

为了免费目录项和inode:

  echo 2 > /proc/sys/vm/drop_caches 

[...]



Answer 2:

至少在原则上,这是一个Linux的bug。 用于同步功能的规范是数据被完全写入到永久存储; 把它留在硬件高速缓存不符合。

我不知道正确的解决办法是什么,但你可能可以stracehwparm实用程序与运行-F选项(我认为这是正确的),看看它在做什么(或阅读源代码,但strace是一个容易得多)。



文章来源: How to make sure data integrity after sync/fsync/syncfs to portable device
标签: c linux io