![删除导致所有命令挂起的巨大目录](https://linux22.com/image/211385/%E5%88%A0%E9%99%A4%E5%AF%BC%E8%87%B4%E6%89%80%E6%9C%89%E5%91%BD%E4%BB%A4%E6%8C%82%E8%B5%B7%E7%9A%84%E5%B7%A8%E5%A4%A7%E7%9B%AE%E5%BD%95.png)
这么大的目录怎么删除呢?
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
当应用程序访问该目录时,删除文件将花费更长的时间。将目录本身移动到另一个位置(在同一卷上!)并创建一个新目录会有所帮助。但如果应用程序仍在运行,它可能拥有该大目录的句柄,因此不会使用新目录。
所以:
- 停止应用程序
- 移动目录
- 创建新目录
- 开始申请
- 删除文件旧目录,包括文件