Форматы образа тома
Утилита sbdctl поддерживает два формата файлов образов:
Утилита поддерживает два формата файла с образом данных блочного устройства:
raw — сырой формат данных и формат данных сетевого блочного устройства.
sbd— формат, поддерживающий ряд дополнительных возможностей.
Оба формата поддерживаются на запись в операции export``и чтение в операции ``import.
Формат raw:
Файл с двоичным образом данных, записанных на сетевое блочное устройство (или же некоторую часть этих данных).
Неиспользуемые диапазоны данных блочного устройства не записываются.
Использует механизм разреженных (sparse) файлов Linux для экономии места.
Неиспользуемые блоки возвращают нулевые байты (0x00) при чтении.
Совместим с утилитами, поддерживающими работу с «сырыми» данными тома, например qemu-img.
Формат sbd:
Двоичный файл, содержащий данные блочного устройства, метаданные и контрольные суммы.
Неиспользуемые диапазоны данных хранятся в компактном формате вида (смещение, длина), что может быть предпочтительнее для разреженных томов.
Может быть двух типов:
Файл с полным снапшотом — содержит непрерывный образ данных, записанных в диапазон тома. Данные могут быть взяты из актуальнах на момент создания образа или из снапшота тома — «снимка» его содержимого в более ранний момент времени. Может быть создан, например, с помощью sbdctl export.
Файл с инкрементальным снапшотом — содержит данные, записанные в промежутке между двумя снапшотами тома или между снапшотом и текущим на момент создания образа состоянием тома. Может быть создан с помощью операции export, либо вычислен из двух имеющихся файлов снапшотов с помощью операции diff.
Файл полного снапшота в формате sbd содержит записи двух типов — данные и неиспользуемое пространство. Они описывают состояние всего тома или некоторого дипазона тома без промежутков (иначе снапшот, хранимый в этом образе, уже не является полным).
Пример — структура полного снапшота тома из 8 блоков:

В этом снапшоте блоки 0, 3, 4 и 6 не используются, в остальные блоки записаны данные. Допустим, что размер блока данных — 4096 байт. Тогда в файле с образом полного снапшота могут быть записи вида:
Неиспользуемые блоки, смещение 0, длина 4096.
Блоки с данными, смещение 4096, длина 8192, затем 8 КБ данных.
Неиспользуемые блоки, смещение 12288, длина 8192.
Блоки с данными, смещение 20480, длина 4096, затем 4 КБ данных.
Неиспользуемые блоки, смещение 24576, длина 4096.
блоки с данными, смещение 28672, длина 4096, затем 4 КБ данных.
Утилита sbdctl ожидает, что записи будут отсортированы по возрастанию смещения. При этом формат не налагает такого технического ограничения.
Инкрементальный снапшот также содержит записи двух типов, но может не описывать некоторые блоки. Это означает, что указанный диапазон не менялся в промежутке между двумя снапшотами тома, и его содержимое будет одинаково в обоих снапшотах.
Пример инкрементального снапшота для тома из 8 блоков по 4096 байт:

Блоки 0 и 7 помечены как неиспользуемые. В блоки 1, 4 и 5 записаны данные. Остальные блоки — 2, 3 и 6 — имеют одинаковое содержимое в обоих снапшотах. При этом нельзя сказать какое именно содержимое, не зная содержимое более раннего снапшота тома. Допустим, что размер блока данных — 4096 байт. Тогда в файле с образом инкрементального снапшота будут записи вида:
Неиспользуемые блоки, смещение 0, длина 4096.
Блоки с данными, смещение 4096, длина 4096, затем 4 КБ данных.
Блоки с данными, смещение 16384, длина 8192, затем 8 КБ данных.
Неиспользуемые блоки, смещение 28672, длина 4096.