Команда e2freefrag

Команда e2freefrag используется для задействования одноименной утилиты, предназначенной для вывода информации о свободном пространстве файловых систем ext2/ext3/ext4. Данная утилита при формировании вывода активно использует понятие так называемых экстентов — массивов последовательных дисковых блоков. Экстенты являются неотъемлемой частью упомянутых файловых систем и используются для сокращения объема метаданных — на уровне файловой системы вместо списка адресов всех относящихся к файлу дисковых блоков хранятся адреса первого и последнего блоков, образующих экстент. Таким образом, утилита позволяет оценить наличие свободного места для хранения файлов определенных размеров без фрагментации. Она может пригодиться в том случае, если вам нужно сохранять файлы определенного размера и избегать при этом их фрагментации для максимального быстродействия ФС.

Базовый синтаксис команды выглядит следующим образом:

# e2freefrag [параметры] устройство

В случае использования команды без параметров будет осуществляться вывод информации о свободном месте указанного дискового устройства. Если вы хотите оценить количество свободных массивов дисковых блоков (экстентов) для хранения файлов указанного размера, вы можете воспользоваться параметром -c и указать размер файла в килобайтах (размер должен быть степенью двойки, то есть 1 Гб = 1024 Мб = 1048576 Кб). Для вывода информации об использовании утилиты следует использовать параметр -h. Других параметров утилита не поддерживает, что, впрочем, не мешает ей выполнять свои задачи.

Примеры использования

Получение списка разделов с поддерживаемыми ФС

Для того, чтобы использовать рассматриваемую утилиту, для начала следует выбрать разделы, в рамках которых она будет корректно функционировать. Для этой цели может использоваться утилита lsblk:

$ lsblk -o NAME,FSTYPE,MOUNTPOINT
NAME   FSTYPE   MOUNTPOINT
sda
├─sda1
├─sda5 swap
├─sda6 xfs
├─sda7 ext4
├─sda8 ext4
└─sda9 ext4
sdb
├─sdb1
├─sdb2 ext4
├─sdb3 ext4
├─sdb5 swap     [SWAP]
├─sdb6 ext4
├─sdb7 ext4
└─sdb8 ext4     /
sdc    ext4
sdd
├─sdd1 swap
├─sdd2 ext4
└─sdd4 ext4     /home
sde    vfat     /media/alex/sd card

Устройства с метками ext2/ext3/ext4 подходят для анализа с помощью рассматриваемой утилиты.

Оценка свободного места ФС

Для оценки свободного места ФС ext4 достаточно использовать утилиту без каких-либо параметров. При этом файловая система может быть смонтирована — операция будет осуществлена в онлайн-режиме:

# e2freefrag /dev/sdc
Device: /dev/sdc
Blocksize: 4096 bytes
Total blocks: 122096646
Free blocks: 42215664 (34.6%)

Min. free extent: 4 KB
Max. free extent: 2064256 KB
Avg. free extent: 9012 KB
Num. free extent: 18730

HISTOGRAM OF FREE EXTENT SIZES:
Extent Size Range :  Free extents   Free Blocks  Percent
     4K...    8K- :          2706          2706    0.01%
     8K...   16K- :          1809          4237    0.01%
    16K...   32K- :          2398         12021    0.03%
    32K...   64K- :          2387         25467    0.06%
    64K...  128K- :          1830         40218    0.10%
   128K...  256K- :          1339         59455    0.14%
   256K...  512K- :          1298        115782    0.27%
   512K... 1024K- :          1298        237322    0.56%
     1M...    2M- :          1482        545837    1.29%
     2M...    4M- :          1147        805171    1.91%
     4M...    8M- :           745       1047731    2.48%
     8M...   16M- :            49        135635    0.32%
    16M...   32M- :            11         60192    0.14%
    32M...   64M- :            20        190143    0.45%
    64M...  128M- :           138       3264045    7.73%
   128M...  256M- :             1         63456    0.15%
   256M...  512M- :             1         66407    0.16%
   512M... 1024M- :             2        405236    0.96%
     1G...    2G- :            69      35134603   83.23%

Для примера была использована файловая система /dev/sdc. Утилита вывела информацию о размерах наибольшего и наименьшего свободного экстента («Min. free extent» и «Max. free extent»), среднем размере свободного экстента («Avg. free extent») и количестве свободных экстентов («Num. free extent»).
Кроме того, она вывела гистограмму размеров свободных экстентов. В столбце «Extent Size Range» приводятся диапазоны размеров экстентов, с столбце «Free extents» — количество экстентов с размерами из диапазона, в столбце «Free Blocks» — количество доступных для них свободных дисковых блоков, а в столбце «Percent» — процент соответствующих блоков.

Оценка наличия свободных экстентов заданного размера в ФС

Утилита может выводить информацию о наличии свободных экстентов заданного размера в ФС. Для этого следует использовать параметр -c и передать утилите необходимый размер экстента. Давайте оценим наличие в ФС свободных экстентов размером в 1 Гб (1048576 Кб):

# e2freefrag -c 1048576 /dev/sdc
Device: /dev/sdc
Blocksize: 4096 bytes
Total blocks: 122096646
Free blocks: 42215664 (34.6%)

Chunksize: 1073741824 bytes (262144 blocks)
Total chunks: 466
Free chunks: 67 (14.4%)

Min. free extent: 4 KB
Max. free extent: 2064256 KB
Avg. free extent: 9012 KB
Num. free extent: 18730

HISTOGRAM OF FREE EXTENT SIZES:
Extent Size Range :  Free extents   Free Blocks  Percent
     4K...    8K- :          2706          2706    0.01%
     8K...   16K- :          1809          4237    0.01%
    16K...   32K- :          2398         12021    0.03%
    32K...   64K- :          2387         25467    0.06%
    64K...  128K- :          1830         40218    0.10%
   128K...  256K- :          1339         59455    0.14%
   256K...  512K- :          1298        115782    0.27%
   512K... 1024K- :          1298        237322    0.56%
     1M...    2M- :          1482        545837    1.29%
     2M...    4M- :          1147        805171    1.91%
     4M...    8M- :           745       1047731    2.48%
     8M...   16M- :            49        135635    0.32%
    16M...   32M- :            11         60192    0.14%
    32M...   64M- :            20        190143    0.45%
    64M...  128M- :           138       3264045    7.73%
   128M...  256M- :             1         63456    0.15%
   256M...  512M- :             1         66407    0.16%
   512M... 1024M- :             2        405236    0.96%
     1G...    2G- :            69      35134603   83.23%

Вывод утилиты аналогичен приведенному выше за исключением трех строк. В строке «Chunksize» выводится переданный утилите размер экстента в байтах и дисковых блоках, в строке «Total chunks» — общее количество экстентов заданного размера, а в строке «Free chunks» — количество свободных экстентов заданного размера, что является наиболее важным. Таким образом, имеется возможность сохранить на данном диске как минимум 67 файлов размером в 1Гб без фрагментации.