Это старая версия документа.


Ext4 — журналируемая файловая система, предлагаемая для использования по умолчанию иссталятором Ubuntu, начиная с версии 9.10. Количество индексных дескрипторов (i-node) задается только при создании ФС и в дальнейшем может быть только уменьшено1). При создании ФС приблизительно 1,8% объёма диска занимается служебными структурами ФС 2), в дальнейшем размер этих данных увеличиваться будет только на размер каталогов файлов. Кроме того еще 5% (по умолчанию) резервируется для root 3). Как и в других ФС, используемых в Linux, регистр в именах файлов имеет значение, то есть «Документ.txt» и «документ.txt» — это разные файлы, и они без проблем могут находиться в одной директории.
В отличии от Ext3 в Ext4 пространство под файлы выделяется экстентами (extent - последовательная цепочка блоков, для идентификации которой используется только указатель на начало и длинна в блоках, тогда как при выделении блоками в Ext2/3 требовалось перечислять все блоки, в которых размещен файл).

Дефрагментация

ФС в Linux изначально спроектированы так, чтобы файлы фрагментировались как можно меньше. Тем не менее, фрагментированность файлов имеет место быть, и в некоторых случаях может привести к заметному падению производительности дисковой подсистемы.

Вопреки расхожему мнению, дефрагментатор для Ext4 есть, и не один.

  • e2fsprogs. На 14.11.2010 дефрагментатора e4defrag ещё нет в текущем стабильном релизе, но он есть в git'е.
  • Defrag. Дефрагментатор от Кона Коливаса. Случаются перерывы в разработке, но проект живой, в 2010 появился PPA-репозиторий: ppa:e2defrag/ppa.
  • Shake. Онлайн-дефрагментатор, PPA-репозиторий: ppa:un-brice/ppa.

e2fsprogs

  1. Скачаем из git и соберём:

    sudo aptitude install git
    cd /usr/src
    sudo git clone git://git.kernel.org/pub/scm/fs/ext2/e2fsprogs.git
    cd e2fsprogs
    sudo ./configure
    sudo make
  2. запускаем дефрагментацию:

    cd misc
    sudo ./e4defrag /dev/<xxx>

    где <xxx> - имя раздела, например, sda4

  3. проверяем последнюю строчку вывода (должно быть ⩽0.3% non-contiguous):

    sudo fsck -n /dev/sda4

Оптимизация дискового пространства

Как вы уже заметили, на свежесозданном разделе с ext4 обычно выделяется заметно меньше свободного дискового пространства. Почему это происходит? На служебные нужды используется порядка 1,8% - под служебные структуры данных: заголовки групп блоков, бинарные поля для учета свободного места, индексные дискрипторы (i-node), основной и резервные копии суперблока. Также по умолчанию резервируется 5% от объема раздела это необходимо для нужд учетной записи суперпользователя (root) и системных служб (daemons). Обычно это полезно для системного корневого раздела, но на пользовательских разделах необходимости в этом резерве - нет, особенно на разделах небольшого размера, например 120 ГБ; где может сказаться банальная нехватка свободного места.

Давайте исправим положение.

Уменьшим процент зарезервированных блоков для нужд суперпользователя. По умолчанию резервируется 5% от объема раздела или диска: Значение 0 отключает резервирование блоков, значение 5 - устанавливает резервирование на 5%.

sudo tune2fs -m 1

Установим процент зарезервированных блоков, например 1%. Значение 0 отключает резервирование блоков, значение 5 - устанавливает резервирование на 5%.

sudo tune2fs -r 1

Ссылки

1)
хотя по умолчанию число дескрипторов задается довольно большим, но при записи огромного числа маленьких файлов возможна ситуация когда дескрипторов не хватит, а место на диске еще есть:-(
2)
в частности на i-node
3)
этот резерв можно отключить утилитой tune2fs