Экспериментируем с файловой системой Btrfs — установка операционной системы Linux на SSD нетбука с компрессией файлов
В отличие от Microsoft Windows, в которой на протяжении многих лет главенствующим и практически единственным типом файловой системы является NTFS (о FAT и о об анонсированной в 2012 году ReFS говорить не будем), в Linux выбор есть. Здесь навскидку можно насчитать более десятка разновидностей файловых систем. Наиболее известными и чаще всего используемыми являются EXT2, EXT3 и, конечно, EXT4. К ним можно добавить btrfs, jfs, reiserfs и ряд других.
Идеальных файловых систем не существует. Каждая из них имеет свои сильные и слабые стороны. Сегодня мы поэкспериментируем с Btrfs, которая считается одной из самых быстрых и перспективных.
Основные особенности файловой системы Btrfs
Файловая система Btrfs (Better FS), основанная на структурах двоичных деревьев (B-Tree), была представлена компанией Oracle в 2007 году.
Перечень достоинств и возможностей btrfs весьма обширен. Перечислю те из них, которые показались мне наиболее интересными для применения на домашнем компьютере и сподвигли в конечном счете на эксперименты с этой ФС:
Наиболее полные и актуальные сведения можно посмотреть на домашней странице проекта.
Самым главным недостатком Btrfs на сегодняшний момент времени является ее статус. С одной стороны, актуальная на момент написания данной статьи версия v3.12 считается стабильной, с другой стороны, разработчики откровенно заявляют, что она все еще находится в стадии тестирования и ее не рекомендуется использовать в промышленных целях.
Получается, что при использовании ранних версий Btrsf данные пропадали нестабильно, теперь будут пропадать стабильно (шутка).
Что касается скорости, то ресурсом Phoronix еще в 2011 году были опубликованы данные производительности файловой системы Btrfs при работе без сжатия данных, со сжатием методом ZLib и со сжатием методом LZO.
В двух из трех проведенных тестов (Compile Bench и Dbench Btrfs) вариант с LZO-сжатием уверенно обогнал как вариант без сжатия, так и вариант с ZLib-сжатием. Причем в некоторых случаях разница в скорости отличалась почти на порядок (!).
В тесте Threaded IO Tester LZO проиграл и варианту без сжатия и ZLib от 10% до 33%.
Вообще измерение реальных скоростных характеристик устройства хранения является задачей непростой. Некоторое время назад я пробовал оценить влияние ntfs-сжатия на скорость чтения данных в Windows 7. Результат оказался неоднозначным, как это ни странно, зависящим от типа накопителя. Это не позволило сделать однозначных выводов.
Значительный выигрыш в скорости ФС по результатам двух тестов и незначительный провал в одном из них склоняют к решению выполнить установку операционной системы Linux на том Btrfs с включенным сжатием.
Установка Linux на том Btrfs с включенной компрессией
В качестве подопытного кролика тестового стенда вновь будет выступать старенький ASUS Eee PC 900. Чего он только ни повидал за прошедшие годы. Интересно, много ли у кого сегодня сохранился этот первый представитель окончательно вымершего сегодня семейства нетбуков?
Для запланированного эксперимента с Btrfs это просто идеальный образец.
Во-первых, два крошечных (4 Гб и 8 Гб) SSD накопителя, больший из которых к тому же еще и в два раза медленнее маленького. На самом деле оба флеш-диска очень медленные и не имеют ничего общего, по крайней мере по скорости, с современными твердотельными накопителями.
Во-вторых, само устройство на процессоре Intel Celeron M 900 МГц ну очень небыстрое, что сразу же позволит даже безо всяких тестов просто визуально оценить успех или неудачу данного эксперимента.
Изначально я планировал установить на Eee PC 900 Linux Mint-17.1 xfce. Однако очень скоро с этой идеей пришлось проститься. Инсталлятор Linux Mint требовал минимум 8.2 Гб свободного места на диске и в упор не хотел видеть ни второй диск, ни заранее собранный из двух накопителей том Btrfs объемом почти 12 Гб. О том, чтобы объяснить инсталлятору, что установка будет выполняться на сжатый том и на самом деле одного диска объемом 4 Гб будет достаточно, речь вообще не шла.
Последующая проверка в виртуальной машине VirtualBox показала, что для установки 32-разрядной сборки Linux Mint-17.1 xfce на сжатый с помощью LZO том, нужно всего 2,6 Гб
Задачу можно было бы легко решить с помощью LVM, как это было описано здесь, но очень уж не хотелось добавлять совершенно ненужную в данном случае прослойку между дисками и файловой системой Btrfs – она сама отлично справляется с многодисковыми конфигурациями.
Это исключительно проблема данного нетбука, обусловленная маленьким размером дисков. Вряд ли она повторится на каком-либо другом компьютере. Хотя в дистрибутиве Linux Mint хотелось бы видеть инсталлятор поумнее.
Если соберетесь устанавливать Linux Mint на файловую систему Btrfs, имейте в виду, что в дистрибутив, по крайней мере в тот, о котором здесь идет речь, поддержка этой файловой системы не включена. Для того, чтобы иметь возможность отформатировать разделы с Btrfs, необходимо установить btrfs-tools:
sudo apt-get install btrfs-tools
Так как поддержка Btrfs включена в ядро, Mint после установки загрузится, но для того, чтобы можно было делать некие манипуляции с томами, установку btrfs-tools придется повторить.
В качестве альтернативы я выбрал легкую облачно-ориентированную Peppermint OS с окружением рабочего стола LXDE (Lightweight X11 Desktop Environment). Ранее она уже упоминалась в обзоре дистрибутивов Linux.
Дальнейшие события показали, что выбор оказался весьма удачным. Облегченный набор приложений и шустрое окружение – это как раз то, что нужно для неторопливого нетбука.
Последняя на момент написания данной статьи 5-я версия этой ОС базируется на Ubuntu 14.04 LTS с пятилетним сроком поддержки. Возможность работы с файловой системой Btrfs присутствует сразу.
Проблема установки состояла в том, что компрессия включается в Btrfs на стадии монтирования файловой системы (-o compress=lzo / zlib ), а стандартный инсталлятор Linux, по крайней мере в Ubuntu и основанных на ней системах, не дает выбирать расширенные опции.
Очень элегантное и простое решение этой задачи удалось найти в этом руководстве.
- Создаем загрузочную флешку с помощью Universal USB Installer. Загружаем компьютер с нее и заходим в терминал:
- Переименовываем исполняемый файл mount в mount.bin
mv /bin/mount /bin/mount.bin
- Создаем файл скрипта mount
Вместо gedit вы можете использовать любой текстовый редактор, входящий в состав Live CD.
Вписываем в mount следующий код:
#!/bin/sh
if echo [email protected] | grep «btrfs» >/dev/null; then
/bin/mount.bin [email protected] -o compress-force=lzo
else
/bin/mount.bin [email protected]
fi
Во избежание ошибок вы можете заранее создать текстовый файл с указанным содержанием и записать его на Live флешку, или открыть данную страницу непосредственно в Live сеансе и скопировать его с нее.
- Сохраняем файл и делаем его исполняемым:
chmod 755 /bin/mount
Она ничем не отличается от описанной, например здесь.
Разбиение диска нужно выполнить самостоятельно. Для этого на этапе “Тип установки” выбираем “Другой вариант”.
Под /boot необходимо обязательно создать в начале диска раздел размером примерно 200 Мб. В противном случае система со сжатого диска не загрузится.
В данном случае под /home отдельный раздел выделять не нужно – в процессе установки для этого каталога будет автоматически создан подтом (subvolum — /@/home).
Если система устанавливается на обычный (не SSD) диск, нужно сделать раздел подкачки объемом 2 х RAM.
О назначении каталогов операционной системы Linux можно прочитать здесь.
До первой перезагрузки можно сразу же отредактировать fstab (file systems table). Для этого придется смонтировать выделенный при установке под корень файловой системы раздел.
Если это был, например, sda2, то:
mount /dev/sda2 /mnt
gedit /mnt/@/etc/fstab
Обратите внимание, что корневой раздел также попал на подтом и путь к нему включает в себя “@”.
Находим в fstab строки, касающиеся монтирования Btrfs томов и заменяем defaults на compress=lzo (конкретный пример fstab см. ниже).
- Перезагружаем компьютер, теперь уже с жесткого диска
Добавление второго диска в файловую систему Btrfs
Как уже было отмечено выше, Btrfs предоставляет широкие возможности для работы с многодисковыми конфигурациями устройств хранения. Можно как создавать RAID массивы различного уровня, так и просто увеличивать доступное пространство существующего раздела за счет подключения к нему новых дисков или дисковых разделов.
Дополнительные диски можно подключить или отключить на работающей системе в любой момент.
По умолчанию при размещении радела на нескольких дисках данные распределяются без резервирования и размер ФС получается равным их суммарному объему. При этом выполняется зеркалирование метаданных на двух устройствах. Если диск один, то копия метаданных размещаются на нём.
Добавим в уже созданный раздел /dev/sda2 дополнительный диск /dev/sdc
sudo btrfs device add /dev/sdb /
где “/” – точка монтирования (path). Так как домашний каталог также смонтирован на том Btrfs, можно использовать “/home”.
Если sdc ранее уже был отформатирован в Btrfs, то, возможно, команда потребует ключа –f.
Непосредственно после добавления нового диска сохранённые на первом диске файлы остаются на месте. Присоединенный диск будет заполняться в процессе работы. Если нужно сразу перераспределить файлы, выполняем балансировку:
sudo btrfs balance start /
В зависимости от объема данных и скоростных характеристик дисков этот процесс может быть продолжительным.
Если использовать диски (или разделы) одинакового размера, то можно на ходу конвертировать single device в RAID массив.
btrfs balance start -dconvert=raid1 -mconvert=raid1 /
В результате получится RAID с зеркалированием данных и метаданных. Аналогичным образом можно построить RAID любого уровня, не забывая при этом о количестве необходимых для этого дисков.
Оценить полученный результат можно выполнив команду:
sudo btrfs filesystem show /
Получить информацию об объеме, занятом метаданными:
btrfs filesystem df /
Балансировку я выполнил не сразу, а через несколько дней после начала активной эксплуатации нетбука. Удивление вызвал тот факт, что Btrfs неожиданно переместила
85% данных на более медленный диск. Хотелось бы думать, что это правильное решение. В любом случае это очень интересный результат.
Дополнительная оптимизация операционной системы Linux для работы на SSD
Для того, чтобы продлить жизнь твердотельному накопителю, как SSD, так и обычному флеш-накопителю, нужно по-возможности сократить для них количество операций записи в единицу времени. В том числе сделать это можно путем оптимизации опций монтирования в файле fstab.
В качестве файловой системы для каталога /boot была не случайно выбрана нежурналируемая файловая система ext2. Журналируемые ФС, с одной стороны, являются устойчивыми к аварийным ситуациям, но с другой стороны, увеличивают количество записей на жесткий диск.
Для разделов Btrfs, размещенных на SSD, добавляем опцию ssd. Как изменится после этого алгоритм работы с диском досконально неизвестно. Можно предположить, что при старте или в процессе работы на накопителе будут отыскиваться незанятые блоки и регулярно освобождаться. Одним словом, хуже не будет.
Отмечается, что для твердотельных накопителей старого типа более целесообразной может быть опция ssd_spread.
Операции чтения файлов также могут создавать большую нагрузку на твердотельный накопитель, так как при каждом обращении записывается время доступа к файлу или директории (atime). Запись на диск происходит даже при чтении из кеша.
Избежать этого можно добавив опции noatime, nodiratime, которые отключают запись меток времени соответственно для файлов и для директорий (по некоторым источникам noatime включает в себя nodiratime).
Отключение atime не только продлевает жизнь жесткого диска, но и как отмечается в этой статье, на 30% увеличивает скорость системы. Однако не все приложения смогут правильно работать с отключенными временными метками.
Альтернативой им может быть более демократичная опция relatime. При ее использовании метки времени обновляются, но не при каждом обращении к файлу, а только в том случае, если файл был изменен с момента последней записи atime.
Прописываем relatime для всех разделов, расположенных на SSD.
Для того, чтобы еще больше облегчить жизнь SSD, а заодно опять же улучшить быстродействие компьютера, переносим в оперативную память с помощью файловой системы tmpfs временные, служебные и лог-файлы. Для этого добавляем в конец fstab директивы монтирования соответствующих каталогов в tmpfs в соответствии с рекомендациями представленными здесь.
Окончательно у меня получилось так:
# /etc/fstab: static file system information.
#
#
# / was on /dev/sda2 during installation
UUID=6bdc62a7-9964-4558-8594-8137271e4591 / btrfs compress=lzo,ssd_spread,relatime,[email protected] 0 1
# /boot was on /dev/sda1 during installation
UUID=256ce960-d9fd-4b9f-b336-cdac0915a33d /boot ext2 relatime 0 2
# /home was on /dev/sda2 during installation
UUID=6bdc62a7-9964-4558-8594-8137271e4591 /home btrfs compress=lzo,ssd_spread,relatime,[email protected] 0 2
#
tmpfs /tmp tmpfs rw,size=250m 0 0
tmpfs /run tmpfs rw 0 0
tmpfs /var/lock tmpfs rw 0 0
tmpfs /var/log tmpfs rw,size=10m 0 0
Сохраняем fstab и переходим к sysctl.conf
sudo gedit /etc/sysctl.conf
Добавляем в конец файла:
Параметр в сотых долях секунды определяет как часто будет осуществляться запись данных на диск из кеша. В данном случае получится каждые 15 секунд. Таким образом мы опять же уменьшаем количество операций записи на SSD в единицу времени.
При этом, естественно, повышается вероятность потери данных в случае непредвиденного отключения питания. Для ноутбука или нетбука с исправным аккумулятором вероятность такой неприятности крайне невелика.
Это далеко не все. Оптимизационные мероприятия можно продолжить и, например, перенести на RamDisk браузерный кеш.
Опции монтирования файловой системы Btrfs для традиционных механических жестких дисков
Твердотельный накопитель SSD в нетбуке скорее все же исключение, чем правило. Поэтому для тех, кто вслед за мной захочет поэкспериментировать с установкой Linux на Btrfs, приведу некоторые полезные опции монтирования дисковых томов обычных HDD, размеченных с помощью этой файловой системы.
compress — оставляем. Согласно тестам, представленным на сайте Phoronix еще в конце 2010 года, компрессия дает главный выигрыш в скорости дисковых операций.
space_cache – включает кэширование данных о свободных блоках в памяти. Без этой опции в процессе поиска свободного пространства перед записью Btrfs будет всякий раз сканировать все дерево. По результатам большинства тестов Phoronix включение опции space_cache дает выигрыш в скорости работы с диском, хотя и не столь существенный, как опция compress.
autodefrag — дефрагментация файлов на лету.
В конечном счете для HDD должно получиться примерно так:
# /etc/fstab: static file system information.
#
#
# / was on /dev/sda2 during installation
UUID=6bdc62a7-9964-4558-8594-8137271e4591 / btrfs compress=lzo,space_cache,autodefrag,relatime,[email protected] 0 1
# /boot was on /dev/sda1 during installation
UUID=256ce960-d9fd-4b9f-b336-cdac0915a33d /boot ext2 relatime 0 2
# /home was on /dev/sda2 during installation
UUID=6bdc62a7-9964-4558-8594-8137271e4591 /home btrfs compress=lzo,space_cache,autodefrag,relatime,[email protected] 0 2
#
Заключение
Делать какие-либо заключения по поводу целесообразности использования файловой системы Btrfs я не возьмусь. Продолжительность эксплуатации компьютера с новой файловой системой пока еще невелика, хотя я и стараюсь использовать его активно. Что-то мне подсказывает, что все будет хорошо.
Общее впечатление от скорости и стабильности работы Peppermint OS 5 со сжатой с помощью LZO компрессии файловой системой на Eee PC 900 самые положительные.
Если я скажу, что система летает, вы мне не поверите. И правильно сделаете. Это старенькое устройство на 915-м чипсете с Celeron-M 900 летать не умеет по определению. Но по сравнению с самим собой под другими ОС работает действительно на удивление быстро. Как говорится, результат превзошел ожидания. Пожалуй что эта последняя инсталляция оказалась пока самой удачной.
Опять же не возьмусь утверждать, что главная заслуга в этом принадлежит btrfs compress=lzo. В большей или меньшей степени влияние оказали все оптимизационные настройки. Но то, что файловая система сыграла свою положительную и не последнюю роль, безусловно.
Для того, чтобы вы имели представление о чем идет речь, приведу несколько временных характеристик.
Загрузка компьютера из выключенного состояния до полной загрузки рабочего стола занимает примерно 60 секунд. Из них
15 секунд занимает POST, и также
15 секунд — сканирование файловой системы Btrfs. Разницу в скорости между опциями монтирования ssd и ssd_spread заметить не удалось.
Первый после включения компьютера запуск браузера Google Chroome – 12 секунд до появления окна, 20 секунд загрузка начальной страницы Google с подключением к учетной записи и отрисовкой всех изображений.
Повторный запуск браузера Chroome с начальной страницей Google – 10 секунд. Загрузка главной страницы Yandex – 7 секунд.
Открытие электронной книги в FBReader – 2 секунды, запуск текстового редактора AbyWord – 4 секунды, электронной таблицы Gnumeric – 2 секунды, открытие папок с файлами в файловом менеджере PCManFM – мгновенно.
Думаю этого достаточно для того, чтобы составить общее представление. Как видите, за траченные усилия не прошли даром и позволили заметно оживить старенький компьютер.