Настраиваем файловые системы FreeBSD


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

Чем обусловлена необходимость этого занятия? Впервые столкнувшись с FreeBSD после общения, например, с Linux, обращаешь внимание на относительно низкое быстродействие операций с файлами. Особенно если приходится копировать/удалять/перемещать большое количество файлов, небольших по объему. Говорят, это врожденная особенность файловой системы UFS. Каковая, однако, поддается терапии, на что обратил мое внимание Павел Кайгородов (пользуясь случаю, выражаю ему свою признательность).

Так вот, с целью оптимизации действий над файлами во FreeBSD предусмотрена опция под названием soft updates. Это модификация кода UFS, ускоряющая ее работу и одновременно делающая файловую систему более устойчивой к сбоям (при пропадании питания, например). Она требует, чтобы ядро системы было собрано с ее поддержкой. Впрочем, опция эта по умолчанию включена в ядро GENERIC, создаваемое при инсталляции системы в виде строки

options SOFTUPDATES

в файле конфигурации ядра /usr/src/sys/i386/conf/GENERIC (отдельный разговор о котором - впереди). Однако, поскольку считается, что soft updates требует повышенного расхода памяти, по умолчанию в установленной впервые системе опция эта не активизирована. Что и надлежит исправить некими действиями.

Какими? Перво-наперво, активизировать soft updates можно только для размонтированных файловых систем. Полезно посмотреть, какие из них смонтированы в данный момент и какие устройства в каталоге /dev им соответствуют. Это делается, например, командой mount. Запущенная без параметров, она даст картину вроде

/home/alv=>>mount

/dev/ad0s1a on / (ufs, local)

/dev/ad0s1g on /home (ufs, local)

/dev/ad0s1f on /usr (ufs, local)

/dev/ad0s1e on /var (ufs, local)

procfs on /proc (procfs, local)

И тут самое время вспомнить, что в заметке про инсталляцию FreeBSD я предупреждал о целесообразности создания отдельного корневого раздела (/) и самостоятельных разделов /usr и /home. Ведь даже если и удастся размонтировать корневой раздел (я, честно говоря, не знаю, как), система, очевидно, полностью утратит работоспособность, и никакие дальнейшие манипуляции с ней будут невозможны.

А так - мы спокойно даем команду

umount -Af

где параметр A предписывает размонтирование всех файловых систем, кроме корневой, а параметр f - определяет принудительность этого процесса: без него, скорее всего, последует сообщение о невозможности размонтирования, так как какое-либо из имеющихся устройств наверняка используется.

Затем начинаем активизировать опцию soft updates. Для этого дается команда

tunefs -n enable /dev/ad0s1e

где /dev/ad0s1e - имя устройства, для которого требуется включить soft updates, например, /var. Далее команда эта повторяется для систем /usr и /home. После чего выполняем обратное монтирование всех файловых систем, определенных в файле /etc/fstab

mount -a

Наконец, снова запускаем команду mount без параметров и имеем удовольствие наблюдать, что на всех системах, кроме корневой, опция soft updates благополучно включена:

/home/alv=>>mount

/dev/ad0s1a on / (ufs, local)

/dev/ad0s1g on /home (ufs, local, soft-updates)

/dev/ad0s1f on /usr (ufs, local, soft-updates)

/dev/ad0s1e on /var (ufs, local, soft-updates)

procfs on /proc (procfs, local)

Обращаю внимание на то, что для вступления изменений в силу не требуется перезагрузки системы. И, что характерно, после выполнения таковой изменения сохраняются. Так что в одном сеансе работы можно сколько угодно включать и выключать soft updates для любой файловой системы, кроме корневой.

Разумеется, soft updates можно активизировать и для корневой (/) файловой системы, или для единственного раздела (partition) в пределах слайса, буде таковым мы ограничились при инсталляции системы. Однако для этого нужно загрузиться с инсталляционного CD и в меню программы sysinstall выбрать опцию fixit (перед чем не худо озаботиться созданием соответствующей дискеты). Поскольку при этом все имеющиеся на винчестере разделы оказываются размонтированными, команду

tunefs -n enable /dev/ad0s1*

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

Конечно, сама по себе процедура перезагрузки не сложна. Однако при этом следует озаботиться созданием специальной дискеты fixit (или соответствующего CD): стандартный вариант ее программы tunefs не содержит, и разместить ее там простым способом не удается. А главное, в этом случае исчезает возможность включать/выключать soft updates по желанию в течении одного сеанса работы. Что может понадобиться, например, для освобождения ресурсов системы или, напротив, для увеличения быстродействия файловых операций, в зависимости от сиюминутной задачи.

Что реально дает активизация soft updates? Это легко проиллюстрировать на примере копирования каталога, включающего вложенные подкаталоги с большим количеством различных по размеру (от пары Кбайт до 50-100 Мбайт), и последующего уничтожения копии. Результаты такого эксперимента для каталога с содержимым, суммарный объем которого превышает 4 Гбайт, приведены в таблице 1.

Таблица 1. Быстродействие операций над очень большим количеством различных по размеру файлов Операция soft upadtes disable, мин soft upadtes enable, мин

Копирование 15 9

Уничтожение 3 1

Можно видеть, что в результате нехитрого действа производительность FreeBSD при выполнении типичных файловых операций возрастает в полтора-три раза.

Еще более впечатляющая картина вырисовывается при действиях с большим количеством мелких (от первых килобайт до 100-120 Кбайт суммарным объемом около 15 Мбайт. В этом случае (табл. 2) превосходство в быстродействии при включении soft updates - более чем четырехкратное при копировании и более чем на порядок - при удалении.

Таблица 2. Сравнительное быстродействие файловых операций под FreeBSD и Linux Система FreeBSD с SU FreeBSD без SU Linux

Копирование, с 8,5 30 5,7

Удаление, с менее 1 11 менее 1

Легко видеть, что при включении soft updates быстродействие файловых операций во FreeBSD становится сопоставимым с таковым в Linux. Для полноты картины следует отметить, что результаты табл. 2 были получены на машинах, идентичных по всем компонентам, за исключением материнской платы. При измерениях для Linux в качестве таковой выступала Abit SE6 (чипсет i815e с поддержкой ATA/100). В системе на FreeBSD использовалась MSI 6326 (чипсет 815, поддерживающий только ATA/66). А учитывая традиционную ориентированность плат Abit на оптимизацию по быстродействию, различие в скорости копирования менее чем в 3 секунды нельзя считать значимым.

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

Обновлено: 12.03.2015