这主要是理论问题,没有真正的实际用途。
如您所知,文件名存储在目录 inode 中。这意味着我们拥有的文件越多,文件名越长,目录使用的空间就越多。
不幸的是,如果从目录中删除文件,则目录使用的空间不会释放并且仍在使用。
$ mkdir test ; cd test
# next command will take a while ; for me it was about 6 minutes
$ for ((i=1;i<103045;i++)); do touch very_long_name_to_use_more_space_$i ; done
$ ls -lhd .
drwxr-xr-x 2 user user 8.6M Nov 9 22:36 .
$ find . -type f -delete
$ ls -l
total 0
$ ls -lhd .
drwxr-xr-x 2 user user 8.6M Nov 9 22:39 .
为什么文件删除后目录使用的空间没有更新?有没有办法释放空间而不重新创建目录?
答案1
fsck.ext4 -D
您可以在未挂载的文件系统上使用优化目录:
-D Optimize directories in filesystem. This option causes e2fsck to try to optimize all directories, either by reindexing them if the filesystem supports directory indexing, or by sorting and compressing directories for smaller directories, or for filesys‐ tems using traditional linear directories.
ext3
该选项在和上也有效ext2
。
为什么它不是即时完成的,我不能说。也许是为了性能问题?