文件系统关于顺序写入的一致性保证

Consistency guarantee of file system regarding sequential write

我的程序(只有 1 个进程和 1 个线程)使用普通的旧写入系统调用将 n 个连续的数据块顺序写入 HDD(常规类型的 HDD)上的文件。它就像某种只能附加的日志文件。

系统崩溃后(电源故障,不是硬盘故障),我回读并验证块[i] (0 < i < n) 已完全写入磁盘(通过检查长度)。可能是块的内容校验和不正确但整个块[i]仍然稳定地位于磁盘表面。

在 chunks[i] 也完全写下来之前,我假设所有其他 chunks 安全吗?或者存在一个(或多个)chunks[j] (0 < j < i) 部分(或根本没有)写入磁盘?我知道可以重新排序随机写入以提高磁盘吞吐量,但也可以重新排序顺序写入吗?

是的,(对您而言)看起来是顺序的写入可以在写入磁盘之前重新排序,主要是因为您的代码(甚至 OS)看到的顺序可能不直接对应于磁盘上的位置磁盘.

虽然 IDE 磁盘确实(曾经)使用基于指定磁道、磁头和扇区的寻址来保存一段数据,但它们早已转换为您拥有的系统一些扇区,由磁盘按照合理的顺序排列这些扇区。它通常做得很好,但在某些情况下(特别是如果一个扇区坏了并被备用扇区取代)乱序写入扇区可能最有意义。