Это старая версия документа.
Ext4 — журналируемая файловая система, предлагаемая для использования по умолчанию иссталятором Ubuntu, начиная с версии 9.10. Количество индексных дескрипторов (i-node) задается только при создании ФС и в дальнейшем может быть только уменьшено1). При создании ФС приблизительно 1,8% объёма диска занимается служебными структурами ФС 2), в дальнейшем размер этих данных увеличиваться будет только на размер каталогов файлов. Кроме того еще 5% (по умолчанию) резервируется для root 3). Как и в других ФС, используемых в Linux, регистр в именах файлов имеет значение, то есть «Документ.txt» и «документ.txt» — это разные файлы, и они без проблем могут находиться в одной директории.
В отличии от Ext3 в Ext4 пространство под файлы выделяется экстентами (extent - последовательная цепочка блоков, для идентификации которой используется только указатель на начало и длинна в блоках, тогда как при выделении блоками в Ext2/3 требовалось перечислять все блоки, в которых размещен файл).
Дефрагментация
ФС в Linux изначально спроектированы так, чтобы файлы фрагментировались как можно меньше. Тем не менее, фрагментированность файлов имеет место быть, и в некоторых случаях может привести к заметному падению производительности дисковой подсистемы.
Вопреки расхожему мнению, дефрагментатор для Ext4 есть, и не один.
- Defrag. Дефрагментатор от Кона Коливаса. Случаются перерывы в разработке, но проект живой, в 2010 появился PPA-репозиторий:
ppa:e2defrag/ppa
. - Shake. Онлайн-дефрагментатор, PPA-репозиторий:
ppa:un-brice/ppa
.
e2fsprogs
Скачаем из 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
запускаем дефрагментацию:
cd misc sudo ./e4defrag /dev/<xxx>
где <xxx> - имя раздела, например, sda4
проверяем последнюю строчку вывода (должно быть ⩽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
Ссылки
- дефрагментация ext4 — статья на форуме
- Outline of Ext4 File System & Ext4 Online Defragmentation Foresight (англ., pdf) — презентация от Akira Fujita
- All about ureadahead - Ubuntu Forums — Scott James Remnant о нужности дефрагментации.
- git.kernel.org — коммит в ядро, добавляющий поддержку дефрагментации Ext4.