Чтение произвольного участка данных с тома
Произвольный диапазон актуальных данных тома или одного из его снапшотов читается и записывается в указанное место (файл или стандартный поток вывода). Действие выполняется с помощью операции 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.
- Примеры использования
- Чтение произвольного участка данных тома напрямую с указанного CS