如何在不重新创建文件夹的情况下重置文件夹元数据大小?

Aus*_*urk 6 filesystems ext4

我有一个文件夹 ( watch) 错误地装满了很多临时文件。我已经清除了所有这些文件,但该文件夹的大小仍然是 356 kB。过去,我已经将文件夹移开,创建了一个具有相同名称的新文件夹,并将所有文件复制到其中以使其恢复到以前的小尺寸。有没有办法在不重新创建文件夹的情况下将其缩小到小尺寸?

drwxr-xr-x 2 apache apache   4096 Nov 29  2014 details
drwxr-xr-x 2 apache apache 364544 Jan 21 17:24 watch
drwxr-xr-x 3 apache apache   4096 Jan 21 17:19 settings
Run Code Online (Sandbox Code Playgroud)

watch 有两个小文件:一个 .htaccess 和一个 index.php。

我有一个 ext4 文件系统。

Dmi*_*yev 3

e4fsck支持-D似乎可以做你想做的事情的标志:

尝试优化所有目录,如果文件系统支持目录索引,则通过重新索引它们,或者通过对较小目录或使用传统线性目录的文件系统进行排序和压缩目录。

当然,您需要卸载文件系统才能使用fsck,这意味着您的服务器会停机。

您将需要使用该-f选项来确保e4fsck处理文件系统,即使文件系统是干净的。

测试:

# truncate -s1G a; mkfs.ext4 -q ./a; mount ./a /mnt/1
# mkdir /mnt/1/x; touch /mnt/1/x/{1..4000}
# ls -ld /mnt/1/x
drwxr-xr-x 2 root root 69632 Nov 22 12:54 /mnt/1/x/
# rm -f /mnt/1/x/*
# ls -ld /mnt/1/x
drwxr-xr-x 2 root root 69632 Nov 22 12:55 /mnt/1/x/
# umount /mnt/1
# e2fsck -f -D ./a
e2fsck 1.43.3 (04-Sep-2016)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 3A: Optimizing directories
Pass 4: Checking reference counts
Pass 5: Checking group summary information

./a: ***** FILE SYSTEM WAS MODIFIED *****
./a: 12/65536 files (0.0% non-contiguous), 12956/262144 blocks
# mount ./a /mnt/1
# ls -ld /mnt/1/x
drwxr-xr-x 2 root root 4096 Nov 22 12:55 /mnt/1/x/
Run Code Online (Sandbox Code Playgroud)