正如你所读到的这里,ext4 文件系统具有将块分组为盘区的盘区功能。它们每个最多可以有 128MiB 的连续空间。在 中e4defrag
,有类似于以下内容的行:
[325842/327069]/file: 100% extents: 100 -> 10 [ OK ]
文件大小约为 150MiB。因此根据 wiki 页面,应该有 2 个范围,而不是 10 个。
- 有谁知道为什么范围是 15MiB 而不是 128MiB?
- 有没有可以检查精确范围大小的工具?
- 如何更改大小使其变为 128MiB?
答案1
我认为你的问题是基于一个错误的前提。
基本上...你的范围是大小为 128 MB,但是 e4defrag 获取该文件,复制其数据,发现副本有 5 个范围而不是 10 个范围,因此它称此为“成功”,并将 inode 指向复制的数据,然后释放原始数据。如果发生这种情况,它会打印“10 -> 5”。
(现在,它也有可能出现复制的数据更多的范围,在这种情况下,它会删除副本并保持原样,并打印“10 -> 10”。)
磁盘越满,e4defrag 将文件收缩到根据文件大小计算出的“最小”范围数的可能性就越小。
但不要指望 e4defrag 能够完美地对您的磁盘进行碎片整理 - 它有点懒惰地尝试它,每个文件一次尝试(每个具有多个范围的文件,也就是说 - 如果它已经只有一个范围(或我猜是最小可能的)它很快就会跳过它)并且如果这种尝试没有带来某种改进,它只会让事情保持原样,即使有改进,也不能保证是可能的最小范围数。第一次运行后重新运行 e4defrag 可能会得到一些改进,特别是如果自上次运行以来释放了更多空间,但第一次运行后的后续运行可能很快就会出现收益递减。
答案2
我想我知道它是如何运作的。
我将另一个磁盘连接到我的机器,因为它有一个几乎空的分区 ~458G 。我通过以下方式检查了其可用空间e2freefrag
:
HISTOGRAM OF FREE EXTENT SIZES:
Extent Size Range : Free extents Free Blocks Percent
64M... 128M- : 6 146233 0.12%
128M... 256M- : 5 322555 0.27%
256M... 512M- : 3 263897 0.22%
512M... 1024M- : 6 1159100 0.98%
1G... 2G- : 228 116312183 98.40%
它只是一个连续的空闲块。因为分区几乎是空的,所以有大量可用空间,并且您有 228 个 1-2G 的块。
我在分区内放置了一个2.5G的大文件,上面的表格发生了一些变化:
HISTOGRAM OF FREE EXTENT SIZES:
Extent Size Range : Free extents Free Blocks Percent
2M... 4M- : 5 5114 0.00%
64M... 128M- : 7 170777 0.14%
128M... 256M- : 1 64511 0.05%
256M... 512M- : 4 361579 0.31%
512M... 1024M- : 5 930749 0.79%
1G... 2G- : 227 116025495 98.16%
这并没有告诉我有关分配的块范围的任何信息,但它给了我一些想法。当我查看 中的文件时e4defrag
,有这样的内容:
# e4defrag -cv file
<File>
[ext 1]: start 34816: logical 0: len 32768
[ext 2]: start 67584: logical 32768: len 30720
[ext 3]: start 100352: logical 63488: len 32768
[ext 4]: start 133120: logical 96256: len 30720
[ext 5]: start 165888: logical 126976: len 32768
[ext 6]: start 198656: logical 159744: len 30720
[ext 7]: start 231424: logical 190464: len 32768
[ext 8]: start 264192: logical 223232: len 30720
[ext 9]: start 296960: logical 253952: len 32768
[ext 10]: start 329728: logical 286720: len 32768
[ext 11]: start 362496: logical 319488: len 32768
[ext 12]: start 395264: logical 352256: len 32768
[ext 13]: start 428032: logical 385024: len 32768
[ext 14]: start 460800: logical 417792: len 32768
[ext 15]: start 493568: logical 450560: len 30720
[ext 16]: start 557056: logical 481280: len 32768
[ext 17]: start 589824: logical 514048: len 32768
[ext 18]: start 622592: logical 546816: len 32768
[ext 19]: start 655360: logical 579584: len 32768
[ext 20]: start 688128: logical 612352: len 32768
[ext 21]: start 720896: logical 645120: len 622
该数字32768
表示块 (4K),等于 128MiB。其中一些块的块数较少,我不知道为什么,因为文件系统是空的,我认为所有盘区应该有 32768 个块。
无论如何,我检查了主分区以查看其可用空间,并且有类似这样的内容:
HISTOGRAM OF FREE EXTENT SIZES:
Extent Size Range : Free extents Free Blocks Percent
4K... 8K- : 3955 3955 0.06%
8K... 16K- : 3495 8194 0.13%
16K... 32K- : 2601 13165 0.20%
32K... 64K- : 2622 28991 0.45%
64K... 128K- : 2565 58267 0.90%
128K... 256K- : 1576 71371 1.11%
256K... 512K- : 1331 118346 1.83%
512K... 1024K- : 1058 190532 2.95%
1M... 2M- : 1202 444210 6.89%
2M... 4M- : 1211 884489 13.71%
4M... 8M- : 1249 1803998 27.97%
8M... 16M- : 622 1643226 25.48%
16M... 32M- : 198 1024999 15.89%
32M... 64M- : 16 163082 2.53%
正如您所看到的,没有可以提供 128M(或更多)空间的免费连续块,这就是为什么他们在 wiki 上写道您可以拥有“最多”128M 的扩展。
我不确定为什么相关文件有 10 个范围,因为仍然有 16 个至少为 32M 的块。