Дефрагментация в линукс нинужна!

Что-то давно не было срывов покровов с линукса, а между тем материала, о чём написать, накопилось много.
В этой статье я расскажу вам кое-что интересное о фрагментации файлов и работе с жёсткими дисками и разделами на них в линукс.

Если воспользоваться поиском на предмет – нужна ли дефрагментация в линукс, то тысячи линукс-икспертов ответят вам, что “нинужна”, однако, при этом не найдётся ответа на вопрос – Почему?

К чему это я про дефрагментацию?
Примерно год назад я стал замечать, что мой жёсткий диск, на котором в то время ещё была установлена openSUSE, стал судорожно поскрипывать при запуске файлов больших размеров, а что творилось при просмотре папок с картинкам, так вообще караул, падение производительности стало особенно заметным при запуске виртуальных машин или копировании больших архивов с диска на флешку – скорость падала ниже 1Мб/сек, при том, что с флешки копировалось со скоростью 4Мб/сек.

Т.к. я и так замечал, что линукс работает медленнее винды на моём ПК, я не придал первоначально внимания этому, но когда проигрыватели начали заикаться при проигрывании музыки и видео после одной из переустановок openSUSE, я понял, что что-то не так.
И опыт общения с виндой подсказывал, что это произошла фрагментация файлов.

Но как сделать дефрагментацию в линукс?

Т.к. специальных программ для дефрагментации в линукс нет, есть только скрипты и некая утилита, которая переписывает файлы, при этом у обеих этих способов стоит предупреждение, что это может привести к повреждению данных на жёстком диске, я даже не стал ими пользоваться.
Я поступил иначе – скинул с линуксового жёсткого диска все свои данные на другой жёсткий диск, отформатировал линуксовый жёсткий диск, установил на него линукс заново, а потом скинул свои файлы обратно на него и всё прошло.

И вот недавно из интереса я решил проверить каково состояние моих нынешних жёстких дисков с линуксом, на этот раз вместо openSUSE на них стоят мои сборки – на одном Jeder Linux Legacy SP3 (файловая система ext3), на втором Jeder Linux 10.10 (ext4). Первый диск используется для сборки и тестирования моих дистрибутивов, а второй находится в ноутбуке и ничего серьёзного там не делается.

Как проверить жёсткий диск в линукс?

А вот тут это оказывается не так-то просто, как в Windows, даже в 21 веке программисты самой лучшей ОС и файловых систем так до сих пор и не удосужились создать вменяемые утилиты для дефрагментации.

Ну что же, деваться некуда.

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

Берём любой дистрибутив Jeder Linux, загружаемся в режиме LiveCD.
Открываете Терминал.
Меню ->Стандартные->Терминал

В терминале вводите команду:

sudo fsck -nvf /dev/sda1

Вместо sda1 подставьте наименование раздела вашего жёсткого диска в ОС

Чтобы узнать наименование раздела жёсткого диска, откройте на вашем системном жёстком диске файл etc/fstab и там запомните наименование разделов вашего жёсткого диска.

Вот такие результаты мне выдала проверка жёсткого диска ноутбука:

180248 inodes used (1.18%) - количество и процент использованных инод
562 non-contiguous files (0.3%)  – количество и процент фрагментированных файлов
142 non-contiguous directories (0.1%) - количество и процент фрагментированных папок
# of inodes with ind/dind/tind blocks: 9963/201/0
3593985 blocks used (5.89%) - количество и процент использованных блоков
0 bad blocks - количество бэд-блоков
1 large file - количество больших файлов




143360 regular files - количество постоянных файлов
17518 directories - количество директорий
2 character device files
1 block device file
0 fifos
0 links
19351 symbolic links (17040 fast symbolic links)
7 sockets

Как видим, на моём жёстком диске фрагментация составила 0,3% от всех файлов и это при том, что всё, что делалось на ПК, это были скопированы две папки с флешки, а затем из них были сделаны образы с играми и программами для будущих дистрибутивов Jeder Linux.

На втором жёстком диске, где я собираю системные образы Jeder Linux, фрагментация составляла уже 4,3%.

К слову, на жёстком диске с Windows XP, забитом файлами и прочим мусором, где дефрагментация не делалась уже два года, тогда же была поставлена и винда, фрагментация составляет 7%.

Однако, делать красноглазые выводы – вот, а в винде файловая система засирается больше – не получится, т.к. интенсивность использования дисков в обеих ОС у меня разная и в винде она больше, тем более, что на ноуте с Windows 7, который используется как игровая приставка и видеоплеер – поиграть в онлайн-игры, посмотреть кино, фрагментация составляет 0%.

Итак, факт – фрагментация в линукс есть! Значит программы-дефрагментаторы ему нужны и чем чаще вы пользуетесь вашей системой, перемещаете файлы и прочее, тем больше фрагментация.

Зачем делят диски в Linux?

Т.к. вменяемых утилит для обслуживания диска в линукс нет, это сказывается и на принципах работы и установки системы на жёсткий диск.
Никогда не задумывались над тем, почему при установке дистрибутивы линукс предлагают вам файл подкачки вынести на отдельный раздел и также на отдельный раздел вынести папку home, где будут храниться ваши файлы?

Именно! Это не из-за заботы о вас, повышения безопасности и прочего, а из-за того, что, когда вы начнёте использовать систему на полную, вы столкнётесь с фрагментацией и падением производительности файловой системы.

