nav-img
Evolution

Пометка участков тома как не используемых

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

До начала убедитесь, что:

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

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

  • Нужный том присутствует в системе и диапазон для записи данных не выходит за его границы.

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

Операция sbdctl trim:

sbdctl trim --volume-id <volume_id> --offset <offset> --trim-size <size> <other options>

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

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

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

  • --trim-size size или -s size — задает длину диапазона, который будет помечен как неиспользуемый. Для этой опции можно использовать размерные суффиксы.

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

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

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

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

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

В случае, если смещение и/или размер не выравнены по границе блока, то это приводит к тому, что блоки в начале и/или конце диапазона помечаются как неиспользуемые лишь частично. Физически это приводит к тому, что соответствующие участки блоков заполняются нулями, но блок не помечается, как неиспользуемый. В отличие от sbdctl read и sbdctl write, у параметра offset нет значения по умолчанию.

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

Пометить первые 100 мегабайт тома как неиспользуемые:

sbdctl trim --volume-id 0x670adb3d59bff77e --offset 0 --trim-size 100M

Пометить диапазон от 4 до 6 Гб как неиспользуемый:

sbdctl trim -v 0x670adb3d59bff77e -o 0x100000000 -s 2G

Пометить диапазон от 4 до 6 Гб как неиспользуемый с большим размером батча:

sbdctl trim -v 0x670adb3d59bff77e -o 0x100000000 -s 2G --batch-size 1024 --show-stats