From abd4410a5cd37900c8400ae32cc7dffa6c497d9e Mon Sep 17 00:00:00 2001 From: Yury Luneff Date: Tue, 20 Oct 2026 10:39:53 +0300 Subject: [PATCH] Correct vitastor-cli help for rm, raw-ls, fix and rm-osd - rm: the --exact and --matching descriptions were swapped. - raw-ls: show that --pool_id is required, and --pg_num unless --offset is given, and when the pool configuration fills in the rest. - fix: show --bad-osds as required. - rm-osd: describe -f, --allow-up and --allow-data-loss. Up OSDs are refused too, -f covers them and degraded/offline PGs, and --allow-data-loss covers incomplete ones and implies -f. Apply the same corrections to the CLI documentation. --- docs/usage/cli.en.md | 19 +++++++++++-------- docs/usage/cli.ru.md | 25 +++++++++++++++---------- src/cmd/cli.cpp | 24 +++++++++++++++--------- 3 files changed, 41 insertions(+), 27 deletions(-) diff --git a/docs/usage/cli.en.md b/docs/usage/cli.en.md index 0b700725..a5efcdfd 100644 --- a/docs/usage/cli.en.md +++ b/docs/usage/cli.en.md @@ -231,8 +231,8 @@ Options: * `--writers-stopped` allows optimised removal in case of a single 'slim' read-write child and 'fat' removed parent: the child is merged into parent and parent is renamed to child in that case. In other cases parent layers are always merged into children. -* `--exact` - remove multiple images with names matching given glob patterns. -* `--matching` - remove multiple images with given names +* `--exact` - remove multiple images with given names. +* `--matching` - remove multiple images with names matching given glob patterns. * `--down-ok` - continue deletion/merging even if some data will be left on unavailable OSDs. ## flatten @@ -287,7 +287,7 @@ Describe unclean object locations in the cluster. Options: ## fix -`vitastor-cli fix [--objects ] [--bad-osds ] [--part ] [--check no]` +`vitastor-cli fix [--objects ] --bad-osds [--part ] [--check no]` Fix inconsistent objects in the cluster by deleting some copies. @@ -298,7 +298,7 @@ Fix inconsistent objects in the cluster by deleting some copies. Plain text format: 0x:0x 0x:0x ... JSON format: [{"inode":"0x...","stripe":"0x..."},...] --bad-osds - Remove inconsistent copies/parts of objects from these OSDs, effectively + Required. Remove inconsistent copies/parts of objects from these OSDs, effectively marking them bad and allowing Vitastor to recover objects from other copies. --part Only remove EC part (from 0 to pg_size-1), required for extreme @@ -316,14 +316,17 @@ Allocate a new OSD number and reserve it by creating empty `/osd/stats/` key. ## rm-osd -`vitastor-cli rm-osd [--force] [--allow-data-loss] [--dry-run] [osd_id...]` +`vitastor-cli rm-osd [-f|--force] [--allow-data-loss] [--allow-up] [--dry-run] [osd_id...]` Remove metadata and configuration for specified OSD(s) from etcd. -Refuses to remove OSDs with data without `--force` and `--allow-data-loss`. +Refuses to remove OSDs that are up or whose removal makes PGs degraded, offline or incomplete. -With `--dry-run` only checks if deletion is possible without data loss and -redundancy degradation. +* `-f|--force` - remove OSDs even if they are up or PGs become degraded or offline. +* `--allow-data-loss` - remove OSDs even if PGs or objects become incomplete (DATA LOSS). Implies `--force`. +* `--allow-up` - remove OSDs even if they are up. +* `--dry-run` - only check if deletion is possible without data loss and + redundancy degradation. ## osd-tree diff --git a/docs/usage/cli.ru.md b/docs/usage/cli.ru.md index e4787d15..eb26009f 100644 --- a/docs/usage/cli.ru.md +++ b/docs/usage/cli.ru.md @@ -239,8 +239,8 @@ vitastor-cli dd [iimg= | if=] [oimg= | of=] [bs=1M] \ у удаляемой цепочки есть только один дочерний образ, содержащий небольшой объём данных. В этом случае дочерний образ вливается в родительский и удаляется, а родительский переименовывается в дочерний. -* `--exact` - удалить все образы с именами, подходящими под переданные glob-шаблоны. -* `--matching` - удалить все образы с точно заданными именами. +* `--exact` - удалить все образы с точно заданными именами. +* `--matching` - удалить все образы с именами, подходящими под переданные glob-шаблоны. * `--down-ok` - продолжать удаление/слияние, даже если часть данных останется неудалённой на недоступных OSD. ## flatten @@ -302,7 +302,7 @@ vitastor-cli dd [iimg= | if=] [oimg= | of=] [bs=1M] \ ## fix -`vitastor-cli fix [--objects <объекты>] [--bad-osds ] [--part <номер>] [--check no]` +`vitastor-cli fix [--objects <объекты>] --bad-osds [--part <номер>] [--check no]` Исправить неконсистентные (неоднозначные) объекты путём удаления части копий. @@ -313,9 +313,9 @@ vitastor-cli dd [iimg= | if=] [oimg= | of=] [bs=1M] \ Простой формат: 0x<инод>:0x<смещение> <любой разделитель> 0x<инод>:0x<смещение> ... Формат JSON: [{"inode":"0x<инод>","stripe":"0x<смещение>"},...] --bad-osds - Удалить неконсистентные копии/части объектов с данных OSD, таким образом - признавая потерю этих копий и позволяя Vitastor-у восстановить объекты из - других копий. + Обязательная опция. Удалить неконсистентные копии/части объектов с данных + OSD, таким образом признавая потерю этих копий и позволяя Vitastor-у + восстановить объекты из других копий. --part <номер> Удалить только части EC с заданным номером (от 0 до pg_size-1). Нужно только в редких граничных случаях, когда один и тот же OSD содержит несколько частей @@ -334,14 +334,19 @@ vitastor-cli dd [iimg= | if=] [oimg= | of=] [bs=1M] \ ## rm-osd -`vitastor-cli rm-osd [--force] [--allow-data-loss] [--dry-run] [osd_id...]` +`vitastor-cli rm-osd [-f|--force] [--allow-data-loss] [--allow-up] [--dry-run] [osd_id...]` Удалить метаданные и конфигурацию для заданных OSD из etcd. -Отказывается удалять OSD с данными без опций `--force` и `--allow-data-loss`. +Отказывается удалять работающие OSD, а также OSD, после удаления которых PG станут +деградированными, недоступными (offline) или неполными (incomplete). -С опцией `--dry-run` только проверяет, возможно ли удаление без потери данных и деградации -избыточности. +* `-f|--force` - удалить OSD, даже если они работают или PG станут деградированными или недоступными. +* `--allow-data-loss` - удалить OSD, даже если PG или объекты станут неполными (ПОТЕРЯ ДАННЫХ). + Включает действие `--force`. +* `--allow-up` - удалить OSD, даже если они работают. +* `--dry-run` - только проверить, возможно ли удаление без потери данных и деградации + избыточности. ## osd-tree diff --git a/src/cmd/cli.cpp b/src/cmd/cli.cpp index 28ba05af..3cb34f00 100644 --- a/src/cmd/cli.cpp +++ b/src/cmd/cli.cpp @@ -108,8 +108,8 @@ static const char* help_text = " --writers-stopped allows optimised removal in case of a single 'slim' read-write\n" " child and 'fat' removed parent: the child is merged into parent and parent is renamed\n" " to child in that case. In other cases parent layers are always merged into children.\n" - " --exact Remove multiple images with names matching given glob patterns.\n" - " --matching Remove multiple images with given names\n" + " --exact Remove multiple images with given names.\n" + " --matching Remove multiple images with names matching given glob patterns.\n" " --writers-stopped Allow renaming inodes over their read/write children.\n" " --down-ok Continue deletion/merging even if some data will be left on unavailable OSDs.\n" "\n" @@ -145,12 +145,15 @@ static const char* help_text = " --min-offset, --max-offset\n" " Restrict listing to specific offsets inside inodes.\n" "\n" - "vitastor-cli raw-ls [OPTIONS]\n" + "vitastor-cli raw-ls --pool_id ID (--pg_num NUM|--offset NUM) [OPTIONS]\n" " Find object(s) in the cluster using raw secondary listing operations. Options:\n" " [--min_inode NUM] [--max_inode NUM] [--offset NUM] [--pg_num NUM] [--pg_count COUNT]\n" " [--pg_stripe_size NUM] [--osds 1,2,3,...]\n" + " --pool_id (numeric pool ID) is required. --pg_num is required unless --offset is given,\n" + " in which case the PG is calculated from the offset. --pg_count, --pg_stripe_size and\n" + " --osds default to the pool configuration and are required if the pool does not exist.\n" "\n" - "vitastor-cli fix [--objects ] [--bad-osds ] [--part ] [--check no]\n" + "vitastor-cli fix [--objects ] --bad-osds [--part ] [--check no]\n" " Fix inconsistent objects in the cluster by deleting some copies.\n" " --objects \n" " Objects to fix, either in plain text or JSON format. If not specified,\n" @@ -158,7 +161,7 @@ static const char* help_text = " Plain text format: 0x:0x 0x:0x ...\n" " JSON format: [{\"inode\":\"0x...\",\"stripe\":\"0x...\"},...]\n" " --bad-osds \n" - " Remove inconsistent copies/parts of objects from these OSDs, effectively\n" + " Required. Remove inconsistent copies/parts of objects from these OSDs, effectively\n" " marking them bad and allowing Vitastor to recover objects from other copies.\n" " --part \n" " Only remove EC part (from 0 to pg_size-1), required for extreme\n" @@ -170,11 +173,14 @@ static const char* help_text = "vitastor-cli alloc-osd\n" " Allocate a new OSD number and reserve it by creating empty /osd/stats/ key.\n" "\n" - "vitastor-cli rm-osd [--force] [--allow-data-loss] [--dry-run] [osd_id...]\n" + "vitastor-cli rm-osd [-f|--force] [--allow-data-loss] [--allow-up] [--dry-run] [osd_id...]\n" " Remove metadata and configuration for specified OSD(s) from etcd.\n" - " Refuses to remove OSDs with data without --force and --allow-data-loss.\n" - " With --dry-run only checks if deletion is possible without data loss and\n" - " redundancy degradation.\n" + " Refuses to remove OSDs that are up or whose removal makes PGs degraded, offline or incomplete.\n" + " -f|--force Remove OSDs even if they are up or PGs become degraded or offline.\n" + " --allow-data-loss Remove OSDs even if PGs or objects become incomplete (DATA LOSS). Implies --force.\n" + " --allow-up Remove OSDs even if they are up.\n" + " --dry-run Only check if deletion is possible without data loss and\n" + " redundancy degradation.\n" "\n" "vitastor-cli osd-tree [-l|--long]\n" " Show current OSD tree, optionally with I/O statistics if -l is specified.\n" -- 2.47.3