![Ubuntu:网络驱动器上不可移动的 .tmp 文件,没有 PID](https://linux22.com/image/92032/Ubuntu%EF%BC%9A%E7%BD%91%E7%BB%9C%E9%A9%B1%E5%8A%A8%E5%99%A8%E4%B8%8A%E4%B8%8D%E5%8F%AF%E7%A7%BB%E5%8A%A8%E7%9A%84%20.tmp%20%E6%96%87%E4%BB%B6%EF%BC%8C%E6%B2%A1%E6%9C%89%20PID.png)
TL;博士版本:我的本地网络驱动器上有一个 localdb.kdbx.tmp 文件,无法重命名/删除/复制/覆盖/打开/等。所有尝试(sudo 或其他方式)都会抛出“设备或资源繁忙”错误。运行 fusionr 和 lsof 没有显示任何内容;据我所知,没有任何东西正在主动访问该文件,并且没有关联的 PID 或父进程。在 FUSE 设置为允许 root 和其他用户的情况下重新安装驱动器没有什么区别。文件权限正常,目录中的其他所有内容(备份等)均按预期运行。
细节:我有一个 KeePass 共享数据库,该数据库托管在多台现场计算机之间共享的本地网络驱动器上。有些机器运行 Windows,有些机器运行 Linux。我个人使用的是 32 位 Ubuntu 14.04,安装了 keepass2 2.34。
昨天,当尝试将一些最近的更新保存到 localdb.kdbx KP 数据库时(当时我是唯一访问该文件的人),Keepass 抛出错误并表示数据库可能已损坏。我关闭了机器,假设第二天可以覆盖该文件。但是当我今天早上进来并连接到驱动器时,localdb.kdbx 仅以 localdb.kdbx.tmp 的形式存在,没有人可以打开它(KeePass 特别抛出“路径上的锁定冲突”错误)。
我会在 KeePass 论坛上解决这个问题,但我们只需要能够使用文件名,所以我很乐意删除它,这样我就可以从备份中重新创建它。问题是,每当我尝试对文件执行任何操作时,都会收到“设备或资源繁忙”错误。在 .tmp 文件上使用 lsof 和 fusionr 只会返回一个没有 PID 的空白,因此没有什么可删除的,也无法“释放”该文件以进行删除。我认为这可能是 FUSE 问题并尝试了解决方案如何通过 sudo 访问 Gigolo 挂载的共享和警告:无法 stat() fusion.gvfsd-fuse 文件系统没有运气。
有小费吗?
答案1
预计到达时间:我误解了;驱动器是不是SMB Windows 计算机,但运行 QNAP Linux 3.2.26 版本的计算机(avahi-discover 将其识别为 Windows)。
事实证明,网络驱动器是一台 SMB Windows 计算机(我错误地认为它是 Linux)(请参阅 ETA),并且锁定文件的进程正在由 Windows 运行。我没有考虑到 lsof 和 fusionr 只返回它们正在运行的机器的进程(即我的本地机器,而不是网络驱动器:)。
网络驱动器没有启用 ssh,并且 smbclient 不允许我覆盖锁定,因此我要求我们的网络管理员重新启动驱动器。该过程终止,我能够删除该文件。
(供其他人参考:我使用 avahi-discover 来获取网络驱动器的操作系统和其他详细信息。)
感谢 @derobert 为我指明了服务器进程的方向。