Выбор файловой системы для флешки или Слово об NILFS2

Недавно купил новую флешку на 32 Гб специально с целью установить на ее Arch Linux и получить тем самым возможность работать в любом месте в привычной системе со всеми настройками и решить проблему синхронизации своих файлов. Отформатировал ее сначала в ext4, перенес на нее Linux, но когда начал использовать, обнаружилось, что система периодически подтормаживает на одну-две секунды, когда идет запись на флешку. Причем тормозит полностью, то есть в эти моменты не работает даже ввод с клавиатуры, что крайне мешает при наборе текстов. (Что любопытно, на старой флешке на 8 Гб ничего такого не наблюдалось, несмотря на то, что она выпущена 7 лет назад и по линейным скоростям чтения/записи однозначно проигрывает новой.) Стал думать, что можно сделать, решил поэкспериментировать с различными файловыми системами.


Эксперимент проводился следующим образом: флешка форматировалась в выбранную файловую систему, после чего измерялось время копирования на нее всего содержимого моего домашнего каталога (это где-то 2.9 Гб файлов разного размера: от килобайта до нескольких десятков мегабайт, возможно, есть один или два файла в сотню). После этого измерялось время обхода всего домашнего каталога утилитой find, причем делалось это два раза. В результате получились следующие результаты:











Результаты испытания различных файловых систем
Файловая системаВремя записиПервый обход утилитой findВторой обход утилитой find
Ext4 с настройками по умолчанию7:53.913.512.5
Ext4 без журнала и с noatime7:51.213.2нет данных
Ext2 с noatime8:37.145.4712.4
XFS с настройками по умолчанию6:12.112.4612.42
NILFS2 с noatime 4:52.913.412.4
NILFS2 (повторный тест)4:45.413.212.4

Таким образом, видно, что NILFS2 значительно выигрывает по времени записи, и показывает сопоставимые результаты с Ext4 по скорости чтения. Кроме того, в NILFS2 запись делается так, что более-менее равномерно задействуются все ячейки памяти флешки, что должно продлевать срок ее жизни (хотя подозреваю, что у меня новая флешка с контроллером, который обладает аналогичными функциями, поэтому на самом деле это неактуально). Кроме того, в NILFS2 имеется возможность смонтировать файловую систему по состоянию в предыдущей контрольной точке, что в определенных ситуациях может помочь с восстановлением данных. И в результате я выбрал именно эту файловую систему.

В целом за месяц пользования файловой системой я доволен. Работает быстро, тормозов, как на ext4, не наблюдается. Кроме того, она более экономна по памяти: после перехода с ext4 на NILFS2 после загрузки системы использованными оказываются 75 Мб памяти вместо 81. Но есть две особенности, которые нужно учитывать. Первая — это отсутствие fsck, вторая — необходимость проводить сборку мусора с помощью специальной утилиты /sbin/nilfs_cleanerd, иначе количество свободного места на диске начинает определяться неправильно.

Кроме этого, я провел еще одну небольшую оптимизацию: /tmp, /var/log монтируются на tmpfs, т.е. файловую систему в памяти, а не на флешке. Во-первых, так получается меньше записей на флешку, во-вторых, не расходуется место на диске, которого все-таки не так уж и много. Туда же (с помощью symlink на /tmp) я вынес каталоги кеша броузеров.