Я ярый противник деления жёсткого диска на части, т.к. это приводит к ускорению износа поверхности диска и повышает риск повреждения данных при отключении электричества, потому я при установке openSUSE на отдельный раздел кидал только файл подкачки, а Jeder Linux 10.10 на моём ноутбуке вообще работает без файла подкачки – на одном разделе, который занимает весь жёсткий диск, поэтому я не первый раз сталкиваюсь с проблемой фрагментации данных в линукс и падением производительности системы от этого.

Вынос по умолчанию файла подкачки и директории home на отдельные разделы затыкает проблему фрагментации данных в дистрибутиве, пусть не очень красиво, но порой очень эффективно, особенно если мы ничего не делаем на ПК, но с ростом количества и объёмов данных на жёстком диске – в первую очередь использование компьютера для бытовых целей, работе с мультимедийными данными, всё чаще сталкивается пользователь линукс с проблемой фрагментации.

Хочется тут в духе красноглазика крикнуть – вот утверждают, что винда полна костылей – но извиняйте – деление на разделы, чтобы избежать фрагментации данных и потери производительности – это тогда вообще что?

Оптимизация скорости работы файловой системы ext3/4

Но вопрос дефрагментации в линукс не единственный из-за кого производительность системы падает.
Может быть вы помните шумиху про Ubuntu и ноутбуки Dell, когда утверждалось, что убунта выводила из строя жёсткие диски на ноутбуках.
На самом деле тут есть доля истины. Дело в том, что ext3 и ext4 являются журналируемыми файловыми системами, что подразумевает, что все ваши действия с файлами записываются, а значит постоянно выполняются операции записи на диске, что ведёт к его преждевременному износу, кроме того это влияет на производительность системы.

Все дистрибутивы в линукс настроены так, чтобы работать с файловой системой в защищённом режиме, т.к. вопрос потери данных в линукс до сих пор не решён.

Всего в линукс существует три режима работы с файловой системой и данными:
1. Журналируемый режим (Journal или Data Mode) – он записывает каждый ваш шаг в системе, при операциях с данными и метаданными кэширует их на диске, но в тоже время из-за этого система медленно работает, т.к. процесс копирования происходит дважды, этот режим рекомендуется, если вы замечаете, что на вашем жёстком диске пропадают данные.
2. Журналирование по требованию (Ordered Mode) – так и не нашёл, чем он отличается от первого варианта кроме того, что кэширует только данные, но файловые системы ext3 и ext4 по умолчанию работают в этом режиме.
3. Режим обратной записи (Writeback Mode) – не безопасный режим, который повышает риск потери данных при отключении питания или аварийном завершении работы, данные не кэшируется, не проверяет файлы на целостность при запуске системы, не ведёт журнал операций. В этом режиме ваша файловая система работает с данными также, как ext2.

Третий режим рекомендуют для ноутбуков, т.к. у них есть аккумулятор, а значит проблема отключения питания для них не шибко страшна, также этот режим рекомендуют для экономии энергии и если у вас SSD диск в системе (SSD имеют ограниченное количество циклов записи/перезаписи), т.к. количество операций записи/перезаписи уменьшается, а значит уменьшается износ диска и потребление электроэнергии. По моим наблюдениям также этот режим снижает потребление оперативной памяти в системе на 5-10Мб, ускоряет загрузку и завершение работы ОС.

Чтобы переключить вашу файловую систему в один из трёх режимов, загрузитесь с LiveCD вашего дистрибутива, откройте терминал.

В терминале введите:

1. Журналируемый режим:

sudo tune2fs -O has_journal -o journal_data /dev/sda1

2. Журналирование по требованию:

sudo tune2fs -O has_journal -o journal_data_ordered /dev/sda1

3. Режим обратной записи:

sudo tune2fs -O has_journal -o journal_data_writeback /dev/sda1

Вместо sda1 подставьте наименование раздела вашего жёсткого диска в ОС

Индексация данных

Также может повысить производительность вашей файловой системы индексация содержимого папок.
Для включения индексации вам опять же надо загрузиться с LiveCD и открыть терминал.

В терминале для включения режима индексации для новых папок на диске введите команду:

sudo tune2fs -O dir_index /dev/sda1

А для включения индексации для уже существующих папок введите:

sudo e2fsck -D /dev/sda1

А что у вас?

Как я уже написал, на большом ПК у меня на отдельном диске только файл подкачки и сейчас на нём 4,3% фрагментированных данных.
Файловая система работает в режиме журналирования по требованию. За это время были несколько раз отключения электроэнергии и подвисаний системы, данные не пропали, но при этом несколько раз я замечал, что пропадают данные на внешнем жёстком диске с файловой системой ext3.
На ноутбуке файловая система ext4, файла подкачки нет, папка home на одном разделе с системой, т.е. один раздел на жёстком диске, файловая система фрагментирована на 0,3%, работает в режиме обратной записи. Используется ноут в основном как печатная машинка и для игры в Warzone и OpenArena. Потери данных не было, производительность системы после перевода файловой системы в режим обратной записи выросла, вроде бы стало минут на 20 больше хватать аккумулятора.
Индексацию на дисках я не включал.

А как у вас дела с фрагментацией и перевели ли вы вашу файловую систему в более быстрый режим работы? :)