mmap local v / s nfs文件:在磁盘上替换基础文件时会发生什么?

时间:2013-01-31 12:48:16

标签: mmap nfs

假设文件被替换(同名)批发而不是就地修改(即创建一个temp,然后重命名为filename)。

我认为更改不会影响本地mmap,因为内核仍然具有磁盘上旧文件(inode)的句柄。

但是,由于NFS是无状态的,mmap是否会在mmap的(长)生命周期内混淆并混淆旧/新文件内容?

在我看来,read / readv是处理NFS挂载文件的唯一安全方法。

1 个答案:

答案 0 :(得分:6)

如果你有一个对文件的开放引用,那么只要引用存在,该引用就会继续引用同一个文件,即使文件本身被删除或重命名,即使它的名称被一个品牌重用删除后的新文件。引用可以是文件描述符或内存映射。这是POSIX的一部分,无论使用何种类型的文件系统,它都是真的(或应该是!)。

换句话说:如果在NFS文件系统上打开文件并将其映射到内存中,只要不取消映射,就可以继续使用该内存映射,即使某些其他进程(或相同)也是如此process)删除文件并将其替换为具有相同名称的新文件。

NFS协议确实是无状态的,因此实现必须采取特殊步骤以确保正确处理此案例。自从我查看它是如何完成以来已经很长时间了,但是我最后一次(在Solaris上)通过将文件重命名为特殊隐藏名称(.nfsXXXXX)来完成,而不是在链接数量被删除时删除它们当它们仍然公开引用时,它会减少到零。无论如何,无论实现使用什么技巧,你作为文件系统的用户都不应该担心它。