четверг, октября 26, 2006

x0pkins

 Некто x0pkins выдал на форуме гениальную фразу, которую можно сразу отправлять "на золото":

В своей жизни ненавижу три вещи: отходняки, водку и iptables.

Немножко о файловых системах

Поговорим о дисковых файловых системах. Сетевые и ФС спецназначения трогать не будем.
Наиболее популярна сегодня NTFS (New Technology File System, используется NT-based OS). Потому как на нее встают те самые потомки ВинНТ - 2000, ХР, Виста. Почему НТФС? Во-первых, неплохая работа с метаданными, а следовательно, быстрые индексация и поиск, увеличивается скорость доступа к файлам. А во-вторых - журналирование, то есть ведение системой журнала о произведенных криворуким пользователем действиях. Данные о таких изменениях хранятся в отдельной части ФС.
А еще вышла совсем бета-версия файловой системы WinFS. Причем расшифровывается это не как Windows File System, а как Windows Future Storage. Во-первых, она будет распространяться как плагин к NTFS, во-вторых, она на NTFS и основана. WinFS разрабатывается как инструмент для поиска по файловой системе - она базируется на базе данных и описывает структуру ФС при помощи XML.

Но это для Виндовс. Виндовс еще может работать на FAT32, но из-за жестких ограничений на размер файла (не более 4-х Гиб), ограничений на длину имени файла, медленной работы и прочих прелестей мы не будем ничего рассказывать о FAT32.

Поговорим о более универсальных файловых системах.

Первой файловой системой для OS GNU/Linux была ext. Но это было очень давно и в общем неправда. Вообще-то первой ФС для Линукса была ФС minix, но она имела ограничение - не более 64 Миб на раздел. Все остальные недостатки перед этим как-то меркнут - например, ограничение на имя файла, всего 14 байт. Правда, и в ext максимальный размер раздела и файла был 2 Гиб, но все же это намного лучше, чем 64 Миб.

Однако же в 1993 году появилась ext2, которая представляла из себя не просто полноценную файловую систему, но буквально эталон, хотя и она не была журналируемой. ext2 могла делать временные метки модификации объектов, поддерживала атрибуты файловой системы (в отличие от остальных своих коллег по цеху), выглядела как сеть, то есть, скажем, один файл мог принадлежать сразу нескольким директориям. Было еще много всего... Позднее появилась ext3, которая отличалась только тем, что стала наконец-то журналируемой, и вот буквально пару недель назад в ядро Линукс была включена экспериментальная поддержка ext4. ext4, как заявляет программист Эндрю Мортон, поддерживает разделы размером до 1 экзабайта (это просто дофига), новый механизм записи файлов и что-то еще. В общем, видно будет.
Моей любимой файловой системой (хотя это очень субъективно) является ReiserFS версии 3. Тут надо сказать пару слов о создателе. Ганс Томас Рейзер в 1997 году разработал и внедрил свою ФС, будучи главой конторы Namesys. Был принят в Университет Беркли (привет, БСД) в 15 лет, получил там кучу знаний и степень бакалавра всяких наук, но разработка ФС плохо повлияла на его головной мозг. 10 октября этого года, одновременно с объявлением о выходе в свет ext4 Рейзер был арестован по обвинению в убийстве собственной жены, Нины Рейзер. Но не будем о грустном.
ReiserFS - первая журналируемая ФС, включенная в ядро Линукс, она стандартна для многих дистрибутивов (Слакварь, Ксандрос и т.д.). К слову сказать, Сьюзи отказалась от использования РейзерФС по умолчанию. Удача явно отворачивается...
Фрагментация ReiserFS стремится к нулю, однако дефрагментировать ReiserFS невозможно, ибо дефрагментации она не поддается. Невероятно полезная функция ReiserFS (для серверов, естественно - домашнему пользователю оно ни к чему, только ресурсы жрет) - сжатие хвостов, tail packing, то есть упаковка небольших, размером менее 4 Киб, файлов в один блок. Кроме того, разработчики (бедный Ганс...) хвастаются журналированием. Reiser4, которая в данный момент находится на тестовом периоде развития, заявляется как самая быстрая ФС для ОС ГНУ/Линукс, имеет т.н. "атомарную структуру", "танцующие дерева", основана на плагинах, blah-blah-blah, в общем, пока ей пользоваться не рекомендуется, хотя возможность есть. Сыровата она еще, короче.

Почитать о всех возможностях и ТТХ РейзерФС можно на сайте Namesys - namesys.com.

XFS была создана в 1993 году, использование ее началось в 1994, в мае 2001 года она была "выброшена" под GNU GPL. XFS предназначена для операционной системы IRIX, которая стоит на Силиконах, но прекрасно работает и с GNU/Linux, и с *BSD-системами. Меня лично в ней смущает невозможность восстановления удаленных файлов, ибо удаляет она их сразу и намертво. Впрочем, это дисциплинирует пользователя - головой надо думать. Зато она вполне себе 64-битная, можно менять размер раздела "на лету", правда, только в сторону увеличения, мощно оптимизирована работа с RAID-массивами и еще куча всего. Кроме того, XFS журналирует только метаданные - *очень* разумный шаг со стороны м-ра Тосатти; это значительно ускоряет работу ОС.

Ввиду полного отсутствия вменяемого описания XFS наш соотечественник как раз такое и написал, читать здесь.

Да, к слову о журналируемости. Журналируемая файловая система в переводе на английский - Journaling file system, или JFS. JFS - ФС для ОС AIX, разработана IBM. Потом на ней работала полуось, затем поддержка JFS появилась и в Линуксе.

Немножко конкретики, помимо того, что моя любимая система - РейзерФС.
Не имеет смысла сравнивать ФС для Винды с ФС, предназначенными для ОС GNU/Linux.
Они не взаимозаменяемы.
Кроме того, мое личное мнение таково. Я довольно долго использовал ext2, затем перешел на ext3 и, наконец, остановился на reiserfs3. Обьясняю. Файл размером 600 Миб с ext3-раздела на ext3-раздел копируется около полутора минут, с reiserfs на reiserfs – 30 секунд.
Однако повторюсь – это мое мнение. На ЛОРе по этому поводу был спор, где высказывались как мнения, аналогичные моему, так и диаметрально противоположные. Сам спор, кстати, возник по поводу теста различных ФС.
Клятвенно обещаю лично протестировать каждую из указанных ФС, о чем и сообщить общественности.