20090312

Стоит ли переходить на Ext4?

Я вообще скептически отношусь ко всяким новым файловым системам. Видимо, сказывается то, что когда-то очень давно потерял данные на ReiserFS. А в линуксе, как известно, грядут Ext4 и btrfs. Знаю я о них мало, разве что слышал. Как я понимаю, основные достоинства Ext4 — возможность создавать файлы по 16 терабайт и создавать до 32000 подкаталогов в каждом каталоге. Мне, честно говоря, этого пока не надо. А ещё обещается более быстрая работа по сравнению с Ext3. Ну ещё что-то вроде дефрагментации на лету. Однако, тут открылись интересные подробности.

В дискуссии на слэшдоте и в баг-репорте убунту обсуждается, что мол при использовании ext4 у многих приложения (в частности, KDE) теряются фрагменты файлов. Разработчики ext4 разрулили вопрос, объяснив, что разработчики приложений (кроме Emacs) сами виноваты, мол надо перед закрытием любого файла обязательно вручную fsync вызвать, потому что...

А потому что в Ext4 после закрытия файла до фактической записи данных на диск может проходить до 150 секунд! (две с половиной минуты!). И если в этот период компьютер выключится (или сломается ядро, или возникнет ещё какая-та ситуация, которая может помешать записи данных), то данные будут полностью или частично потеряны. К слову сказать, в Ext3 запись данных тоже отложенная, но в Ext3 этот период — разумные 5 секунд.

Так что обсуждаемая проблема вроде и не проблема Ext4 как таковой, но такая «фича», которую надо иметь в виду.

Исходя из этого, вот какое у меня сложилось мнение:

1) время задержки записи 150 секунд для домашнего/настольного применения неприемлимо: мне вот не раз приходилось сохранять результаты за несколько секунд до разряда аккумулятора, да и работа с ИБП для меня всегда была скорее исключением, чем правилом; при домашнем/настольном использовании очень высока вероятность, что закрыв одно приложение, пользователь откроет какое-нибудь другое, которое может создать препятствия своевременной записи на диск (скажем, забьёт весь ввод-вывод проверкой торрентов или захватом видео), а также высока вероятность, что за эти 2,5 минуты пользователь успеет что-нибудь такое в машину засунуть, что вызовет аппаратный сбой (скажем, воткнёт PCMCIA или USB устройство со сбойным драйвером);

2) авторы многих приложений ещё не скоро (если вообще когда-нибудь) станут перезаписывать файлы «грамотно», как в Emacs, c fsync и переименованием; предложение же всем мелким утилиткам и скриптам полагаться на транзакционные хранилища (BerkleyDB, SQLite, реляционные СУБД) тоже утопично и совсем не в духе unix; так что ещё долго при использовании Ext4 следует ожидать сбоев и потери данных во всех файлах, которые только были открыты за последние две с половиной минуты;

3) преимущества ext4 при больших объёмах данных скорее всего ещё не один год будут малоактуальны для домашнего пользователя; а возможный выигрыш в отзывчивости не стоит риска потери данных;

4) ни в коем случае не следует пытаться использовать Ext4 на внешних устройствах (USB-дисках и им подобным), которые могут быть внезапно отключены от системы.

Так что я лично торопиться с разными Ext4/Btrfs пока не буду. И друзьям не посоветую. Думаю, первые годы их пользователи шеи себе наломают. А использовать эти системы нужно лишь там, где они действительно нужны. Ну вот, скажем, там, где есть файлы по 16 терабайт. Где есть ИБП и дизель-генераторы. Где в компьютер не засовывают 10 раз на дню новое железо.

PS. Да, я думаю, время задержки записи, вероятно, можно настроить. Однако есть ли смысл, если Ext3 и так неплохо работает?