forked from vitalif/vitastor
Add scrub documentation
parent
3475772b07
commit
8d40ad99a6
|
@ -39,6 +39,13 @@ them, even without restarting by updating configuration in etcd.
|
||||||
- [throttle_target_parallelism](#throttle_target_parallelism)
|
- [throttle_target_parallelism](#throttle_target_parallelism)
|
||||||
- [throttle_threshold_us](#throttle_threshold_us)
|
- [throttle_threshold_us](#throttle_threshold_us)
|
||||||
- [osd_memlock](#osd_memlock)
|
- [osd_memlock](#osd_memlock)
|
||||||
|
- [no_scrub](#no_scrub)
|
||||||
|
- [auto_scrub](#auto_scrub)
|
||||||
|
- [scrub_interval](#scrub_interval)
|
||||||
|
- [scrub_queue_depth](#scrub_queue_depth)
|
||||||
|
- [scrub_sleep](#scrub_sleep)
|
||||||
|
- [scrub_list_limit](#scrub_list_limit)
|
||||||
|
- [scrub_ec_max_bruteforce](#scrub_ec_max_bruteforce)
|
||||||
|
|
||||||
## etcd_report_interval
|
## etcd_report_interval
|
||||||
|
|
||||||
|
@ -332,4 +339,81 @@ doesn't need to be changed.
|
||||||
- Type: boolean
|
- Type: boolean
|
||||||
- Default: false
|
- Default: false
|
||||||
|
|
||||||
Lock all OSD memory to prevent it from being unloaded into swap with mlockall(). Requires sufficient ulimit -l (max locked memory).
|
Lock all OSD memory to prevent it from being unloaded into swap with
|
||||||
|
mlockall(). Requires sufficient ulimit -l (max locked memory).
|
||||||
|
|
||||||
|
## no_scrub
|
||||||
|
|
||||||
|
- Type: boolean
|
||||||
|
- Default: false
|
||||||
|
- Can be changed online: yes
|
||||||
|
|
||||||
|
Disable data scrubbing (background consistency check), even if it is scheduled.
|
||||||
|
|
||||||
|
## auto_scrub
|
||||||
|
|
||||||
|
- Type: boolean
|
||||||
|
- Default: false
|
||||||
|
- Can be changed online: yes
|
||||||
|
|
||||||
|
Schedule data scrubbing to run every `scrub_interval` automatically. You can
|
||||||
|
start/schedule scrubbing manually by updating `next_scrub` key in
|
||||||
|
`/pg/history/...` values in etcd if it is disabled.
|
||||||
|
|
||||||
|
## scrub_interval
|
||||||
|
|
||||||
|
- Type: string
|
||||||
|
- Default: 30d
|
||||||
|
- Can be changed online: yes
|
||||||
|
|
||||||
|
Default automatic scrubbing interval for all pools. Numbers without suffix
|
||||||
|
are treated as seconds, possible unit suffixes include 's' (seconds),
|
||||||
|
'm' (minutes), 'h' (hours), 'd' (days), 'M' (months) and 'y' (years).
|
||||||
|
|
||||||
|
## scrub_queue_depth
|
||||||
|
|
||||||
|
- Type: integer
|
||||||
|
- Default: 1
|
||||||
|
- Can be changed online: yes
|
||||||
|
|
||||||
|
Number of parallel scrubbing operations per one OSD.
|
||||||
|
|
||||||
|
## scrub_sleep
|
||||||
|
|
||||||
|
- Type: milliseconds
|
||||||
|
- Default: 0
|
||||||
|
- Can be changed online: yes
|
||||||
|
|
||||||
|
Additional interval between two consecutive scrubbing operations on one OSD.
|
||||||
|
Can be used to slow down scrubbing if it affects user load too much.
|
||||||
|
|
||||||
|
## scrub_list_limit
|
||||||
|
|
||||||
|
- Type: integer
|
||||||
|
- Default: 1000
|
||||||
|
- Can be changed online: yes
|
||||||
|
|
||||||
|
Number of objects to list in one listing operation during scrub.
|
||||||
|
|
||||||
|
## scrub_ec_max_bruteforce
|
||||||
|
|
||||||
|
- Type: integer
|
||||||
|
- Default: 100
|
||||||
|
- Can be changed online: yes
|
||||||
|
|
||||||
|
Vitastor can locate corrupted chunks in EC setups with more than 1 parity
|
||||||
|
chunk by brute-forcing all possible error locations. This configuration
|
||||||
|
value limits the maximum number of checked combinations. You can try to
|
||||||
|
increase it if you have EC N+K setup with N and K large enough for
|
||||||
|
combination count `C(N+K-1, K-1) = (N+K-1)! / (K-1)! / N!` to be greater
|
||||||
|
than the default 100.
|
||||||
|
|
||||||
|
If there are too many possible combinations or if multiple combinations give
|
||||||
|
correct results then objects are marked inconsistent and aren't recovered
|
||||||
|
automatically.
|
||||||
|
|
||||||
|
In replicated setups bruteforcing isn't needed, Vitastor just assumes that
|
||||||
|
the variant with most available equal copies is correct. For example, if
|
||||||
|
you have 3 replicas and 1 of them differs, this one is considered to be
|
||||||
|
corrupted. But if there is no "best" version with more copies than all
|
||||||
|
others have then the object is also marked as inconsistent.
|
||||||
|
|
|
@ -40,6 +40,13 @@
|
||||||
- [throttle_target_parallelism](#throttle_target_parallelism)
|
- [throttle_target_parallelism](#throttle_target_parallelism)
|
||||||
- [throttle_threshold_us](#throttle_threshold_us)
|
- [throttle_threshold_us](#throttle_threshold_us)
|
||||||
- [osd_memlock](#osd_memlock)
|
- [osd_memlock](#osd_memlock)
|
||||||
|
- [no_scrub](#no_scrub)
|
||||||
|
- [auto_scrub](#auto_scrub)
|
||||||
|
- [scrub_interval](#scrub_interval)
|
||||||
|
- [scrub_queue_depth](#scrub_queue_depth)
|
||||||
|
- [scrub_sleep](#scrub_sleep)
|
||||||
|
- [scrub_list_limit](#scrub_list_limit)
|
||||||
|
- [scrub_ec_max_bruteforce](#scrub_ec_max_bruteforce)
|
||||||
|
|
||||||
## etcd_report_interval
|
## etcd_report_interval
|
||||||
|
|
||||||
|
@ -346,4 +353,88 @@ Flusher - это микро-поток (корутина), которая коп
|
||||||
- Тип: булево (да/нет)
|
- Тип: булево (да/нет)
|
||||||
- Значение по умолчанию: false
|
- Значение по умолчанию: false
|
||||||
|
|
||||||
Блокировать всю память OSD с помощью mlockall, чтобы запретить её выгрузку в пространство подкачки. Требует достаточного значения ulimit -l (лимита заблокированной памяти).
|
Блокировать всю память OSD с помощью mlockall, чтобы запретить её выгрузку
|
||||||
|
в пространство подкачки. Требует достаточного значения ulimit -l (лимита
|
||||||
|
заблокированной памяти).
|
||||||
|
|
||||||
|
## no_scrub
|
||||||
|
|
||||||
|
- Тип: булево (да/нет)
|
||||||
|
- Значение по умолчанию: false
|
||||||
|
- Можно менять на лету: да
|
||||||
|
|
||||||
|
Отключить скрабы (фоновую проверку данных), даже если она запланирована.
|
||||||
|
|
||||||
|
## auto_scrub
|
||||||
|
|
||||||
|
- Тип: булево (да/нет)
|
||||||
|
- Значение по умолчанию: false
|
||||||
|
- Можно менять на лету: да
|
||||||
|
|
||||||
|
Автоматически планировать фоновую проверку данных раз в `scrub_interval`. Вы
|
||||||
|
можете запустить или запланировать проверку вручную, обновляя значение ключа
|
||||||
|
`next_scrub` внутри значений `/pg/history/...` в etcd, если автоматическое
|
||||||
|
планирование отключено.
|
||||||
|
|
||||||
|
## scrub_interval
|
||||||
|
|
||||||
|
- Тип: строка
|
||||||
|
- Значение по умолчанию: 30d
|
||||||
|
- Можно менять на лету: да
|
||||||
|
|
||||||
|
Интервал автоматической фоновой проверки по умолчанию для всех пулов.
|
||||||
|
Значения без указанной единицы измерения считаются в секундах, допустимые
|
||||||
|
символы единиц измерения в конце: 's' (секунды),
|
||||||
|
'm' (минуты), 'h' (часы), 'd' (дни), 'M' (месяца) или 'y' (годы).
|
||||||
|
|
||||||
|
## scrub_queue_depth
|
||||||
|
|
||||||
|
- Тип: целое число
|
||||||
|
- Значение по умолчанию: 1
|
||||||
|
- Можно менять на лету: да
|
||||||
|
|
||||||
|
Число параллельных операций фоновой проверки на один OSD.
|
||||||
|
|
||||||
|
## scrub_sleep
|
||||||
|
|
||||||
|
- Тип: миллисекунды
|
||||||
|
- Значение по умолчанию: 0
|
||||||
|
- Можно менять на лету: да
|
||||||
|
|
||||||
|
Дополнительный интервал ожидания после фоновой проверки каждого объекта на
|
||||||
|
одном OSD. Может использоваться для замедления скраба, если он слишком
|
||||||
|
сильно влияет на пользовательскую нагрузку.
|
||||||
|
|
||||||
|
## scrub_list_limit
|
||||||
|
|
||||||
|
- Тип: целое число
|
||||||
|
- Значение по умолчанию: 1000
|
||||||
|
- Можно менять на лету: да
|
||||||
|
|
||||||
|
Размер загружаемых за одну операцию списков объектов в процессе фоновой
|
||||||
|
проверки.
|
||||||
|
|
||||||
|
## scrub_ec_max_bruteforce
|
||||||
|
|
||||||
|
- Тип: целое число
|
||||||
|
- Значение по умолчанию: 100
|
||||||
|
- Можно менять на лету: да
|
||||||
|
|
||||||
|
Vitastor старается определить повреждённые части объектов при использовании
|
||||||
|
EC (кодов коррекции ошибок) с более, чем 1 диском чётности, путём перебора
|
||||||
|
всех возможных комбинаций ошибочных частей. Данное значение конфигурации
|
||||||
|
ограничивает число перебираемых комбинаций. Вы можете попробовать поднять
|
||||||
|
его, если используете схему кодирования EC N+K с N и K, достаточно большими
|
||||||
|
для того, чтобы число сочетаний `C(N+K-1, K-1) = (N+K-1)! / (K-1)! / N!`
|
||||||
|
было больше, чем стандартное значение 100.
|
||||||
|
|
||||||
|
Если возможных комбинаций слишком много или если корректная комбинаций не
|
||||||
|
определяется однозначно, объекты помечаются неконсистентными (inconsistent)
|
||||||
|
и не восстанавливаются автоматически.
|
||||||
|
|
||||||
|
При использовании репликации перебор не нужен, Vitastor просто предполагает,
|
||||||
|
что вариант объекта с наибольшим количеством одинаковых копий корректен.
|
||||||
|
Например, если вы используете 3 реплики и 1 из них отличается, эта 1 копия
|
||||||
|
считается некорректной. Однако, если "лучшую" версию с числом доступных
|
||||||
|
копий большим, чем у всех других версий, найти невозможно, то объект тоже
|
||||||
|
маркируется неконсистентным.
|
||||||
|
|
|
@ -40,6 +40,7 @@ Parameters:
|
||||||
- [root_node](#root_node)
|
- [root_node](#root_node)
|
||||||
- [osd_tags](#osd_tags)
|
- [osd_tags](#osd_tags)
|
||||||
- [primary_affinity_tags](#primary_affinity_tags)
|
- [primary_affinity_tags](#primary_affinity_tags)
|
||||||
|
- [scrub_interval](#scrub_interval)
|
||||||
|
|
||||||
Examples:
|
Examples:
|
||||||
|
|
||||||
|
@ -272,6 +273,13 @@ Specifies OSD tags to prefer putting primary OSDs in this pool to.
|
||||||
Note that for EC/XOR pools Vitastor always prefers to put primary OSD on one
|
Note that for EC/XOR pools Vitastor always prefers to put primary OSD on one
|
||||||
of the OSDs containing a data chunk for a PG.
|
of the OSDs containing a data chunk for a PG.
|
||||||
|
|
||||||
|
## scrub_interval
|
||||||
|
|
||||||
|
- Type: time interval (number + unit s/m/h/d/M/y)
|
||||||
|
|
||||||
|
Automatic scrubbing interval for this pool. Overrides
|
||||||
|
[global scrub_interval setting](osd.en.md#scrub_interval).
|
||||||
|
|
||||||
# Examples
|
# Examples
|
||||||
|
|
||||||
## Replicated pool
|
## Replicated pool
|
||||||
|
|
|
@ -39,6 +39,7 @@
|
||||||
- [root_node](#root_node)
|
- [root_node](#root_node)
|
||||||
- [osd_tags](#osd_tags)
|
- [osd_tags](#osd_tags)
|
||||||
- [primary_affinity_tags](#primary_affinity_tags)
|
- [primary_affinity_tags](#primary_affinity_tags)
|
||||||
|
- [scrub_interval](#scrub_interval)
|
||||||
|
|
||||||
Примеры:
|
Примеры:
|
||||||
|
|
||||||
|
@ -276,6 +277,13 @@ PG в Vitastor эферемерны, то есть вы можете менят
|
||||||
для PG этого пула. Имейте в виду, что для EC-пулов Vitastor также всегда
|
для PG этого пула. Имейте в виду, что для EC-пулов Vitastor также всегда
|
||||||
предпочитает помещать первичный OSD на один из OSD с данными, а не с чётностью.
|
предпочитает помещать первичный OSD на один из OSD с данными, а не с чётностью.
|
||||||
|
|
||||||
|
## scrub_interval
|
||||||
|
|
||||||
|
- Тип: временной интервал (число + единица измерения s/m/h/d/M/y)
|
||||||
|
|
||||||
|
Интервал скраба, то есть, автоматической фоновой проверки данных для данного пула.
|
||||||
|
Переопределяет [глобальную настройку scrub_interval](osd.ru.md#scrub_interval).
|
||||||
|
|
||||||
# Примеры
|
# Примеры
|
||||||
|
|
||||||
## Реплицированный пул
|
## Реплицированный пул
|
||||||
|
|
|
@ -375,10 +375,112 @@
|
||||||
- name: osd_memlock
|
- name: osd_memlock
|
||||||
type: bool
|
type: bool
|
||||||
default: false
|
default: false
|
||||||
info: >
|
info: |
|
||||||
Lock all OSD memory to prevent it from being unloaded into swap with
|
Lock all OSD memory to prevent it from being unloaded into swap with
|
||||||
mlockall(). Requires sufficient ulimit -l (max locked memory).
|
mlockall(). Requires sufficient ulimit -l (max locked memory).
|
||||||
info_ru: >
|
info_ru: |
|
||||||
Блокировать всю память OSD с помощью mlockall, чтобы запретить её выгрузку
|
Блокировать всю память OSD с помощью mlockall, чтобы запретить её выгрузку
|
||||||
в пространство подкачки. Требует достаточного значения ulimit -l (лимита
|
в пространство подкачки. Требует достаточного значения ulimit -l (лимита
|
||||||
заблокированной памяти).
|
заблокированной памяти).
|
||||||
|
- name: no_scrub
|
||||||
|
type: bool
|
||||||
|
default: false
|
||||||
|
online: true
|
||||||
|
info: |
|
||||||
|
Disable data scrubbing (background consistency check), even if it is scheduled.
|
||||||
|
info_ru: |
|
||||||
|
Отключить скрабы (фоновую проверку данных), даже если она запланирована.
|
||||||
|
- name: auto_scrub
|
||||||
|
type: bool
|
||||||
|
default: false
|
||||||
|
online: true
|
||||||
|
info: |
|
||||||
|
Schedule data scrubbing to run every `scrub_interval` automatically. You can
|
||||||
|
start/schedule scrubbing manually by updating `next_scrub` key in
|
||||||
|
`/pg/history/...` values in etcd if it is disabled.
|
||||||
|
info_ru: |
|
||||||
|
Автоматически планировать фоновую проверку данных раз в `scrub_interval`. Вы
|
||||||
|
можете запустить или запланировать проверку вручную, обновляя значение ключа
|
||||||
|
`next_scrub` внутри значений `/pg/history/...` в etcd, если автоматическое
|
||||||
|
планирование отключено.
|
||||||
|
- name: scrub_interval
|
||||||
|
type: string
|
||||||
|
default: 30d
|
||||||
|
online: true
|
||||||
|
info: |
|
||||||
|
Default automatic scrubbing interval for all pools. Numbers without suffix
|
||||||
|
are treated as seconds, possible unit suffixes include 's' (seconds),
|
||||||
|
'm' (minutes), 'h' (hours), 'd' (days), 'M' (months) and 'y' (years).
|
||||||
|
info_ru: |
|
||||||
|
Интервал автоматической фоновой проверки по умолчанию для всех пулов.
|
||||||
|
Значения без указанной единицы измерения считаются в секундах, допустимые
|
||||||
|
символы единиц измерения в конце: 's' (секунды),
|
||||||
|
'm' (минуты), 'h' (часы), 'd' (дни), 'M' (месяца) или 'y' (годы).
|
||||||
|
- name: scrub_queue_depth
|
||||||
|
type: int
|
||||||
|
default: 1
|
||||||
|
online: true
|
||||||
|
info: |
|
||||||
|
Number of parallel scrubbing operations per one OSD.
|
||||||
|
info_ru: |
|
||||||
|
Число параллельных операций фоновой проверки на один OSD.
|
||||||
|
- name: scrub_sleep
|
||||||
|
type: ms
|
||||||
|
default: 0
|
||||||
|
online: true
|
||||||
|
info: |
|
||||||
|
Additional interval between two consecutive scrubbing operations on one OSD.
|
||||||
|
Can be used to slow down scrubbing if it affects user load too much.
|
||||||
|
info_ru: |
|
||||||
|
Дополнительный интервал ожидания после фоновой проверки каждого объекта на
|
||||||
|
одном OSD. Может использоваться для замедления скраба, если он слишком
|
||||||
|
сильно влияет на пользовательскую нагрузку.
|
||||||
|
- name: scrub_list_limit
|
||||||
|
type: int
|
||||||
|
default: 1000
|
||||||
|
online: true
|
||||||
|
info: |
|
||||||
|
Number of objects to list in one listing operation during scrub.
|
||||||
|
info_ru: |
|
||||||
|
Размер загружаемых за одну операцию списков объектов в процессе фоновой
|
||||||
|
проверки.
|
||||||
|
- name: scrub_ec_max_bruteforce
|
||||||
|
type: int
|
||||||
|
default: 100
|
||||||
|
online: true
|
||||||
|
info: |
|
||||||
|
Vitastor can locate corrupted chunks in EC setups with more than 1 parity
|
||||||
|
chunk by brute-forcing all possible error locations. This configuration
|
||||||
|
value limits the maximum number of checked combinations. You can try to
|
||||||
|
increase it if you have EC N+K setup with N and K large enough for
|
||||||
|
combination count `C(N+K-1, K-1) = (N+K-1)! / (K-1)! / N!` to be greater
|
||||||
|
than the default 100.
|
||||||
|
|
||||||
|
If there are too many possible combinations or if multiple combinations give
|
||||||
|
correct results then objects are marked inconsistent and aren't recovered
|
||||||
|
automatically.
|
||||||
|
|
||||||
|
In replicated setups bruteforcing isn't needed, Vitastor just assumes that
|
||||||
|
the variant with most available equal copies is correct. For example, if
|
||||||
|
you have 3 replicas and 1 of them differs, this one is considered to be
|
||||||
|
corrupted. But if there is no "best" version with more copies than all
|
||||||
|
others have then the object is also marked as inconsistent.
|
||||||
|
info_ru: |
|
||||||
|
Vitastor старается определить повреждённые части объектов при использовании
|
||||||
|
EC (кодов коррекции ошибок) с более, чем 1 диском чётности, путём перебора
|
||||||
|
всех возможных комбинаций ошибочных частей. Данное значение конфигурации
|
||||||
|
ограничивает число перебираемых комбинаций. Вы можете попробовать поднять
|
||||||
|
его, если используете схему кодирования EC N+K с N и K, достаточно большими
|
||||||
|
для того, чтобы число сочетаний `C(N+K-1, K-1) = (N+K-1)! / (K-1)! / N!`
|
||||||
|
было больше, чем стандартное значение 100.
|
||||||
|
|
||||||
|
Если возможных комбинаций слишком много или если корректная комбинаций не
|
||||||
|
определяется однозначно, объекты помечаются неконсистентными (inconsistent)
|
||||||
|
и не восстанавливаются автоматически.
|
||||||
|
|
||||||
|
При использовании репликации перебор не нужен, Vitastor просто предполагает,
|
||||||
|
что вариант объекта с наибольшим количеством одинаковых копий корректен.
|
||||||
|
Например, если вы используете 3 реплики и 1 из них отличается, эта 1 копия
|
||||||
|
считается некорректной. Однако, если "лучшую" версию с числом доступных
|
||||||
|
копий большим, чем у всех других версий, найти невозможно, то объект тоже
|
||||||
|
маркируется неконсистентным.
|
||||||
|
|
|
@ -29,6 +29,7 @@
|
||||||
- Snapshots and copy-on-write image clones
|
- Snapshots and copy-on-write image clones
|
||||||
- [Write throttling to smooth random write workloads in SSD+HDD configurations](../config/osd.en.md#throttle_small_writes)
|
- [Write throttling to smooth random write workloads in SSD+HDD configurations](../config/osd.en.md#throttle_small_writes)
|
||||||
- [RDMA/RoCEv2 support via libibverbs](../config/network.en.md#rdma_device)
|
- [RDMA/RoCEv2 support via libibverbs](../config/network.en.md#rdma_device)
|
||||||
|
- [Scrubbing without checksums](../config/osd.en.md#no_scrub) (verification of copies)
|
||||||
|
|
||||||
## Plugins and tools
|
## Plugins and tools
|
||||||
|
|
||||||
|
@ -54,7 +55,6 @@ The following features are planned for the future:
|
||||||
- iSCSI proxy
|
- iSCSI proxy
|
||||||
- Multi-threaded client
|
- Multi-threaded client
|
||||||
- Faster failover
|
- Faster failover
|
||||||
- Scrubbing without checksums (verification of replicas)
|
|
||||||
- Checksums
|
- Checksums
|
||||||
- Tiered storage (SSD caching)
|
- Tiered storage (SSD caching)
|
||||||
- NVDIMM support
|
- NVDIMM support
|
||||||
|
|
|
@ -31,6 +31,7 @@
|
||||||
- Снапшоты и copy-on-write клоны
|
- Снапшоты и copy-on-write клоны
|
||||||
- [Сглаживание производительности случайной записи в SSD+HDD конфигурациях](../config/osd.ru.md#throttle_small_writes)
|
- [Сглаживание производительности случайной записи в SSD+HDD конфигурациях](../config/osd.ru.md#throttle_small_writes)
|
||||||
- [Поддержка RDMA/RoCEv2 через libibverbs](../config/network.ru.md#rdma_device)
|
- [Поддержка RDMA/RoCEv2 через libibverbs](../config/network.ru.md#rdma_device)
|
||||||
|
- [Фоновая проверка целостности без контрольных сумм](../config/osd.ru.md#no_scrub) (сверка копий)
|
||||||
|
|
||||||
## Драйверы и инструменты
|
## Драйверы и инструменты
|
||||||
|
|
||||||
|
@ -54,7 +55,6 @@
|
||||||
- iSCSI-прокси
|
- iSCSI-прокси
|
||||||
- Многопоточный клиент
|
- Многопоточный клиент
|
||||||
- Более быстрое переключение при отказах
|
- Более быстрое переключение при отказах
|
||||||
- Фоновая проверка целостности без контрольных сумм (сверка реплик)
|
|
||||||
- Контрольные суммы
|
- Контрольные суммы
|
||||||
- Поддержка SSD-кэширования (tiered storage)
|
- Поддержка SSD-кэширования (tiered storage)
|
||||||
- Поддержка NVDIMM
|
- Поддержка NVDIMM
|
||||||
|
|
|
@ -20,6 +20,8 @@ It supports the following commands:
|
||||||
- [flatten](#flatten)
|
- [flatten](#flatten)
|
||||||
- [rm-data](#rm-data)
|
- [rm-data](#rm-data)
|
||||||
- [merge-data](#merge-data)
|
- [merge-data](#merge-data)
|
||||||
|
- [describe](#describe)
|
||||||
|
- [fix](#fix)
|
||||||
- [alloc-osd](#alloc-osd)
|
- [alloc-osd](#alloc-osd)
|
||||||
- [rm-osd](#rm-osd)
|
- [rm-osd](#rm-osd)
|
||||||
|
|
||||||
|
@ -174,6 +176,51 @@ Merge layer data without changing metadata. Merge `<from>`..`<to>` to `<target>`
|
||||||
`<to>` must be a child of `<from>` and `<target>` may be one of the layers between
|
`<to>` must be a child of `<from>` and `<target>` may be one of the layers between
|
||||||
`<from>` and `<to>`, including `<from>` and `<to>`.
|
`<from>` and `<to>`, including `<from>` and `<to>`.
|
||||||
|
|
||||||
|
## describe
|
||||||
|
|
||||||
|
`vitastor-cli describe [--osds <osds>] [--object-state <states>] [--pool <pool>]
|
||||||
|
[--inode <ino>] [--min-inode <ino>] [--max-inode <ino>]
|
||||||
|
[--min-offset <offset>] [--max-offset <offset>]`
|
||||||
|
|
||||||
|
Describe unclean object locations in the cluster.
|
||||||
|
|
||||||
|
```
|
||||||
|
--osds <osds>
|
||||||
|
Only list objects from primary OSD(s) <osds>.
|
||||||
|
--object-state <states>
|
||||||
|
Only list objects in given state(s). State(s) may include:
|
||||||
|
degraded, misplaced, incomplete, corrupted, inconsistent.
|
||||||
|
--pool <pool name or number>
|
||||||
|
Only list objects in the given pool.
|
||||||
|
--inode, --min-inode, --max-inode
|
||||||
|
Restrict listing to specific inode numbers.
|
||||||
|
--min-offset, --max-offset
|
||||||
|
Restrict listing to specific offsets inside inodes.
|
||||||
|
```
|
||||||
|
|
||||||
|
## fix
|
||||||
|
|
||||||
|
`vitastor-cli fix [--objects <objects>] [--bad-osds <osds>] [--part <part>] [--check no]`
|
||||||
|
|
||||||
|
Fix inconsistent objects in the cluster by deleting some copies.
|
||||||
|
|
||||||
|
```
|
||||||
|
--objects <objects>
|
||||||
|
Objects to fix, either in plain text or JSON format. If not specified,
|
||||||
|
object list will be read from STDIN in one of the same formats.
|
||||||
|
Plain text format: 0x<inode>:0x<stripe> <any delimiter> 0x<inode>:0x<stripe> ...
|
||||||
|
JSON format: [{"inode":"0x...","stripe":"0x..."},...]
|
||||||
|
--bad-osds <osds>
|
||||||
|
Remove inconsistent copies/parts of objects from these OSDs, effectively
|
||||||
|
marking them bad and allowing Vitastor to recover objects from other copies.
|
||||||
|
--part <number>
|
||||||
|
Only remove EC part <number> (from 0 to pg_size-1), required for extreme
|
||||||
|
edge cases where one OSD has multiple parts of a EC object.
|
||||||
|
--check no
|
||||||
|
Do not recheck that requested objects are actually inconsistent,
|
||||||
|
delete requested copies/parts anyway.
|
||||||
|
```
|
||||||
|
|
||||||
## alloc-osd
|
## alloc-osd
|
||||||
|
|
||||||
`vitastor-cli alloc-osd`
|
`vitastor-cli alloc-osd`
|
||||||
|
|
|
@ -184,6 +184,59 @@ vitastor-cli snap-create [-p|--pool <id|name>] <image>@<snapshot>
|
||||||
в целевой образ `<target>`. `<to>` должен быть дочерним образом `<from>`, а `<target>`
|
в целевой образ `<target>`. `<to>` должен быть дочерним образом `<from>`, а `<target>`
|
||||||
должен быть одним из слоёв между `<from>` и `<to>`, включая сами `<from>` и `<to>`.
|
должен быть одним из слоёв между `<from>` и `<to>`, включая сами `<from>` и `<to>`.
|
||||||
|
|
||||||
|
## describe
|
||||||
|
|
||||||
|
`vitastor-cli describe [--osds <osds>] [--object-state <состояния>] [--pool <пул>]
|
||||||
|
[--inode <номер>] [--min-inode <номер>] [--max-inode <номер>]
|
||||||
|
[--min-offset <смещение>] [--max-offset <смещение>]`
|
||||||
|
|
||||||
|
Описать состояние "грязных" объектов в кластере, то есть таких объектов, копии
|
||||||
|
или части которых хранятся на наборе OSD, не равном целевому.
|
||||||
|
|
||||||
|
```
|
||||||
|
--osds <osds>
|
||||||
|
Перечислять только объекты с первичных OSD из списка <osds>.
|
||||||
|
--object-state <состояния>
|
||||||
|
Перечислять только объекты в указанных состояниях. Возможные состояния
|
||||||
|
объектов:
|
||||||
|
- degraded - деградированная избыточность
|
||||||
|
- misplaced - перемещённый
|
||||||
|
- incomplete - нечитаемый из-за потери большего числа частей, чем допустимо
|
||||||
|
- corrupted - с одной или более повреждённой частью
|
||||||
|
- inconsistent - неконсистентный, с неоднозначным расхождением копий/частей
|
||||||
|
--pool <имя или ID пула>
|
||||||
|
Перечислять только объекты из заданного пула.
|
||||||
|
--inode, --min-inode, --max-inode
|
||||||
|
Перечислять только объекты из указанных номеров инодов (образов).
|
||||||
|
--min-offset, --max-offset
|
||||||
|
Перечислять только объекты с заданных смещений внутри образов.
|
||||||
|
```
|
||||||
|
|
||||||
|
## fix
|
||||||
|
|
||||||
|
`vitastor-cli fix [--objects <объекты>] [--bad-osds <osds>] [--part <номер>] [--check no]`
|
||||||
|
|
||||||
|
Исправить неконсистентные (неоднозначные) объекты путём удаления части копий.
|
||||||
|
|
||||||
|
```
|
||||||
|
--objects <объекты>
|
||||||
|
Объекты для исправления - в простом текстовом или JSON формате. Если опция
|
||||||
|
не указана, список объектов читается со стандартного ввода в тех же форматах.
|
||||||
|
Простой формат: 0x<инод>:0x<смещение> <любой разделитель> 0x<инод>:0x<смещение> ...
|
||||||
|
Формат JSON: [{"inode":"0x<инод>","stripe":"0x<смещение>"},...]
|
||||||
|
--bad-osds <osds>
|
||||||
|
Удалить неконсистентные копии/части объектов с данных OSD, таким образом
|
||||||
|
признавая потерю этих копий и позволяя Vitastor-у восстановить объекты из
|
||||||
|
других копий.
|
||||||
|
--part <номер>
|
||||||
|
Удалить только части EC с заданным номером (от 0 до pg_size-1). Нужно только
|
||||||
|
в редких граничных случаях, когда один и тот же OSD содержит несколько частей
|
||||||
|
одного EC-объекта.
|
||||||
|
--check no
|
||||||
|
Не перепроверять, что заданные объекты действительно в неконсистентном
|
||||||
|
состоянии и просто удалять заданные части.
|
||||||
|
```
|
||||||
|
|
||||||
## alloc-osd
|
## alloc-osd
|
||||||
|
|
||||||
`vitastor-cli alloc-osd`
|
`vitastor-cli alloc-osd`
|
||||||
|
|
|
@ -111,6 +111,7 @@ const etcd_tree = {
|
||||||
print_stats_interval: 3,
|
print_stats_interval: 3,
|
||||||
slow_log_interval: 10,
|
slow_log_interval: 10,
|
||||||
inode_vanish_time: 60,
|
inode_vanish_time: 60,
|
||||||
|
no_scrub: false,
|
||||||
auto_scrub: false,
|
auto_scrub: false,
|
||||||
scrub_interval: '30d', // 1s/1m/1h/1d
|
scrub_interval: '30d', // 1s/1m/1h/1d
|
||||||
scrub_queue_depth: 1,
|
scrub_queue_depth: 1,
|
||||||
|
|
12
src/cli.cpp
12
src/cli.cpp
|
@ -76,7 +76,7 @@ static const char* help_text =
|
||||||
"vitastor-cli describe [--osds <osds>] [--object-state <states>] [--pool <pool>] [--inode <ino>] [--min-inode <ino>] [--max-inode <ino>] [--min-offset <offset>] [--max-offset <offset>]\n"
|
"vitastor-cli describe [--osds <osds>] [--object-state <states>] [--pool <pool>] [--inode <ino>] [--min-inode <ino>] [--max-inode <ino>] [--min-offset <offset>] [--max-offset <offset>]\n"
|
||||||
" Describe unclean object locations in the cluster.\n"
|
" Describe unclean object locations in the cluster.\n"
|
||||||
" --osds <osds>\n"
|
" --osds <osds>\n"
|
||||||
" Only list objects from master OSD(s) <osds>.\n"
|
" Only list objects from primary OSD(s) <osds>.\n"
|
||||||
" --object-state <states>\n"
|
" --object-state <states>\n"
|
||||||
" Only list objects in given state(s). State(s) may include:\n"
|
" Only list objects in given state(s). State(s) may include:\n"
|
||||||
" degraded, misplaced, incomplete, corrupted, inconsistent.\n"
|
" degraded, misplaced, incomplete, corrupted, inconsistent.\n"
|
||||||
|
@ -87,7 +87,7 @@ static const char* help_text =
|
||||||
" --min-offset, --max-offset\n"
|
" --min-offset, --max-offset\n"
|
||||||
" Restrict listing to specific offsets inside inodes.\n"
|
" Restrict listing to specific offsets inside inodes.\n"
|
||||||
"\n"
|
"\n"
|
||||||
"vitastor-cli fix [--objects <objects>] [--bad-osds <osds>] [--check no]\n"
|
"vitastor-cli fix [--objects <objects>] [--bad-osds <osds>] [--part <part>] [--check no]\n"
|
||||||
" Fix inconsistent objects in the cluster by deleting some copies.\n"
|
" Fix inconsistent objects in the cluster by deleting some copies.\n"
|
||||||
" --objects <objects>\n"
|
" --objects <objects>\n"
|
||||||
" Objects to fix, either in plain text or JSON format. If not specified,\n"
|
" Objects to fix, either in plain text or JSON format. If not specified,\n"
|
||||||
|
@ -95,11 +95,11 @@ static const char* help_text =
|
||||||
" Plain text format: 0x<inode>:0x<stripe> <any delimiter> 0x<inode>:0x<stripe> ...\n"
|
" Plain text format: 0x<inode>:0x<stripe> <any delimiter> 0x<inode>:0x<stripe> ...\n"
|
||||||
" JSON format: [{\"inode\":\"0x...\",\"stripe\":\"0x...\"},...]\n"
|
" JSON format: [{\"inode\":\"0x...\",\"stripe\":\"0x...\"},...]\n"
|
||||||
" --bad-osds <osds>\n"
|
" --bad-osds <osds>\n"
|
||||||
" Remove inconsistent copies/parts of objects from these OSDs,\n"
|
" Remove inconsistent copies/parts of objects from these OSDs, effectively\n"
|
||||||
" effectively marking them bad and allowing Vitastor to recover.\n"
|
" marking them bad and allowing Vitastor to recover objects from other copies.\n"
|
||||||
" --part <number>\n"
|
" --part <number>\n"
|
||||||
" Only remove EC part <number>, required for extreme edge cases\n"
|
" Only remove EC part <number> (from 0 to pg_size-1), required for extreme\n"
|
||||||
" where one OSD has multiple parts of a EC object.\n"
|
" edge cases where one OSD has multiple parts of a EC object.\n"
|
||||||
" --check no\n"
|
" --check no\n"
|
||||||
" Do not recheck that requested objects are actually inconsistent,\n"
|
" Do not recheck that requested objects are actually inconsistent,\n"
|
||||||
" delete requested copies/parts anyway.\n"
|
" delete requested copies/parts anyway.\n"
|
||||||
|
|
Loading…
Reference in New Issue