如何删除这个大目录?
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,我看到目录的 stat 输出没有变化。
我认为目录的大尺寸是问题所在。
已解决:4 天后 rsync 完成了工作 - 所有文件都已删除 - 但在删除单个文件之前,它至少需要 2 天才能读取目录信息。
这是为可能有类似问题的任何人提供的信息:使用 screen 并耐心等待。
将主目录放到它自己的文件系统上。不要删除所有文件,而是卸载它,重新创建文件系统并安装空文件系统。
当应用程序访问目录时,删除文件将花费更长的时间。将目录本身移动到另一个位置(在同一卷上!)并创建一个新目录会有所帮助。但是,如果应用程序仍在运行,它可能拥有那个大目录的句柄,因此不会使用新目录。
所以: