【问题标题】:What filesystem operations are required to be atomic?哪些文件系统操作需要是原子的?
【发布时间】:2011-03-08 11:48:21
【问题描述】:

unlinkfsyncrename 是唯一定义为原子的吗?

编辑:原子的意思是一个操作要么成功有效果,要么失败没有效果;操作不能失败并且有效果。

显然,如果内核崩溃,程序无法处理操作失败的错误,但在这种情况下它必须考虑它确实失败了

【问题讨论】:

  • 你应该明确操作系统、文件系统类型和版本。
  • @OndrejTucny:如果我理解正确,他指的是posix风格的系统,因此这些信息不存在。

标签: filesystems operations atomic


【解决方案1】:

这里有一篇文章列出了一些原子文件操作:

http://rcrowley.org/2010/01/06/things-unix-can-do-atomically.html

mvlinksymlinkmkdir 和一些打开文件的方式是原子的。

【讨论】:

    【解决方案2】:

    我不确定fsync(2) 是原子的;如果一个文件在缓冲区缓存中有 100 兆字节的脏数据,则需要几秒钟才能将这些数据写出,并且内核可能会在传输到磁盘的过程中崩溃。也许板上的 DMA 引擎只能处理 4 兆字节的写入。也许没有 DMA 支持,CPU 必须通过 512 字节块安排每次写入。

    “原子”是什么意思?

    mkdir 可能是“原子的”,或者目录存在于磁盘上并链接到父目录,或者目录数据结构尚未链接到父目录,因此无法访问 --> 不'不存在。

    mount(2) 也可能如此:很难找到中途完成的 mount(2),如果失败,则整个挂载都会失败:文件系统要么已挂载,要么未挂载。

    umount(2)很有趣,可以懒惰地做,但是一旦卸载,就不能用于open(2)creat(2)调用。

    所以,我想归根结底,“原子”是什么意思? :)

    【讨论】:

    • AFAIK 原子操作可能会失败,但下次驱动程序检查文件系统时,它将恢复这些操作。 AFAIK 有一些系统会保留一种带有“已启动”和“已完成”操作的日志,如果一个操作未“完成”但文件系统正在启动,它肯定必须恢复!
    猜你喜欢
    • 2013-02-10
    • 1970-01-01
    • 2013-09-06
    • 2011-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多