xandroskin blog | it or not it
На одном из серверов установлена свежая версия Ubuntu на недавно приобретенный жесткий диск, для которого в качестве базовой файловой системой была выбрана ext4. По графику процессорного времени системы мониторинга Zabbix видно, что у сервера высокий IOWait. С помощью утилит iostat и iotop были выявлены виновники столь высокой нагрузки. Ими оказались базы MySQL (активно используемые самим Zabbix‘ом) и процесс [jbd2/dm-0-8], который выполняет функцию журналирования файловой системы ext4. Причем нагрузка от второго была в разы больше, поэтому дальше будет описание процесса снижения воздействия новой файловой системы на нагрузку процессора.
Журналирование в новой файловой системе было включено не просто так, а для снижения рисков потери данных при всевозможных неожиданных сбоях в электропитании. Так как сервер, о котором идет речь в этой статье, подключен к бытовой электросети через источник бесперебойного питания, вероятность подобной проблемы крайне мала. Следовательно, можно практически безболезненно избавиться от процедуры «логирования всего и вся» в процессе работы системы.
Дисклеймер: последующие операции вы делаете на свой страх и риск, автор не несет никакой ответственности за убитые жесткие диски и потерянные важные данные.
По умолчанию в Ubuntu установлен режим journal_incompat_revoke, проверить текущее состояние можно, выполнив от учетной записи root следующую команду (указать свой раздел с ext4 вместо sdX):
Если сделать выборку по другому параметру, можно будет увидеть, ведется ли журнал:
Вывод будет содержать строку с « has_journal «, если это так.
Переводим файловую систему в режим journal_data_writeback, который оставляет журналирование лишь для метаданных и тем самым заметно ускоряет производительность файловой системы:
- Загружаемся с LiveCD/LiveUSB или любым другим способом, чтобы можно было размонтировать раздел с файловой системой, требующей внесения изменений
- Выключаем журнал:
- Меняем режим журналирования
- Запускаем проверку
- Перезагружаемся
- Проверяем, применились ли изменения, командами
Ниже представлены сравнительные графики процессорного времени и дисковых операций до и после отключения журнала:
* writeback mode
In data=writeback mode, ext4 does not journal data at all. This mode provides a similar level of journaling as that of XFS, JFS, and ReiserFS in its default mode — metadata journaling. A crash+recovery can cause incorrect data to appear in files which were written shortly before the crash. This mode will typically provide the best ext4 performance.
* ordered mode
In data=ordered mode, ext4 only officially journals metadata, but it logically groups metadata information related to data changes with the data blocks into a single unit called a transaction. When it’s time to write the new metadata out to disk, the associated data blocks are written first. In general, this mode performs slightly slower than writeback but significantly faster than journal mode.
* journal mode
data=journal mode provides full data and metadata journaling. All new data is written to the journal first, and then to its final location.
In the event of a crash, the journal can be replayed, bringing both data and
metadata into a consistent state. This mode is the slowest except when data
needs to be read from and written to disk at the same time where it outperforms all others modes. Curently ext4 does not have delayed allocation support if this data journalling mode is selected.
Как отключить журналирование файловой системы Ext4 в Linux
Ext4 — журналируемая файловая система.
Существует большое многообразие файловых систем, созданных в разное время для правильного функционирования в средах различных операционных систем. В Windows — это FAT32, NTFS, exFAT, а в С основными считаются Ext2, Ext3 и Ext4. Журналируемые ФС, как известно, позволяют без участия пользователя осуществлять ведение журнала, в котором хранится список изменений разделов жесткого диска, что определенным образом помогает поддерживать целостность файловой структуры в периоды сбоев ее работы.
Однако, этот функционал в свое время разрабатывался под стандартные жесткие диски (HDD) и именно по отношению к ним он крайне полезен, тогда как для SSD и SD-карт ситуация обратная — журналирование им скорее навредит, ведь мало того, что они имеют ограниченное количество циклов перезаписи, так еще и получается даунгрейд в производительности. Именно поэтому, решив создать на съемном устройстве раздел с файловой системой без ограничений на размер файла (в разумных пределах), следует воспользоваться возможностью отключить журналирование. Далее речь пойдет именно о том, как это сделать в Linux с картой памяти, впоследствии используемой Android-устройством.
Прежде чем отключить журналирование, давайте проведем сравнительный анализ Linux-ФС, которые с успехом применяются и в ОС Android:
Ext2 – вторая расширенная файловая система, пришедшая на замену оригинальной в 1993-м году. Она разработана с целью устранить имеющиеся в первой версии ограничения (максимальный размер файла увеличен до 2-х терабайт, а общий размер раздела — до 32-х терабайт) и не содержит функции журналирования.
Ext3 – третья расширенная, представленная в 2001-м году. Данная ФС оснащена 3-мя типами журналирования — journal, ordered и writeback, при этом в ней сохранены предыдущие максимальные показатели величины файла и раздела, а также присутствует возможность преобразования по схеме Ext2 -> Ext3 напрямую без резервного копирования и восстановления.
Ext4 — четвертая расширенная, появившаяся в 2008-м году. В ней «максимум для файла» увеличен до 16-ти терабайт, выделяемого пространства — до 1-го эксабайта, а папка может содержать максимум 64000 субдиректорий (в Ext3 — 32000). Кроме этого было внедрено несколько новых технологий, повышающих производительность и надежность в сравнении с предыдущей ревизией. В Ext4 появилась возможность выключить функцию ведения журнала, в чем, собственно, и суть данной статьи.
Вообще для съемных USB-дисков и других запоминающих устройств без «крутящихся механизмов», рекомендуется использовать Ext2, так как журналирование в ней отсутствует, а основных ее преимуществ (см. описание) хватит, как говорится, «с головой». Современные версии Android также имеют поддержку exFAT от Microsoft — в ней устранено ограничение в 4 гигабайта на один файл. Однако, эти файловые системы имеют определенные недостатки по сравнению с Ext4, проявляющиеся в более низкой производительности (Ext2) и меньшей совместимости (exFAT).
Поэтому лучше создать на внешнем накопителе Ext4-раздел и отключить журналирование в нем с помощью терминала Linux:
, где «/dev/sda5» — Ваша флешка или карта SD;
tune2fs -o journal_data_writeback /dev/sda5
переводим журнал в режим writeback;
tune2fs -O ^has_journal /dev/sda5
удалит соответствующую опцию;
выполнит проверку диска;
dumpe2fs /dev/sda5 |more
проверит активные свойства ФС (в Filesystem features не должно быть has_journal).
Перечисленные выше команды нужно выполнять с правами администратора! На начальном этапе (создание ФС) можно применить Gparted, тогда результат будет отображаться в наглядном графическом виде. При установке раздела Ext4 на MicroSD для использования в среде Android рекомендуется оставить первым FAT32-раздел, а Ext4 определить вторым, как первичный.
Предлагаю в качестве подарка скачать бесплатную книгу: причины зависаний на ПК, восстановление данных, компьютерная сеть через электропроводку и много других интересных фишек.
Еще больше интересных новостей, а главное общение, решений ваших проблем! Добавляйтесь в телеграм — https://t.me/mycompplus
Понравилась полезная статья? Подпишитесь на RSS и получайте больше нужной информации!
Как грамотно отключить журналирование в ext4?
Для продления жизни SSD диску хочется отключить журналирование в файловой системе ext4. Но при использовании:
tune2fs -o journal_data_writeback /dev/sda1
заодно отключается и режим TRIM, несмотря на прописанную опцию discard в fstab.
Подскажите пожалуйста, возможно ли отключить журналирование без таких побочных эффектов?
ext4 с журналированием (вся система + /home там). Без tmpfs. Единственное что было сделано это noop scheduler, sawpiness в 0, и правильная разметка разделов. Работает круглосуточно. Торренты качам/раздаем на нем же.
Model Family: SandForce Driven SSDs
Device Model: OCZ-VERTEX2
Power_On_Hours_and_Msec: 2579h+29m+52.800s
Lifetime_Writes_GiB: 896 (
8GiB/day)
Lifetime_Reads_GiB: 1152 (
10GiB/day)
SSD_Life_Left: 100
Fail Count все еще 0