我试图弄清楚 NFS v3 中如何使用粘性位。 RFC 1813第 22 页说:
0x00200 保存交换的文本(POSIX 中未定义)。
“交换文本”是什么意思?在《NFS 图解》中,作者 Brent Callaghan 表示,这意味着不缓存。不过我在其他地方没有看到过这样的解释。
答案1
可执行文件的文本部分是实际的可执行代码,这就是它所指的内容。在 Linux 上,此请求被忽略,它只是管理员进行的优化。内核可以自行执行此操作,无需提示。
也就是说,如果可执行文本被换出,并且进程结束,则保留它以供下次使用。在 Linux(本地)上,可执行文件不会被换出,因为从文件重新加载的速度一样快。也许 NFS 有点不同。
粘滞位对于其他文件类型有其他含义:您对可执行文件进行了描述。对于目录,它会阻止非所有者删除文件。
我认为 nfs 是一样的,20 年前我使用它时也是如此。
从:http://netbsd.gw.com/cgi-bin/man-cgi?sticky+7+NetBSD-current
后来,在 SunOS 4 上,粘性位对于设置了该位且不可执行的文件有了额外的含义:对这些文件的读写操作将直接进入磁盘并绕过缓冲区高速缓存。这通常用于 NFS 服务器上 NFS 客户端的交换文件,以便服务器上客户端生成的交换 I/O 不会从服务器的缓冲区高速缓存中逐出有用数据。