Выбор файловой системы для флешки или Слово об NILFS2
Недавно купил новую флешку на 32 Гб специально с целью установить на ее Arch Linux и получить тем самым возможность работать в любом месте в привычной системе со всеми настройками и решить проблему синхронизации своих файлов. Отформатировал ее сначала в ext4, перенес на нее Linux, но когда начал использовать, обнаружилось, что система периодически подтормаживает на одну-две секунды, когда идет запись на флешку. Причем тормозит полностью, то есть в эти моменты не работает даже ввод с клавиатуры, что крайне мешает при наборе текстов. (Что любопытно, на старой флешке на 8 Гб ничего такого не наблюдалось, несмотря на то, что она выпущена 7 лет назад и по линейным скоростям чтения/записи однозначно проигрывает новой.) Стал думать, что можно сделать, решил поэкспериментировать с различными файловыми системами.
Эксперимент проводился следующим образом: флешка форматировалась в выбранную файловую систему, после чего измерялось время копирования на нее всего содержимого моего домашнего каталога (это где-то 2.9 Гб файлов разного размера: от килобайта до нескольких десятков мегабайт, возможно, есть один или два файла в сотню). После этого измерялось время обхода всего домашнего каталога утилитой find, причем делалось это два раза. В результате получились следующие результаты:
Файловая система | Время записи | Первый обход утилитой find | Второй обход утилитой find |
---|---|---|---|
Ext4 с настройками по умолчанию | 7:53.9 | 13.5 | 12.5 |
Ext4 без журнала и с noatime | 7:51.2 | 13.2 | нет данных |
Ext2 с noatime | 8:37.1 | 45.47 | 12.4 |
XFS с настройками по умолчанию | 6:12.1 | 12.46 | 12.42 |
NILFS2 с noatime | 4:52.9 | 13.4 | 12.4 |
NILFS2 (повторный тест) | 4:45.4 | 13.2 | 12.4 |
Таким образом, видно, что NILFS2 значительно выигрывает по времени записи, и показывает сопоставимые результаты с Ext4 по скорости чтения. Кроме того, в NILFS2 запись делается так, что более-менее равномерно задействуются все ячейки памяти флешки, что должно продлевать срок ее жизни (хотя подозреваю, что у меня новая флешка с контроллером, который обладает аналогичными функциями, поэтому на самом деле это неактуально). Кроме того, в NILFS2 имеется возможность смонтировать файловую систему по состоянию в предыдущей контрольной точке, что в определенных ситуациях может помочь с восстановлением данных. И в результате я выбрал именно эту файловую систему.
В целом за месяц пользования файловой системой я доволен. Работает быстро, тормозов, как на ext4, не наблюдается. Кроме того, она более экономна по памяти: после перехода с ext4 на NILFS2 после загрузки системы использованными оказываются 75 Мб памяти вместо 81. Но есть две особенности, которые нужно учитывать. Первая — это отсутствие fsck, вторая — необходимость проводить сборку мусора с помощью специальной утилиты /sbin/nilfs_cleanerd, иначе количество свободного места на диске начинает определяться неправильно.
Кроме этого, я провел еще одну небольшую оптимизацию: /tmp, /var/log монтируются на tmpfs, т.е. файловую систему в памяти, а не на флешке. Во-первых, так получается меньше записей на флешку, во-вторых, не расходуется место на диске, которого все-таки не так уж и много. Туда же (с помощью symlink на /tmp) я вынес каталоги кеша броузеров.