Python 如果在以只读模式读取文件时断电,则该文件';谁的数据会丢失?

Python 如果在以只读模式读取文件时断电,则该文件';谁的数据会丢失?,python,file,file-io,Python,File,File Io,如果在以只读模式读取文件时断电,该文件的数据会丢失吗 Python中的示例: >>> f = open("example.txt", "r") >>> first_line = f.readline() >>> second_line = f.readline() >>> # Here the machine executing the above code unexpectedly powers off. 如果在以只读

如果在以只读模式读取文件时断电,该文件的数据会丢失吗

Python中的示例:

>>> f = open("example.txt", "r")
>>> first_line = f.readline()
>>> second_line = f.readline()
>>> # Here the machine executing the above code unexpectedly powers off. 
如果在以只读模式读取文件时断电,该文件的数据会丢失吗

有人会认为,既然您以只读模式打开了文件,那么答案将是肯定的“否”。我想到了两种情况:

硬件故障 对于硬盘,磁头必须位于盘片上方才能读取文件。如果电源中断,这可能是导致磁盘彻底故障的最后一根稻草

访问时间 文件元数据。即使以只读方式打开文件,“上次访问日期”也可能需要更新,从而导致写入。这是否属实取决于:;考虑:

  • 文件所在的文件系统是否支持上次访问时间
  • 文件系统是否配置为使用它?(例如,Linux有一个
    noatime
    属性,这意味着访问时间不会更新)
  • 文件系统是只读的吗?(同样,Linux是一个很好的例子;您可以以只读方式挂载FS)
如果有一个可以写入的访问时间,那么下一个大问题是手边的FS是否有日志元数据?“日志”是许多FSs用来防止损坏的数据结构。如果答案是“不”,那么我会说“是的,这是可能的。”

损坏文件元数据可能会导致文件本身中的数据损坏。(更有可能的是,存储文件在磁盘上的位置的元数据可能接近访问时间;这可能会导致数据本身损坏。文件内容可能没有问题,但说明它们在哪里的东西就是损坏的东西。)

最后,如果你需要保护自己不受这些事情的伤害

  • 使用记录元数据的文件系统。(
    ext3
    ,例如,可以这样做。)请注意,一些具有日记账的FSs不包含日记账元数据。(它们只记录主文件数据。)(还要注意,有些是可配置的。)
  • 总是有备份。磁盘总是会完全失效
  • 如果在以只读模式读取文件时断电,该文件的数据会丢失吗

    有人会认为,既然您以只读模式打开了文件,那么答案将是肯定的“否”。我想到了两种情况:

    硬件故障 对于硬盘,磁头必须位于盘片上方才能读取文件。如果电源中断,这可能是导致磁盘彻底故障的最后一根稻草

    访问时间 文件元数据。即使以只读方式打开文件,“上次访问日期”也可能需要更新,从而导致写入。这是否属实取决于:;考虑:

    • 文件所在的文件系统是否支持上次访问时间
    • 文件系统是否配置为使用它?(例如,Linux有一个
      noatime
      属性,这意味着访问时间不会更新)
    • 文件系统是只读的吗?(同样,Linux是一个很好的例子;您可以以只读方式挂载FS)
    如果有一个可以写入的访问时间,那么下一个大问题是手边的FS是否有日志元数据?“日志”是许多FSs用来防止损坏的数据结构。如果答案是“不”,那么我会说“是的,这是可能的。”

    损坏文件元数据可能会导致文件本身中的数据损坏。(更有可能的是,存储文件在磁盘上的位置的元数据可能接近访问时间;这可能会导致数据本身损坏。文件内容可能没有问题,但说明它们在哪里的东西就是损坏的东西。)

    最后,如果你需要保护自己不受这些事情的伤害

  • 使用记录元数据的文件系统。(
    ext3
    ,例如,可以这样做。)请注意,一些具有日记账的FSs不包含日记账元数据。(它们只记录主文件数据。)(还要注意,有些是可配置的。)
  • 总是有备份。磁盘总是会完全失效
  • 您的文件数据应该是安全的,但是您应该知道,即使您只是在读取文件,即使分区是以只读方式装入的,某些文件系统也会修改文件元数据中的。但是,如果您担心有可能禁用该功能,那么在类Unix系统上,您可以使用
    noatime
    选项挂载分区。有关详细信息,请参阅
    mount
    fstab
    手册页

    但是,如果你使用的是现代汽车,真的没有必要太担心这个问题

    您的文件数据应该是安全的,但是您应该知道,即使您只是在读取文件,即使分区是以只读方式装入的,某些文件系统也会修改文件元数据中的。但是,如果您担心有可能禁用该功能,那么在类Unix系统上,您可以使用
    noatime
    选项挂载分区。有关详细信息,请参阅
    mount
    fstab
    手册页

    但是,如果你使用的是现代汽车,真的没有必要太担心这个问题