当遍历HDD上的目录树时,碎片似乎会创建许多不必要的搜索:
# stat -c %F 00 01 02
directory
directory
directory
# filefrag -v 00 01 02
Filesystem type is: ef53
File size of 00 is 12288 (3 blocks of 4096 bytes)
ext: logical_offset: physical_offset: length: expected: flags:
0: 0.. 0: 428351942.. 428351942: 1:
1: 1.. 2: 428352760.. 428352761: 2: 428351943: last,eof
00: 2 extents found
File size of 01 is 12288 (3 blocks of 4096 bytes)
ext: logical_offset: physical_offset: length: expected: flags:
0: 0.. 0: 428351771.. 428351771: 1:
1: 1.. 2: 428891667.. 428891668: 2: 428351772: last,eof
01: 2 extents found
File size of 02 is 12288 (3 blocks of 4096 bytes)
ext: logical_offset: physical_offset: length: expected: flags:
0: 0.. 0: 428351795.. 428351795: 1:
1: 1.. 2: 428352705.. 428352706: 2: 428351796: last,eof
02: 2 extents founde4defrag无法将它们分解
# e4defrag -v 00
ext4 defragmentation for directory(00)
[1/116] "00"
File is not regular file [ NG ]那么如何对目录进行碎片整理呢?不是它的内容,而是目录本身。目录正在使用中,所以应该以原子的方式完成,就像整理常规文件不会干扰它们的使用一样。
发布于 2017-05-07 20:47:45
由于似乎没有任何用于目录索引的联机碎片整理工具,甚至离线碎片整理器似乎也没有帮助,所以我不得不递归地重新构建目录树。
为此,我编写了一个小型工具(破碎机)。唉,这种方法要求使用目录树的应用程序在碎片整理期间被删除,在处理数百万个文件时,这需要相当长的时间。
发布于 2023-05-05 22:10:41
如果您有空闲空间,您可以在同一设备上创建一个新目录的并行树,并将文件硬链接到它们,然后交换head目录的名称,然后在重新启动或其他应用程序关闭后,删除原始目录树。我们过去常常使这样的克隆树以最小的文件空间来测试更改,或者在运行生产的同时安装sw版本。
您可以先构建每个目录目录(加速树遍历),然后先构建最老的文件,因为最年轻的文件最可能是短暂的。
我不知道这是如何工作的文件类型,而不是平面文件和目录。我希望符号链接本身可以是硬链接,并且可能命名为管道,但是设备呢?当然,我确信/prod和/dev这样反映内核表的假树是不允许的。
https://unix.stackexchange.com/questions/350715
复制相似问题