如果在执行文件I / O操作的过程中出现电源故障,会发生什么?

时间:2011-01-07 03:31:51

标签: python file-io operating-system

好的,这个问题实际上是我前一个问题的后续问题:What would happen if I abruptly close my script while it's still doing file I/O operations?

因此,每当您强制脚本/程序退出时,都不可能看到写入文件的不完整行,因为操作系统会完成它们的工作。但是,如果出现电源故障,操作系统正处于将“这是一个测试”(或者更大的字符串)等一行附加到文件中,我是否会附加一条不完整的行或者没有附加任何内容,甚至是更糟糕的是,先前的内我真的很想知道,这种情况肯定会发生在服务器端。有人可以帮帮我吗?

2 个答案:

答案 0 :(得分:2)

规则1.没有魔力。不保证。没有保证。电源故障意味着电路通过超出其设计公差的状态。什么事情都可能发生。没有保证。

  

如果出现电源故障,并且操作系统正在将...附加到文件中,我是否会附加不完整的行

可能。没有魔力。 I / O可以包括两个物理块。一个是书面的,一个是不成文的。

  

或没有附加

可能。没有魔力。 I / O缓冲区可能尚未同步到设备。

  

甚至更糟糕的是,先前的内容丢失了?

可能。没有魔力。写入器件的块可能 - 在电源故障期间 - 设备上的致命损坏位。

  

我真的很想知道,这种情况肯定会发生在服务器端。

"当然&#34 ;?在像电力故障这样无法控制的事件中,没有什么是明确的。任何事情都可能发生。

随机加扰的比特可能是林肯的葛底斯堡地址的文本以及设备上出现的内容的可能性非常小。

答案 1 :(得分:1)

它依赖于FileSystem(及其选项),硬件(缓存/缓冲区,媒体等),应用程序行为和许多其他花絮。

你可以lose data,甚至是之前安全写过的数据。您可以破坏整个分区。你可以在文件上获取垃圾。你可以得到一条半满的书,半满的垃圾或其他东西。鉴于各种因素的正确组合,您几乎可以获得任何您想象的结果,包含混合内容的文件,重新删除的旧文件重新铺设,狗和猫共同生活......大规模歇斯底里!

使用适当的(journaled?版本化?)FS和理智硬件,可以降低可能的混乱程度。