суббота, 6 июня 2015 г.

Установка Ubuntu на файловую систему Btrfs

Btrfs - продвинутая файловая система, разработанная компанией Oracle в 2007 году и опубликованная под лицензией GNU GPL. Изначально, целью было создание достойного конкурента файловой системе ZFS, но впоследствии, компания отошла от этого направления. Btrfs может похвастаться следующими возможностями:


  • Высокая скорость;
     
  • Динамическое выделение индексных дескрипторов (динамические иноды, dynamic inodes ). Иначе говоря, в этой ФС нет максимального количества обслуживаемых файлов;
     
  • Снимки файловой системы (snapshots), а также возможности делать снимки снимков и записываемые снимки (writeable snapshots);
     
  • Для продвинутого контроля целостности, применяются хеши на все данные и метаданные (тут нужно сразу заметить, так как от сравнения Btrfs и ZFS никак не уйти, что на данный момент в Btrfs применяется CRC-32C, что существенно скромнее, чем в ZFS);
     
  • Очень полезная возможность миграции с традиционных файловых систем ext3/ext4, что дает возможность очень прозрачного перехода на эту новую ФС;
     
  • Завершаются работы над поддержкой автоматического распознавания и объединения дубликатов (дедупликация);
     
  • Прозрачные возможности избирательного сжатия файлов;
     
  • Поддержка режима работы как RAID-массива (одна файловая система на нескольких томах);
     
  • Подтома (subvolumes) и эффективное клонирование файловой системы, быстрое создание инкрементальных архивов;
     
  • Прямая поддержка Device-mapper — важного компонента ядра Linux, с помощью которого организуется расширенное управление логическими томами;
Из недостатков:

  • Из-за механизма copy-on-write, возможна фрагментация данных. Данную проблему можно решить опцией монтирования autodefrag.
     
  • Отсутствует механизм online-проверки файловой системы на ошибки (то есть при смонтированной ФС). Точнее, этот механизм сейчас в разработке.
     
  • Не поддерживает фоновое шифрование.
