gpt4 book ai didi

mmap 本地 v/s nfs 文件 : what happens when the underlying file is replaced on disk?

转载 作者:行者123 更新时间:2023-12-01 10:56:59 25 4
gpt4 key购买 nike

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

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

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

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

最佳答案

如果您有一个文件的开放引用,该引用将继续引用同一个文件,只要引用存在,即使文件本身被删除或重命名,即使它的名称在之后被全新的文件重用它被删除。引用可以是文件描述符或内存映射。这是 POSIX 的一部分,无论使用哪种类型的文件系统,它都是正确的(或者应该是!)。

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

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

关于mmap 本地 v/s nfs 文件 : what happens when the underlying file is replaced on disk?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14626188/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com