§ Файловая система для Linux

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

На самом деле Linux поддерживает огромное количество различных и всевозможных файловых систем. Каждый раз читая список из более чем двух десятков разный FS по спине бегут муражки, дескать "божечки мои вот это выбор"! На самом деле все не настолько хорошо, о чём я и хочу рассказать.

Из всего числа поддерживаемых систем для нормальной работы от файловой системы необходима поддержка UNIX-прав, и очень желательна поддержка атрибутов. А это сразу выкидывает из списка все системы не предназначенные для UNIX типа NTFS, FAT32, exFAT и тд. Так-же есть большая часть систем имеющих неполную реализацию, таких как ZFS, BRTFS, HFS и тд, другая часть FS все ещё находятся в состоянии активной разработки, например F2FS, или в заброшенном состоянии по разным причинам как RaiserFS. В сухом остатке для работы мы имеем как правило довольно скромный набор файловых систем сводящийся к следующему списку: EXT4, XFS, JFS, RaiserFS а так же некоторые дистрибутивы предлагают BTRFS несмотря на то, что она всё ещё в активной разработке.

По большому счёту основная борьба за умы идёт между EXT4, BTRFS и XFS, так как именно они являются объектами так называемой Тирании Умолчаний (Tyranny of the Default), это обозначает что большинство пользователей доверяются выбору по умолчанию, не отдавая должного внимания выбору FS и применимостью для конкретных задач.

Как бы там ни было каждая из описанных выше систем имеет свои плюсы и минусы, о которых я хочу рассказать.

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

BTRFS - хоть и довольно новая система, так же содержит большое количество сомнительных функций например создание снапшотов или томов внутри FS. Из-за богатого функционала данная система известна как одна из самых медленных систем для Linux, и судя по довольно запутанному и сложному коду в ядре Linux - эта ситуация врядли изменится в ближайшее время. Более того я использовал эту систему в течении довольно длительного времени, и могу сказать что иногда она требует ручного восстановления после краха с использованием собственных инструментов. Крах никогда не приводил к потере данных, однако абсолютно безпроблемной эту систему я бы не назвал, так как после перезагрузки вы можете оказаться перед необходимостью очистки журнала FS и её восстановления.

EXT4 - на фоне конкурентов выглядит довольно неплохо. Она быстра, стабилна, её очень сложно поломать, и она очень быстро восстанавливается без ручного вмешательства. За всё время использования я ни разу не терял данные после неправильного останова, и не припомню что бы видел крах этой файловой системы на ровном месте без повреждения физичесского носителя. Однако я не очень люблю эту систему по ряду причин:

Во-первых она довольна губительна для USB-флешек, так как журнал ext4 находится на одном и том-же физическом месте, и любые изменения на FS пишутся в журнал, это приводит к быстрому износу части флешки на которой находится журнал, и как результат флешку можно будет выбрасывать после довольно непродолжительного использования. Если вы решили использовать ext4 для USB-флешки, необходимо принудительно отключать журнал, однако тогда успешное восстановление не гарантируется.

Во-вторых, сейчас передо мной лежит жёсткий диск объемом 1Tb, который система распознаёт как 931Gb. Я форматирую этот диск в разные FS и смотрю сколько места по умолчанию съедает служебная информация на диске, итак вот цифры для 931Gb диска:

NTFS - 93Mb

XFS - 465Mb

JFS - 273Mb

BTRFS - 112Kb

EXT4 - 14.81Gb (!!!)

Как вам такие цифры? Я не занимался тонкой настройкой, а просто форматировал используя mkfs без всяких флагов, при этом форматирование в EXT3/4 занимает ощутимо больше времени.

Я понимаю что эти цифры не вполне адекватны, так как при заполнении дисков журналы всех систем начнут расти, и в случае с EXT4 (вероятно) этот журнал будет расти ощутимо меньше или не будет расти совсем, однако на мой взгляд довольно странно иметь почти 15Gb занятыми на свежеотформатированной партиции без файлов.

JFS.

Не так давно я начал использовать JFS для своих хранилишь, и могу сказать что даже несмотря на все свои маленькие недостатки данная система произвела на меня очень большое и приятное впечатление. Итак о плюсах:

  • Очень быстрая. Во многих тестах она обходит и EXT4 и XFS,
  • Требует значительно меньших затрат CPU, и прекрасно подходит для работы с dm-crypt
  • Не имеет предела inodes, так как создаёт их по мере наполнения FS, фактически вы никогда не столкнётесь с проблемой когда на диске ещё 30% свободного места, но вы не можете его использовать потому что нет свободных inodes что бы записать сведения о новом файле (довольно распространённая проблема в EXT4, и едиснтвенное решение - это полностью форматировать заново, с указанием большего количества inodes)
  • Очень быстрое восстановление после краха, и у меня не требовала ручного вмешательства ни разу. Восстановление обычно занимает пару секунд.
  • После краха вы можете потерять изменения, однако не сами файлы. Это большой плюс по сравнению с XFS, хотя журналирование в JFS и XFS очень похожи.
  • Прекрасно работает как с HDD так и с SDD (полная поддержка TRIM)
  • Была разработана IBM

Но есть и минусы:

  • На данный момент JFS развивается довольно медленно.
  • Grub имеет проблемы с чтением конфигурационных файлов с JFS (насколько я помню XFS тоже) так что может потребоваться доработка напильником.

Сейчас я использую JFS для хранения больших объёмов данных (напрмиер qcow2 образов дисков, видео или аудио). За всё время использования я пока не столкнулся с какими либо серьёзными ограничениями этой системы, поэтому могу порекомендовать её для повседневного использования в большом спектре задач, в том числе и на десктопе.


comments powered by Disqus