nav-img
Evolution

Загрузка (импорт) данных тома

Данные тома (или снапшота) из исходного файла записываются в целевой том. Это действие выполняется с помощью операции import.

До начала загрузки данных в том убедитесь, что:

  • Серверы метаданных и чанков (MDS и CS) запущены и работают.

  • Файл /etc/storage/mds_list.yml существует и содержит корректную информацию о серверах метаданных кластера.

  • Исходный файл образа сохранен в одном из поддерживаемых форматов (raw или sbd).

  • Целевой том присутствует в системе, и его объем позволяет вместить все данные из исходного файла. При этом объем целевого тома может быть больше, чем объем данных в файле снапшота.

Для организации безопасного совместного доступа к данным утилита sbdctl устанавливает на целевом томе эксклюзивную блокировку (exclusive lease). При этом параллельная работа любых других клиентов с этим томом невозможна. В случае, если другой клиент уже установил блокировку на целевом томе, то операция завершается с ошибкой (при условии, что не указана опция --revoke-lease).

При использовании sbdctl import:

  1. Все существующие данные на целевом томе будут перезаписаны после окончания операции.

  2. Текущая реализация гарантирует только изоляцию от других клиентов. Но атомарность и консистентность операции при этом уже не гарантируются, т.к. в случае ошибки данные могут быть записаны на целевой том лишь частично. При этом на целевом томе будут записаны неконсистентные данные. В таком случае операцию можно запустить повторно и убедиться, что те же самые данные записались без ошибок.

  3. Если целевой том больше по размеру, чем исходный том, то в таком случае диапазон данных в конце целевого тома будет помечен как неиспользуемый с помощью операции unmap. Это происходит при импорте полных снапшотов, при записи инкрементальных снапшотов unmap данных в конце целевого тома не производится.

  4. В sbdctl версии 1.4.x и более новых используется оптимизация записи данных на уровне клиентской библиотеки. Вместо записи выравненной последовательности нулевых байт весь соответствующий диапазон целевого тома помечается как неиспользуемый с помощью операции unmap, записи данных не происходит. Требуемое значение выравнивания равно slice size и stripe depth, при этом и длина и смещение начала последовательности нулевых байт должно быть кратно этому значению. Значение slice size для целевого тома можно узнать с помощью команды storage volume list, при этом нулевое значение в соответствующем столбце соответствует значению по умолчанию (256 Кб). Значение stripe depth — это первая цифра в схеме кодирования данных тома (например, 4 для кодировки 4+2/1). Данная оптимизация применяется при записи любых поддерживаемых форматов образов. Опция --raw-detect-holes не влияет на эту оптимизацию.

С учетом пунктов (1) и (2), запись данных на непустой том может привести к потере уже содержащихся на нем данных.

Операция sbdctl export:

sbdctl export --volume-id <volume_id> [--file-to <output_file> | --stdout] <other options>

Обязательные параметры:

  • --volume-id volume_id или -v volume_id — задает идентификатор тома в виде 64-битного числа в шестнадцатеричной системе счисления. Префикс 0x, характерный для такой записи чисел, можно не указывать. Список доступных томов можно посмотреть с помощью команды storage volume list.

  • --file-to file или -o file — задает путь к файлу, в который будет записан образ необходимых данных. Если в процессе выгрузки данных или записи их на локальный диск возникает ошибка, файл удаляется.

  • --stdout — вместо записи в файл использует запись в поток стандартного вывода (stdout). Нельзя использовать операторы перенаправления вывода в обычный файл (>file и >>file — используйте --file-to file). Можно использовать перенаправление вывода на вход другой программы, например, с помощью оператора конвейеризации ввода-вывода, или же перенаправлять в специальный файл символьного устройства (например, /dev/null) c помощью операторов перенаправления вывода > и >>.

