Предложен механизм blksnap для создания снапшотов блочных устройств в Linux

Компания Veeam, выпускающая ПО для резервного копирования и восстановления после аварий, предложила для включения в состав ядра Linux модуль blksnap с реализацией механизма создания снапшотов блочных устройств и отслеживания изменений в блочных устройствах. Для работы со снапшотами подготовлена утилита командной строки blksnap и библиотека blksnap.so, позволяющие из пространства пользователя взаимодействовать с модулем ядра через ioctl-вызовы.

Целью создания модуля называется организация резервного копирования накопителей и виртуальных дисков без остановки работы – модуль позволяет зафиксировать в снапшоте текущее состояние всего блочного устройства, предоставив для резервного копирования изолированный срез, не зависящий от продолжающих поступать изменений. Важной особенностью blksnap является возможность одновременного создания снапшотов сразу для нескольких блочных устройств, что позволяет не только обеспечить целостность данных на уровне блочного устройства, но и добиться согласованности состояния разных блочных устройств в резервной копии.

Для отслеживания изменений в подсистему блочных устройств (bdev) добавлена возможность прикрепления фильтров, позволяющих перехватывать запросы ввода/вывода. В blksnap реализован фильтр, который перехватывает запросы на запись, читает старое значение и сохраняет его в отдельном списке изменений, определяющем состояние снапшота. При подобном подходе логика работы с блочным устройством не меняется, запись в оригинальном блочном устройстве производится как есть, независимо от снапшотов, что исключает возможность повреждения данных и позволяет избежать проблем даже в случае возникновения непредсказуемых критических ошибок в blksnap и переполнения места, выделенного под изменения.

Модуль в том числе позволяет определить какие блоки были изменены в промежуток времени между последним и любым предыдущим снапшотом, что может быть полезным для реализации инкрементального резервного копирования. Для сохранения изменений, относительно состояния снапшота, на любом блочном устройстве может быть выделен произвольный диапазон секторов, что позволяет сохранять изменения в отдельных файлах внутри ФС на блочных устройствах. Размер области для хранения изменений в любой момент может быть увеличен, даже после создания снапшота.

Blksnap основан на коде модуля veeamsnap, входящего в состав продукта Veeam Agent for Linux, но переработан с учётом специфики поставки в основном составе ядра Linux. Концептуальным отличием blksnap от veeamsnap является задействование системы фильтров, прикрепляемых к блочному устройству, вместо отдельного компонента bdevfilter, перехватывающего ввод/вывод.

Release. Ссылка here.