如何更改 ext4 文件系统中的盘区大小?

如何更改 ext4 文件系统中的盘区大小?

正如你所读到的这里,ext4 文件系统具有将块分组为盘区的盘区功能。它们每个最多可以有 128MiB 的连续空间。在 中e4defrag,有类似于以下内容的行:

[325842/327069]/file:  100%  extents: 100 -> 10   [ OK ]

文件大小约为 150MiB。因此根据 wiki 页面,应该有 2 个范围,而不是 10 个。

  1. 有谁知道为什么范围是 15MiB 而不是 128MiB?
  2. 有没有可以检查精确范围大小的工具?
  3. 如何更改大小使其变为 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 的块。

相关内容