Команда 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Гб без фрагментации.