С 2012 года считается стабильной, однако активная разработка продолжается. Вследствие этого, иногда могут возникать проблемы, потому для ценных и особо ценных данных, лучше использовать файловые системы ext4 или XFS (о ней поговорим в отдельной статье), а Btrfs только для раздела "/" Установка Ubuntu на Btrfs, не вызывает сложностей (в отличии от Debian, где придётся дополнительно повозиться (об этом в следующий раз), после установки нужно лишь прописать нужные опции монтирования в файл /etc/fstab. Но обо всём по порядку.

Файловая система Btrfs, представляет собой дерево (структура B-tree's). Ствол этого дерева - это корень ФС (не путать с корнем операционной системы, "/"). Ветви это дерева - это подтома (subvolumes), которые представлены пользователю в виде обычных директорий, но монтирующихся как разделы диска. В частности, разделам "/" и "/home", соответствуют подтома "@'' и "@home". При этом в отличии от реальных разделов, подтома Btrfs не являются блочными устройствами. Благодаря этому, можно с лёгкостью сделать снимок состояния (снапшот) нужного подтома, и в случае проблем - сделать откат. Но как я упомянул выше, для важных данных, предпочтительнее будет использовать ext4 или XFS, на отдельном разделе для /home. В частности, в дистрибутиве OpenSUSE, по умолчанию для "/" используется Btrfs, а для "/home" - XFS. Впрочем, это не отменяет создание резервных копий важных данных. 

Приступим к установке. Собственно, тут ничего особенного нет. В случае использования Btrfs и для "/" и для "/home" весь диск размечается в Btrfs. И делается отдельный раздел подкачки (swap), так как он не может располагаться на Btrfs. Вот так:


При использовании Btrfs только для корня, и создании отдельного /home





После этого ставим систему как обычно.

Настройка после установки.
Всё, что теперь нужно сделать - это отредактировать файл /etc/fstab, добавив в него нужные опции. Приведу в пример свой fstab



# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# <file system> <mount point>   <type>  <options>       <dump>  <pass>
# / was on /dev/sda3 during installation
UUID=8ed24bfc-0010-42a2-a605-5bc09aba8934 /           btrfs   compress=lzo,space_cache,autodefrag,relatime,subvol=@ 0       1
# /home was on /dev/sda3 during installation
UUID=8ed24bfc-0010-42a2-a605-5bc09aba8934 /home      btrfs   compress=lzo,space_cache,autodefrag,relatime,subvol=@home 0       2
# swap was on /dev/sda2 during installation
UUID=f7fbadf4-a7d8-41bb-94dd-4f653eaf9499 none            swap    sw              0       0

compress - сжатие. Согласно тестам, представленным на сайте Phoronix еще в конце 2010 года, компрессия дает главный выигрыш в скорости дисковых операций. Ставим тип сжатия lzo.
space_cache - включает кэширование данных о свободных блоках в памяти. Без этой опции в процессе поиска свободного пространства перед записью Btrfs будет всякий раз сканировать все дерево. По результатам большинства тестов Phoronix включение опции space_cache дает выигрыш в скорости работы с диском, хотя и не столь существенный, как опция compress.
autodefrag - дефрагментация файлов на лету (актуально для HDD).
relatime - Операции чтения файлов также могут создавать большую нагрузку на диск, так как при каждом обращении записывается время доступа к файлу или директории (atime). Запись на диск происходит даже при чтении из кеша.


Избежать этого можно добавив опции noatime, nodiratime, которые отключают запись меток времени соответственно для файлов и для директорий (по некоторым источникам noatime включает в себя nodiratime).

Отключение atime не только продлевает жизнь жесткого диска, но и как отмечается в этой статье, на 30% увеличивает скорость системы. Однако не все приложения смогут правильно работать с отключенными временными метками.

Альтернативой им может быть более демократичная опция relatime. При ее использовании метки времени обновляются, но не при каждом обращении к файлу, а только в том случае, если файл был изменен с момента последней записи atime.
Сохраняем файл и перезагружаемся.


При установке системы на SSD, в fstab нужно указать опцию монтирования ssd. Для старых SSD накопителей, желательно прописать в fstab опцию ssd_spread.

Как сделать снимок состояния системы (snapshot).
Монтируем наш диск в директорию /mnt


sudo mount /dev/sdX# /mnt

Выведем список подтомов

sudo btrfs subvol list /mnt
ID 258 gen 525 top level 5 path @home
ID 262 gen 523 top level 5 path @

Создаём снимок корневого подтома

sudo btrfs subvolume snapshot /mnt/@ /mnt/@_snapshot

В результате, у нас будет подтом с именем @_snapshot, содержащий структуру нашего корневого подтома. Для отката системы на этот снапшот, нужно переименовать текущий корневой подтом, а затем подставить на его место созданный снапшот и переименовать его в @

sudo mv /mnt/@ /mnt/@_badroot
sudo mv /mnt/@_snapshot /mnt/@


Вот и всё. Также, есть ещё одна полезная вещь. Если вы пользовались Windows, то знаете, что там есть такая штука, как точки восстановления системы. Не буду рассказывать, насколько они кривые (имел "удовольствие" потерять несколько системных файлов после отката), но в случае использования Btrfs, можно установить утилиту apt-btrfs-snapshot, доступную в штатных репозиториях Ubuntu. Данная утилита, будет автоматически создавать точки восстановления при установке или обновлении программ. Допустим вы установили эту утилиту. Команда sudo apt-btrfs-snapshot list выведет список доступных точек восстановления:

sunderland93@sunderland93-VirtualBox:~$ sudo apt-btrfs-snapshot list
Available snapshots:

sunderland93@sunderland93-VirtualBox:~$

Как видите, их пока нет. Теперь установим какое-нибудь приложение, например pidgin. После установки, снова выведем список точек восстановления:

sunderland93@sunderland93-VirtualBox:~$ sudo apt-btrfs-snapshot list
Available snapshots:
@apt-snapshot-2015-04-06_10:02:14
sunderland93@sunderland93-VirtualBox:~$ 

Как видим, создалась точка восстановления с датой на момент установки pidgin. Чтобы откатиться на эту дату, нужно переключить систему на использование этого снапшота:

sudo apt-btrfs-snapshot set-default @apt-snapshot-2015-04-06_10:02:14

и перезагрузиться. Всё. Как будто ничего не ставили)) Подобная утилита пригодиться в случае установки сбойного обновления (напирмер графического драйвера). Удалить точку восстановления просто. Для этого служит команда sudo apt-btrfs-snapshot delete ИМЯ_СНАПШОТА
Помните - нельзя, а точнее программа не даст вам удалить активный снапшот, т.е. до перезагрузки в предыдущем шаге мы не могли удалить этот снапшот - он был активен. 
 
 
 
 
 
 

1 комментарий: