nav-img
Evolution

Чтение произвольного участка данных с тома

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

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

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

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

  • Нужный том присутствует в системе (например, с помощью команды storage volume list).

При необходимости можно задать и другое расположение для файла с информацией о серверах метаданных (mds_list.yml) с помощью --membership.

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

Операция sbdctl read:

sbdctl read --volume-id <volume_id> <other options>

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

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

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

  • --offset arg — задает смещение, начиная с которого sbdctl read будет читать данные, в виде 64-битного целого числа в шестнадцатеричной системе счисления. Префикс 0x, характерный для такой записи чисел, можно не указывать. Значение по умолчанию — 0, т.е. данные читаются с самого начала тома. Смещение не должно выходить за границы тома.

  • --read-size size или -s size — задает размер данных, которые должны быть прочитаны. По умолчанию равен 4 килобайтам. Размер должен выбираться таким образом, чтобы читаемый интервал не выходил за границы тома.

  • --snapshot N — позволяет выбрать снапшот для чтения. По умолчанию читаются данные, соответствующие актуальному состоянию тома. Список доступных снапшотов можно посмотреть с помощью команды storage snap list.

  • --batch-size N — задает ограничение на блоков, которое читается за один вызов клиентской библиотеки блочного устройства. По умолчанию читается не более, чем 1024 блока. Допустимые значения — от 1 до 16384, при увеличении этого значения может потребоваться увеличивать соответствующий тайм-аут с помощью опции --tout.

  • --format arg или -f arg — задает формат вывода прочитанных данных. Допустимые значения — hex для вывода в виде шестнадцатеричного побайтового дампа и bin для вывода данных в двоичном виде «как есть» (аналогично формату raw, используемому в sbdctl export). По умолчанию используется формат hex. Формат образа volume sbd не поддерживается.

  • --output file или -o file — задает путь к файлу, в который будут записаны прочитанные данные, или же stdout для вывода в стандартный поток вывода, аналогично опции --stdout. По умолчанию используется вывод в stdout.

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

  • --write-buffer size — позволяет выбрать размер буфера в памяти для записи на локальный диск. Значение по умолчанию — 4 мегабайта. Возможные значения — от 8 килобайт до 128 мегабайт.

  • --overwrite — позволяет утилите перезаписывать уже существующий выходной файл. Без указания этой опции утилита будет сообщать об ошибке при попытке перезаписи созданного ранее файла. Эта опция не работает с выходными файлами специальных типов (FIFO, сокет или символьное устройство), т.к. в таком случае будет осуществлена запись в уже существующий специальный файл.

  • --cold — включает специальный режим чтения, в котором CS вычитывает данные из cold store напрямую, минуя hot store. Этот режим по умолчанию выключен.

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

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

Поддерживаются все указанные параметры, управляющие логированием и параметры, управляющие поведением клиентской библиотеки. Oни являются опциональными и имеют такую же семантику, как и в случае операций export и import.

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

Чтение первых 8 КБ и вывод в файл в виде шестнадцатеричного дампа:

sbdctl read --volume-id 0x670adb3d59bff77e --read-size 8k --format hex --output first_8k.txt

Чтение одного байта по некоторому смещению и вывод на stdout в шестнадцатеричном виде:

sbdctl read -v 0x670adb3d59bff77e --read-size 1 --offset 0xCB78A12F -f hex

Сохранить второй гигабайт данных с volume в файл в двоичном виде, перезаписываю существующие файлы:

sbdctl read -v 0x670adb3d59bff77e --offset 0x40000000 -s 1G -f bin -o 1_to_2G.bin --overwrite

Тест на скорость чтения: прочитать 10 Гб с тома, записать в /dev/null и вывести статистику:

sbdctl read -v 0x670adb3d59bff77e -s 10G -f bin -o /dev/null --show-stats

Перенаправление прочитанных данных на вход другой программы (curl):

sbdctl read -v 0x670adb3d59bff77e --offset 0x80000000 -s 1M -f bin --stdout | curl -X POST --data-binary @- ...
. _<readcs>:

Чтение произвольного участка данных тома напрямую с указанного CS

Операция аналогична sbdctl read, но используется специальный режим чтения, в котором данные некоторого чанка читаются только с указанного CS. Могут быть прочитаны только те участки данных, которые присутствуют на указанном CS, в противном случае появится ошибка чтения.

Операция sbdctl readcs:

sbdctl readcs --volume-id <volume_id> --chunk-idx <chunk_idx> --cs-id <cs_id> <other options>

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

  • --volume-id volume_id или -v volume_id — как и в случае sbdctl read задает идентификатор тома.

  • --chunk-idx N — задает индекс чанка в виде десятичного числа. Индекс чанка должен быть валидным для указанного тома. Список доступных чанков можно получить с помощью команды storage volume chunks. Чтение данных выполняется исключительно в пределах границ этого чанка.

  • --cs-id N — задает идентификатор чанк сервера, с которого будут запрошены данные в виде десятичного числа, отличного от ноля. Список всех доступных CS можно получить с помощью команды storage cs list, а список CS, хранящих данные указанного чанка — с помощью команды storage volume chunks.

Остальные параметры являются необязательными и имеют такую же семантику как sbdctl read со следующими исключениями:

  • Смещение, по которому читаются данные (опция --offset arg) задается от начала указанного чанка, а не тома.

  • Размер читаемых данных (опция --read-size size или -s size) и смещение должны выбираться таким образом, чтобы читаемый интервал не выходил за границы указанного чанка, а не тома, как в случае sbdctl read.

В данный момент планируется дальнейшая доработка специальных режимов чтения для sbdctl.