Необязательные параметры:

  • --format arg или -f arg — позволяет явно задать формат файла с данными снапшота. Поддерживаемые значения — sbd, raw или auto. По умолчанию выбирается auto, утилита сама определяет формат входного файла. Если используется опция --stdin, то необходимо явно указать формат входных данных.

  • --read-buffer size — позволяет выбрать размер буфера в памяти для чтения с локального диска. Значение по умолчанию — 16M (16 мегабайт). Возможные значения — от 8k до 128M (8 килобайт и 128 мегабайт соответственно). Слишком маленькое значение этого параметра может привести к замедлению чтения данных с локального диска.

  • --write-size size — задает размер данных на каждый запрос на запись в сетевое блочное устройство. Значение по умолчанию — 128k — считается оптимальным. Возможные значения — от 4k to 1M, они должны быть кратны 4 килобайтам. Слишком большие или слишком маленькие значения этого параметра могут привести к замедлению записи в сетевое блочное устройство.

  • --max-concurrent-requests N или -j N — задает максимальное количество параллельных запросов на запись в сетевое блочное устройство. Значение по умолчанию — 64 запроса. Слишком большие или слишком маленьки значения этого параметра могут привести к замедлению чтения данных тома. Под запросами имеются в виду вызовы клиентской библиотеки. Клиентская библиотека может создавать несколько RPC-вызовов на один запрос.

  • --raw-detect-holes arg — эта опция используется только с форматом raw. При включенной опции утилита будет пытаться обнаружить неиспользуемые диапазоны данных (они представляют собой выравненные по границе блока последовательности нулевых байтов). Возможные значения опции: 1, on, yes или true — для ее включения, и 0, off, no или false — для выключения. По умолчанию эта опция выключена в sbdctl начиная с версии 1.4 и включена во всех более ранних релизах (1.2.xx, 1.3.xx). Неиспользуемые диапазоны данных не записываются на целевой том, вместо этого они явно помечаются как неиспользуемые с помощью операции unmap сетевого блочного устройства. Это позволяет уменьшить использование пропускной способности сети и дискового пространства. Для формата sbd данная опция не имеет смысла, т.к. в нем подобные диапазоны сохраняются явно. Побочный эффект этой опции — чуть более медленное чтение с локального диска. В sbdctl версии 1.4 и более новых эта опция не влияет на оптимизацию записи последовательностей нулевых байт на уровне клиентской библиотеки.

  • --raw-part N — эта опция используется только с форматом raw в режиме частичного импорта и позволяет задать номер части тома, данные которого должны быть записаны. При использовании данных в формате sbd эта информация не требуется, т.к. она записана в файле с данными. Семантика аналогична опции --part-size команды sbdctl export. Для записи произвольных данных в некоторый диапазон тома рекомендуется использовать команду sbdctl write!

  • --raw-part-size size — опция используется только с форматом raw в режиме частичного импорта и позволяет задать размер части тома, данные которой должны быть записаны. При использовании данных в формате sbd эта информация не требуется. Семантика аналогична опции --part-size команды sbdctl export.

  • --verbose — выводит статистику — число выполненных запросов, количество записанных байт — по мере выполнения операции. Статистика печатается в стандартный поток ошибок (stderr). После окончания операции будет показана подробная статистика, аналогично опции --show-stats.

  • --show-stats — выводит в стандартный поток ошибок (stderr`) подробную статистику выполнения операции после ее окончания. Опция важна для диагностики медленной работы sbdctl.

  • --stats-json и --format-json — вывод статистики в формате JSON.

Опциональные параметры, управляющие поведением клиентской библиотеки сетевого блочного устройства:

  • --client-id arg;

  • --tout N;

  • --cs-rpc-tout N;

  • --mds-rpc-tout N;

  • --membership path;

  • --revoke-lease — позволяет отозвать активные lease volume. Необходимо использовать с максимальной осторожностью, это приведет к принудительному отключению других подключенных к тому клиентов.

Все указанные выше параметры управления логированием также поддерживаются и имеют такую же семантику, как и в случае команды sbdctl export.

При указании размеров блоков данных для опций --write-size, --read-buffer, --raw-part-size и подобных можно использовать размерные суффиксы (латинские буквы):

  • k для килобайт;

  • M для мегабайт;

  • G для гигабайт;

  • T для терабайт.

Примеры использования

Загрузка данных в том с автоматическим определением формата файла с образом данных:

sbdctl import --volume-id 0x670adb3d59bff77e --input volume.dat

Загрузка данных в том из файла в формате raw без определения неиспользуемых промежутков:

sbdctl import -v 670adb3d59bff77e -i volume.raw -f raw --raw-detect-holes=0

Загрузка данных с автоматическим определением формата файла, с явным указанием id клиента (1), с использованием последовательной записи 512-килобайтных блоков и тайм-аутом записи 5 секунд:

sbdctl import -v 670adb3d59bff77e -i volume.dat --max-concurrent-requests 1 --write-size 512k --client 1 --tout 5

Загрузка данных в формате sbd со стандартного ввода с использованием вывода из другой программы и показом статистики:

cat volume.sbd | sbdctl import -v 670adb3d59bff77e -f sbd --stdin --show-stats

Загрузка части данных в формате raw из файла:

sbdctl import -v 670adb3d59bff77e -f raw --raw-part-size=32M --raw-part 42 -i volume_part42.bin

Загрузка части данных в формате raw со стандартного ввода:

cat volume_part42.bin | sbdctl import -v 670adb3d59bff77e -f raw --raw-part-size=32M --raw-part 42 --stdin