【问题标题】:Updating the reference count when moving a file?移动文件时更新引用计数?
【发布时间】:2015-07-20 07:59:38
【问题描述】:

如果我在同一分区上移动一个文件,当我移动时,我是否应该将 i-node 的引用计数更新为 2(因为我是第一次复制),然后再次将其减为 1(当我删除目录项)?

或者在移动过程中引用计数没有被触及?

【问题讨论】:

    标签: memory memory-management inode


    【解决方案1】:

    没有。

    当一个文件被“移动”时,真正发生的是文件命名层中对 inode 的引用正在改变,就是这样。事实上,文件并没有被复制。

    意识到文件命名层纯粹是为了您的方便。文件系统本身实际上只关心 inode。通常,甚至目录也是文件命名层的虚构。 (确实有些文件系统实际上是在文件系统层按层次组织目录,但例如 ext2 和 ext3 就不是这样)。

    虽然从技术上讲,在极短的时间内在命名层中没有引用或两次引用文件是正确的,但从系统调用到内核的角度来看,这实际上是一个原子事务,即正在制作中,因此它实际上并不重要,也不会成为您的竞争条件。

    【讨论】:

    • 谢谢,您能否更准确一点:如果文件保存在同一个文件夹中,inode 的引用会更改,如果我将文件移动到另一个文件夹,那么我必须删除 dir 条目并在新目录中添加 dir 条目。在这个过程中,我会更新inode的引用计数吗?此外,这在操作系统方面是原子操作,但在硬件方面不会是,对吧?
    • 唯一“移动”的是文件名。实际文件(inode)不会移动或更改。唯一的情况是您将文件移动到另一个分区。试试这个实验:使用ls -i 查看目录中文件的inode。使用mv 将其中一个移动到另一个目录,然后在新目录中的该文件上尝试ls -i。您将看到 inode 编号 没有 更改。
    • @nick:根据文件系统的实现,源文件的 inode 引用计数可能会在短时间内增加。保证是如果与目标文件名关联的 inode 在调用之前已经存在,则会自动替换它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-22
    • 1970-01-01
    • 2021-12-04
    • 2013-01-13
    • 2013-09-17
    相关资源
    最近更新 更多