问题
我有一个无法删除或查询的文件,但它确实正在使用ls
并且不允许覆盖它。
# ls -l
-rwxr-xr-x 1 root root 151040 Mar 22 21:55 export.mb
-rwxr-xr-x 1 root root 60416 Mar 25 10:48 source.mb
所有这些命令都不起作用:
# rm export.mb
rm: cannot remove 'export.mb': No such file or directory
# lsattr export.mb
lsattr: No such file or directory While reading flags on export.mb
# echo "" > export.mb
# ls export.mb # <-- This does show the file
export.mb
语境
该文件位于 CIFS 挂载点上,以下是相关/etc/fstab
条目:
# /etc/fstab
(...mountpoints...) cifs credentials=/root/share.creds,user_xattr 0 0
该文件来自使用以下标志的 rsync 复制:
rsync --update --human-readable --itemize-changes --stats -amz --log-file=$LOGFILE $SRC_DIR $DST_DIR
rsync 命令在一段时间内正常工作。问题发生前一天的日志显示它正常:
2024/04/17 03:36:56 [115611] .f...pog... export.mb
然后开始出现:
2024/04/18 03:20:43 [117623] >f.stpog... export.mb
2024/04/18 03:20:43 [117623] rsync: rename ".../.export.mb.79sd8g" -> ".../export.mb": No such file or directory (2)
尝试的解决方案
我尝试了以下方法,但没有效果。
确保没有奇怪的字符
使用ls -b
不会显示任何奇怪的字符。Tab 补全在终端中也有效,尽管我不知道这是否足以保证不会出现奇怪的字符。
按 inode 删除
# ls -i
562949970325155 export.mb
2533274793978866 source.mb
# find . -inum 562949970325155
./export.mb
# find . -inum 562949970325155 -exec /bin/rm {} \;
/bin/rm: cannot remove './export.mb': No such file or directory
直接从 SMB 服务器删除它。
直接在 Windows Server 上删除它也存在同样的问题。它无法删除该文件。
具体来说,例如从 Windows 资源管理器执行此操作将展示文件已删除。但如果你刷新它,它仍然存在。
如有任何关于如何解决此问题的建议,我们将不胜感激!
答案1
Deleting it on the Windows Server directly has the same issue
您需要确定 Windows 服务器上具有该文件的打开句柄的进程。您可以使用 Sysinternals Handle.exe 显示具有该文件句柄的进程。
https://learn.microsoft.com/en-us/sysinternals/downloads/handle