2

对文件调用 fsync() 时,文件会损坏吗?

例如,假设我的文件分布到磁盘块:

    A             B
|---------|    |--------|
| Hello,  | -> | World! |
|---------|    |--------|
| 1234567 |    | 89abcd |
|---------|    |--------|

假设我想将整个文件内容更改为小写(以非常低效的方式)。所以我寻求文件的位置 1 将“H”更改为“h”,然后位置 8 将“W”更改为“w”。然后我调用fsync()文件。该文件分布在两个磁盘块上。

  1. 写入的顺序是否得到维护?
  2. fsync() 操作在磁盘上是原子的吗?
4

1 回答 1

0

直到两个写入以及任何关联的元数据都写入磁盘后,该fsync调用才会返回。如果您的计算机崩溃(通常是由于断电)并且您的文件已损坏,则向文件系统维护人员记录错误报告 - 这不应该发生。如果fsync返回,则数据安全地保存在磁盘上。

不过,要回答您的问题,文件系统和磁盘驱动程序没有理由不能重新排序写入(他们认为它们不重叠,如果这是磁盘头在旋转介质上的位置,那么首先写入第二个可能很有用)。fsync其次,在处理现实生活中的硬件时,没有办法成为原子的。它应该用户自动执行(您将拥有文件的第一个副本或第二个副本,但不会损坏)。

于 2016-10-31T03:58:03.703 回答