From 1d43387dd8e26b5b304562263b61f52d4d7bde91 Mon Sep 17 00:00:00 2001 From: Allan Jude Date: Thu, 18 Dec 2025 12:25:09 -0500 Subject: [PATCH] zdb: Add -O option for -r to specify object-id "zdb -r -O pool/dataset obj-id destination" will copy the file with object-id obj-id to the named destination; without -O it'll still be interpreted as a pathname. Sponsored-by: Klara, Inc. Sponsored-by: Wasabi Technology, Inc. Reviewed-by: Brian Behlendorf Reviewed-by: Akash B Signed-off-by: Sean Eric Fagan Closes #16307 --- cmd/zdb/zdb.c | 11 ++++++++--- man/man8/zdb.8 | 11 +++++++++++ 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/cmd/zdb/zdb.c b/cmd/zdb/zdb.c index 09e144f66..f4ecba2e5 100644 --- a/cmd/zdb/zdb.c +++ b/cmd/zdb/zdb.c @@ -739,13 +739,14 @@ usage(void) "[-U ]\n\t\t [ [ ...]]\n" "\t%s -O [-K ] \n" "\t%s -r [-K ] \n" + "\t%s -r [-K ] -O \n" "\t%s -R [-A] [-e [-V] [-p ...]] [-U ]\n" "\t\t ::[:]\n" "\t%s -E [-A] word0:word1:...:word15\n" "\t%s -S [-AP] [-e [-V] [-p ...]] [-U ] " "\n\n", cmdname, cmdname, cmdname, cmdname, cmdname, cmdname, cmdname, - cmdname, cmdname, cmdname, cmdname, cmdname); + cmdname, cmdname, cmdname, cmdname, cmdname, cmdname); (void) fprintf(stderr, " Dataset name must include at least one " "separator character '/' or '@'\n"); @@ -9956,7 +9957,7 @@ main(int argc, char **argv) * which imports the pool to the namespace if it's * not in the cachefile. */ - if (dump_opt['O']) { + if (dump_opt['O'] && !dump_opt['r']) { if (argc != 2) usage(); dump_opt['v'] = verbose + 3; @@ -9969,7 +9970,11 @@ main(int argc, char **argv) if (argc != 3) usage(); dump_opt['v'] = verbose; - error = dump_path(argv[0], argv[1], &object); + if (dump_opt['O']) { + object = strtoull(argv[1], NULL, 0); + } else { + error = dump_path(argv[0], argv[1], &object); + } if (error != 0) fatal("internal error: %s", strerror(error)); } diff --git a/man/man8/zdb.8 b/man/man8/zdb.8 index f51e24fa8..2d1742811 100644 --- a/man/man8/zdb.8 +++ b/man/man8/zdb.8 @@ -84,6 +84,11 @@ .Op Fl K Ar key .Ar dataset path destination .Nm +.Fl r +.Fl O +.Op Fl K Ar key +.Ar dataset object-id destination +.Nm .Fl R .Op Fl A .Op Fl e Oo Fl V Oc Oo Fl p Ar path Oc Ns … @@ -376,6 +381,12 @@ Specified .Ar path must be relative to the root of .Ar dataset . +When used with +.Fl O , +the +.Ar path +argument is interpreted as an object identifier, +not a path. This option can be combined with .Fl v for increasing verbosity.