AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / unix / 问题 / 433051
Accepted
djuarez
djuarez
Asked: 2018-03-24 04:51:00 +0800 CST2018-03-24 04:51:00 +0800 CST 2018-03-24 04:51:00 +0800 CST

mount.nfs:陈旧文件句柄错误 - 无法卸载

  • 772

每次我尝试挂载 NFS 共享时,我都会得到以下信息:

>> mount -t nfs gitlab-replica-storage.blah.com:/export/registry-gitlab-prod-data-vol /mnt/test
mount.nfs: Stale file handle

问题是我无法卸载,正如它所说:

>> umount -f -l /mnt/test
umount: /mnt/test: not mounted

我尝试检查是否有任何进程正在使用挂载点,但事实并非如此。

还有其他解决方法吗?

作为澄清:

  • 我可以将它安装在另一台机器上。
  • 我无法将它安装到受影响机器上的另一个安装点。
mount nfs
  • 5 5 个回答
  • 100676 Views

5 个回答

  • Voted
  1. maxschlepzig
    2018-06-03T23:56:51+08:002018-06-03T23:56:51+08:00

    如果服务器对该客户端有一些陈旧的导出条目,则Amount -t nfs失败。Stale file handle

    示例场景:当服务器重新启动而客户端未先卸载 nfs 卷时,可能会发生这种情况。当服务器返回并且客户端然后卸载并尝试安装 nfs 卷时,服务器可能会响应:

    mount.nfs: Stale file handle
    

    您可以通过查看/proc/fs/nfs/exports或来检查这一点/proc/fs/nfsd/exports。如果有客户的条目,它可能是一个陈旧的条目。

    您可以通过显式取消导出和重新导出服务器上的相关导出来解决此问题。例如,要对所有导出执行此操作:

    # exportfs -ua
    # cat /proc/fs/nfs/exports
    # exportfs -a
    

    在此之后,客户端mount -t nfs ...应该成功。

    请注意,mount yieldingESTALE与其他一些系统调用(如 open/readdir/unlink/chdir ...)返回ESTALE. 它的导出是陈旧的,而文件句柄是陈旧的。NFS 很容易发生陈旧的文件句柄(例如,客户端有文件句柄,但文件在服务器上被删除)。

    • 18
  2. Best Answer
    Yurij Goncharuk
    2018-03-24T05:41:27+08:002018-03-24T05:41:27+08:00

    最初引入错误 ESTALE 是为了处理 NFS 用来唯一标识服务器上的文件的文件句柄不再引用服务器上的有效文件的情况。当文件在服务器上被删除时,可能会发生这种情况,无论是通过服务器上的应用程序、其他访问服务器的客户端,或者有时甚至是来自同一客户端的另一个挂载文件系统。当文件驻留在不再导出的文件系统上时,NFS 服务器也会返回此错误。此外,一些 NFS 服务器甚至会在重命名文件时更改文件句柄,尽管不鼓励这种做法。

    即使在服务器上重新创建了同名的文件或目录,而客户端不知道它,也会发生此错误。文件句柄指的是文件的特定实例,删除文件然后重新创建它会创建文件的新实例。

    当使用缓存的目录信息将路径名转换为 dentry/inode 对时,通常会看到错误 ESTALE。当后续操作发送到 NFS 服务器时,会发现该信息已过时或陈旧。当使用缓存信息将路径名转换为dentry/inode 对时,这很容易在诸如stat(2) 之类的系统调用中发生,但是随后对服务器的GETATTR 调用发现文件句柄不再有效。

    当在查找要查找的路径名的不同组件之间或在成功查找和后续操作之间对服务器进行更改时,也会发生此错误。

    关于ESTALE的原始链接:ESTALE LWN。

    我建议您检查 NFS 服务器上的文件和目录,或者告诉 NFS 服务器的管理员来执行此操作。

    NFS 服务器上可能存在一些旧的 pagecache、inode、dentry 缓存条目。请清洁它:

    # To free pagecache
    echo 1 > /proc/sys/vm/drop_caches
    
    # To free dentries and inodes
    echo 2 > /proc/sys/vm/drop_caches
    
    # To free pagecache, dentries and inodes
    echo 3 > /proc/sys/vm/drop_caches
    
    • 7
  3. RAJNEESH YADAV
    2021-10-07T06:18:43+08:002021-10-07T06:18:43+08:00

    在我的情况下,我在安装新卷时也收到错误“mount.nfs:过时的文件句柄”。发生这种情况是因为已安装的旧卷已被删除。卸载后,使用的卷,

    umount /mnt
    

    当我再次安装时,它解决了问题。

    • 2
  4. JFP
    2019-02-25T18:44:36+08:002019-02-25T18:44:36+08:00

    在 NFS 服务器上查找过时的挂载条目:

    showmount -a | grep ip_address_of_nfs_client
    

    如果您看到与 NFS 客户端的 IP 地址和您尝试挂载的共享相关的行,请从 rmtab 中删除过时的条目:

    vi /var/lib/nfs/rmtab
    

    重新加载 rpc.mountd 以便它看到新的 rmtab:

    killall rpc.mountd ; /usr/sbin/rpc.mountd
    
    • 1
  5. monkeywrench
    2018-03-24T05:41:56+08:002018-03-24T05:41:56+08:00

    检查导出是否实际挂载:

    # cat /proc/mounts | grep nfs
    

    陈旧文件句柄错误意味着 NFS 服务器在其导出路径中保存旧版本的文件。NFS 服务器重新启动有时会有所帮助。但是对于较旧的操作系统(RHEL/CentOS 6.9),有时最好恢复到 NFS3 而不是 NFS4。根据我的经验,较旧的 NFS4 客户端有时会在使用较新的 NFS4.1 服务器时遇到困难。对于文件锁定尤其如此。

    • 0

相关问题

  • 阻止损坏的 NFS 挂载锁定 solaris 11.3 中的目录?

  • 如何在 solaris 11.3 中挂载 zfs 驱动器分区

  • 阻止挂载系统调用

  • 将局域网硬盘挂载到 linux fedora

  • 无法在 Alpine Linux LXC 上启动 NFS 服务器

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    ssh 无法协商:“找不到匹配的密码”,正在拒绝 cbc

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    如何卸载内核模块“nvidia-drm”?

    • 13 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Wong Jia Hau ssh-add 返回:“连接代理时出错:没有这样的文件或目录” 2018-08-24 23:28:13 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST
  • Martin Hope
    Bagas Sanjaya 为什么 Linux 使用 LF 作为换行符? 2017-12-20 05:48:21 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve