在 Linux 中,如何确保我的系统 write() 调用(以及类似的 write-IO 调用/变体)绕过内存/缓存/缓冲 IO 到达非易失性存储?
问问题
1522 次
2 回答
1
请参阅“确保数据到达磁盘”。
简而言之,最安全的策略是在适当的时候使用 O_DIRECT + fsync()。
于 2013-01-17T17:55:44.470 回答
0
使用 O_DIRECT 可以达到目的,但对于大多数应用程序来说效率很低,除非您在应用程序中管理整个文件缓存/缓冲。通常有两种方法可以做到这一点。
- 打开文件时使用 O_SYNC 标志,以便写入将被阻塞,直到它被写入底层持久存储。
- 当您想确保将更改写入存储设备时,请执行正常的文件操作并调用 fsync。
请记住,如果您使用的是 mmap,那么 msync 将是执行相同操作的更好方法。
于 2013-09-04T21:22:55.027 回答