删除导致所有命令挂起的巨大目录

删除导致所有命令挂起的巨大目录

这么大的目录怎么删除呢?

stat session/
  File: ‘session/’
  Size: 321540096       Blocks: 628040     IO Block: 4096   directory
Device: 903h/2307d      Inode: 11149319    Links: 2
Access: (0755/drwxr-xr-x)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2022-09-29 14:34:40.910894275 +0200
Modify: 2022-09-29 14:35:09.598400050 +0200
Change: 2022-09-29 14:35:09.598400050 +0200
 Birth: -

请注意,目录的大小(不是内容,而是目录项本身)超过 300MB。 inode 数量超过 1100 万个。

该目录没有子目录,只有大量文件。

常用命令都不起作用。我已经尝试过这些:

  • rsync -a --delete empty_dir/ session/
  • rm -rf session
  • find . -type f --delete

如果我跑ls -f1进去,它就会挂起。

如果我跑mv -- * ../.tmp_to_delete进去,它就会挂起。

如果我跑du进去,它就会挂起。

目前 rsync --delete 已经运行了两天,读取速度高达 7MB/s,并且我看到目录的统计输出没有变化。

我认为目录太大是问题所在。

答案1

已解决:4 天后,rsync 完成了工作 - 所有文件都已被删除 - 但在删除单个文件之前,它至少需要 2 天来读取目录信息。

这是为可能遇到类似问题的任何人提供的信息:使用屏幕并保持耐心

答案2

将主目录放入其自己的文件系统中。不要删除所有文件,而是卸载它,重新创建文件系统并挂载空文件系统。

答案3

当应用程序访问该目录时,删除文件将花费更长的时间。将目录本身移动到另一个位置(在同一卷上!)并创建一个新目录会有所帮助。但如果应用程序仍在运行,它可能拥有该大目录的句柄,因此不会使用新目录。

所以:

  • 停止应用程序
  • 移动目录
  • 创建新目录
  • 开始申请
  • 删除文件旧目录,包括文件

相关内容