在文件上调用fsync()时,文件是否会损坏?
例如,假设我的文件传播到磁盘块:
A B
|---------| |--------|
| Hello, | -> | World! |
|---------| |--------|
| 1234567 | | 89abcd |
|---------| |--------|
假设我想将整个文件内容更改为小写(以非常低效的方式)。因此,我试图将文件的第1位改为" H"进入" h"然后在第8位改变" W"到" w"。然后我在文件上调用fsync()
。该文件分布在两个磁盘块上。
答案 0 :(得分:0)
在将两次写入写入磁盘以及任何关联的元数据之前,fsync
调用不会返回。如果您的计算机崩溃(通常是断电)并且您的文件已损坏,那么请记录文件系统维护者的错误报告 - 这不应该发生。如果fsync
返回,那么数据将安全地存储在磁盘上。
要回答你的问题,没有理由说文件系统和磁盘驱动程序无法重新排序写入(他们认为它们是非重叠的,如果磁盘头是磁盘头,那么首先编写第二个可能是有用的。在旋转媒体上)。其次,fsync
无法成为原子,因为它涉及现实生活中的硬件。它应该以原子方式对用户进行操作(您将获得该文件的第一个副本或第二个副本,但不会损坏。)