Наши партнеры

UnixForum





Библиотека сайта rus-linux.net

Создание и использование снэпшотов в BTRFS

Оригинал: How to create and use BTRFS snapshots - Tutorial
Автор: Igor Ljubuncic
Дата публикации: 25 февраля 2012 года
Перевод: А. Кривошей
Дата перевода: апрель 2012 г.

BTRFS - это сравнительно новая файловая система, основанная на ZFS от компании Sun, которая привнесла больше всего инноваций в Unix за последние 25 лет, до ее поглощения Oracle. BTRFS до сих пор считается нестабильной, и поэтому не подходит для применения на производстве. Однако эта файловая система имеет множество полезных возможностей, которые стоит изучить. Одна из них - создание cнэпшотов системы.
Позвольте уточнить. Снэпшоты - это мгновенные снимки состояния системы. В некотором смысле, если вы копируете файл и делаете резервную копию, вы тем самым делаете его снимок, относящийся к моменту копирования. Это можно сделать в любом месте и в любое время. Подумайте о файловой системе, которая на самом деле может управлять несколькими копиями ваших файлов в рамках своей структуры, и позволяет использовать их, как вам заблагорассудится. Звучит интересно, будем исследовать.

создание снэпшотов в BTRFS

BTRFS, введение

Перед тем, как мы начнем копать глубже, я хотел бы кратко обрисовать возможности этой файловой системы. BTRFS должна обеспечивать выполнение всех системных операций, связанных с дисками и управлением файлами, для которых обычно требуются дополнительные утилиты. BTRFS обеспечивает дефрагментацию, распределение нагрузки, уменьшение, увеличение, горячую замену, RAID, снэпшоты, сжатие, клонирование, и многие другие возможности, и все это встроено в драйвер файловой системы. С другими файловыми системами вам, вероятно, понадобится множество других драйверов и пользовательских утилит для управления всеми этими видами операций, например программа дефрагментации файловой системы, драйверы RAID и LVM, и так далее.
Встроенная функциональность означает производительность и простоту использования. Однако на данный момент BTRFS еще не полностью пригодна для использования вследствие нестабильности, а также снижения производительности по сравнению с другими файловыми системами, такими как Ext4. Но она имеет громадный потенциал, поэтому ее нельзя игнорировать, а нужно изучать.
В данном руководстве я покажу вам, как управлять снэпшотами. Это суперактуальная возможность, которая позволит вам создавать резервные копии важных файлов перед внесением в них любых изменений и затем при необходимости восстанавливать их. В некотором смысле это похоже на восстановление системы в Windows плюс драйвер отката на уровне файловой системы. Кстати, кроме снэпшотов, в этой статье можно будет также найти немного полезной информации о повседеневной работе с файловой системой BTRFS. Тестирование производилось в системе Fedora 16 Verne с рабочим столом KDE.

Как управлять BTRFS

Вы можете использовать BTRFS для корневой файловой системы за исключением /boot, которая должна быть отформатирована в традиционную журналируемую файловую систему. Для простоты в данном руководстве мы будем работать с отдельным устройством /dev/sdb1, отформатированным в BTRFS и используемым при необходимости. На практике это может быть /home или /data, или что-нибудь еще.

создание нового раздела

Итак, что мы собираемся делать?

Мы возьмем /dev/sdb1 и смонтируем его. Затем создадим несколько подразделов. Считайте подразделы виртуальными корневыми деревьями, так как любой из них представляет собой отдельную, независимую древовидную структуру данных, даже если данные те же самые.
Ниже приведена последовательность необходимых для этого команд. Не пугайтесь, мы объясним, как они работают.

$ btrfs subvolume create /mnt/data
$ btrfs subvolume create /mnt/data/orig

$ echo "Dedoimedo is l33t" > /mnt/data/orig/file

$ btrfs subvolume snapshot /mnt/data/orig /mnt/data/backup

/dev/sdb1 смонтирован в /mnt. Мы создаем подраздел с названием data. Внутри него мы создаем другой подраздел с названием orig. А уже внутри него будут созданы наши файлы. С точки зрения пользователя подразделы выглядят как обычные директории. Другими словами, data и data/orig - это директории.
Далее, мы создаем текстовый файл в origin с названием file, содержащий некоторый текст. И в конце мы создаем снэпшот подраздела orig и называем его backup. Теперь у нас есть идентичная копия подраздела orig. Вот доказательство:

создание подразделов

Кроме того, для проверки воспользуемся командой btrfs subvolume list, чтобы просмотреть все подразделы:

$ btrfs subvolume list

Заметьте, что каждый подраздел имеет свой номер ID. Как мы скоро убедимся, это важно.

Вид по умолчанию

В настоящее время в /mnt по умолчанию отображаются как orig, так и backup (все это в data). Мы можем это изменить. Помните, раннее я упоминал о виртуальных корневых древовидных структурах? BTRFS позволяет вам сменить виртуальную корневую директорию на любой из подразделов.
Таким образом, использование подразделов и снэпшотов означает просто переключение между различными иерархиями данных. Не нужно удалять, перезаписывать файлы, или делать что-то еще. Вы просто переключаетесь на другой подраздел. Сейчас мы увидим, как это делается.
Команда btrfs subvolume set-default ID - это все, что нам нужно. Мы установим вид по умолчанию на другой подраздел, затем отмонтируем устройство, и смонтируем его заново. Это важно!
Теперь, если вы работаете с файловой системой, которая не может быть отмонтирована, так как используется, например /usr или /etc, необходимо перезагрузить компьютер, чтобы изменения вступили в силу. Теперь в заданном дереве директорий будет отображаться другой подраздел. Пользователь не заметит разницы, но данные в директориях изменятся.
Чтобы действительно увидеть, как это работает, мы отредактируем файл file в backup. Текст Dedoimedo is l33t заменим на Dedoimedo is NOT l33t.

$ echo "Dedoimedo is NOT l33t" > /mnt/data/backup/file

Хорошо, мы знаем ID для всех подразделов. Поэтому смонтируем ID как вид по умолчанию. Это значит, что как только вы перемонтируем /mnt, мы увидим здесь файл с этим содержимым.

$ btrfs subvolume set-default 257 /mnt
$ umount /mnt
$ mount /dev/sdb1 /mnt

А теперь вернем все обратно:

перемонтирование подразделов

Это можно делать столько раз, сколько нужно:

работа со снэпшотами

Выше мы меняли вид между 257 и 260, то есть между orig и backup, в результате мы могли просматривать содержимое измененного файла. Мы просто показывали пользователю разные подразделы.
В итоге, если мы хотим видеть как orig, так и backup в директории data, необходимо восстановить вид по умолчанию подраздела верхнего уровня, то есть data. Заметьте, что все данные отображаются в директории /mnt, поскольку мы выбрали ее в качестве точки монтирования. Однако вместо нее можно использовать любую другую директорию.

восстановление из резервной копии

Заключение

Функция создания снэпшотов в BTRFS реализована достаточно аккуратно, и ее использование не представляет трудностей. Конечно, необходимо действовать внимательно, чтобы использовать правильное дерево данных и ничего не перепутать. Но теперь вы уже знаете основные команды BTRFS и можете действовать более уверенно. В дальнейшем мы протестируем Snapper - фронтенд для BTRFS, доступный в openSUSE, который позволяет реализовать такую же функциональность с помощью графического интерфейса пользователя для тех, кто не любит командную строку.