gpt4 book ai didi

linux - 目录大小 .(DOT) 不会减少?

转载 作者:太空狗 更新时间:2023-10-29 12:29:40 25 4
gpt4 key购买 nike

我正在研究linux文件系统。我有一个实验来探索 linux 是如何保存硬链接(hard link)的。

我为同一目录中的文件创建了 1000 个硬链接(hard link)。 .(DOT)的大小增加到28672;我删除了 500 个硬链接(hard link),.(DOT) 的大小没有减少。 (我使用“stat .”来检查大小。)为什么大小没有减小?

这是我的实验:我有一个名为test的文件夹,里面只有一个小文件testfile和一个脚本,状态是这样的:

York:~/test$ ll -li
total 84
7995940 drwxr-xr-x 2 York domain_users 4096 Jul 17 19:20 ./
7995939 drwxr-xr-x 3 York domain_users 69632 Jul 17 19:20 ../
7996494 -rwxrwxrwx 1 York domain_users 94 Jul 17 19:14 copy.sh*
8026281 -rw-r--r-- 1 York domain_users 7 Jul 17 19:17 testfile

York:~/test$ stat .
File: `.'
Size: 4096 Blocks: 8 IO Block: 4096 directory
Device: fc03h/64515d Inode: 7995940 Links: 2
Access: (0755/drwxr-xr-x) Uid: (2060469376/York) Gid: (2060452353/domain_users)
Access: 2015-07-17 19:20:06.288345960 +0200
Modify: 2015-07-17 19:20:05.420340318 +0200
Change: 2015-07-17 19:20:05.420340318 +0200
Birth: -

然后我运行脚本:

for i in `seq 200000 200999`;
do
ln testfile "$i"
done

之后,我得到了如下结果:

York:~/test$ stat .
File: `.'
Size: 28672 Blocks: 64 IO Block: 4096 directory
Device: fc03h/64515d Inode: 7995940 Links: 2
Access: (0755/drwxr-xr-x) Uid: (2060469376/York) Gid: (2060452353/domain_users)
Access: 2015-07-17 19:21:25.364862751 +0200
Modify: 2015-07-17 19:21:11.064768884 +0200
Change: 2015-07-17 19:21:11.064768884 +0200
Birth: -

我可以看到 inode 计数器是 1001,这是我所期望的:

York:~/test$ ll -li testfile 
8026281 -rw-r--r-- 1001 York domain_users 7 Jul 17 19:17 testfile

我用“rm”删除了 500 个硬链接(hard link),我看到:

York:~/test$ ll -li testfile 
8026281 -rw-r--r-- 501 York domain_users 7 Jul 17 19:17 testfile

但是目录的大小并没有减少:

York:~/test$ stat .
File: `.'
Size: 28672 Blocks: 64 IO Block: 4096 directory
Device: fc03h/64515d Inode: 7995940 Links: 2
Access: (0755/drwxr-xr-x) Uid: (2060469376/York) Gid: (2060452353/domain_users)
Access: 2015-07-17 19:24:35.138125221 +0200
Modify: 2015-07-17 19:24:35.142125246 +0200
Change: 2015-07-17 19:24:35.142125246 +0200
Birth: -

我对文件系统中的目录的理解是这样的:对于每个目录,分配一个inode用于文件夹名称等属性,还有一个数据 block 用于保存该文件夹中文件和目录的条目。因为每个硬链接(hard link)需要一个条目,1000 个硬链接(hard link)需要的空间比一个数据 block 多,需要另一个数据 block 。因此目录 .(DOT) 的大小增加了。反之亦然,如果我删除 500 个硬链接(hard link),大小应该会减小。

但是实验表明尺寸并没有减少。我哪里错了?

提前致谢!

最良好的祝愿,约克

最佳答案

您所看到的是正确的。许多 Linux 文件系统从不缩小目录 inode 的大小;他们只是清空已删除文件的条目,以便在以后将更多文件添加到目录时重新使用它们。将目录恢复到其原始大小的唯一方法可能是删除它并创建一个同名的新目录。

关于linux - 目录大小 .(DOT) 不会减少?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31482374/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com