[DragonFlyBSD - Submit #1497] (Closed) HAMMER Util - add `mirror-dump header' to retrieve header information from the stream

bugtracker-admin at leaf.dragonflybsd.org bugtracker-admin at leaf.dragonflybsd.org
Thu Mar 13 05:05:57 PDT 2014


Issue #1497 has been updated by tuxillo.

Status changed from New to Closed
% Done changed from 0 to 100

Applied in changeset commit:9f1b01216a394a5d97b8d4eaa4c56c449606a6fd.

----------------------------------------
Submit #1497: HAMMER Util - add `mirror-dump header' to retrieve header information from the stream
http://bugs.dragonflybsd.org/issues/1497#change-11895

* Author: qhwt+dfly
* Status: Closed
* Priority: Normal
* Assignee: tuxillo
* Category: Userland
* Target version: 3.8.0
----------------------------------------
HAMMER Util - add `mirror-dump header' to retrieve header information from the stream

This may be useful when you want to archive PFSes on a HAMMER filesystem
to a non-hammer storage, format the original or a new hard drive, then
restore the PFSes back on, realizing you forgot writing down the shared-uuid's
(OK you probably won't, but I did :)  The output is similar to that of
`hammer pfs-status' command applied to a live PFS, without `PFS #n' line
and the corresponding curly-brace.

---
 sbin/hammer/cmd_mirror.c   |   15 +++++++++++++--
 sbin/hammer/cmd_pseudofs.c |    2 --
 sbin/hammer/hammer.8       |    5 ++++-
 sbin/hammer/hammer.c       |    4 ++--
 sbin/hammer/hammer.h       |    4 ++--
 5 files changed, 21 insertions(+), 9 deletions(-)

diff --git a/sbin/hammer/cmd_mirror.c b/sbin/hammer/cmd_mirror.c
index a17fced..d463858 100644
--- a/sbin/hammer/cmd_mirror.c
+++ b/sbin/hammer/cmd_mirror.c
@@ -717,7 +717,7 @@ again:
 }

 void
-hammer_cmd_mirror_dump(void)
+hammer_cmd_mirror_dump(char **av, int ac)
 {
 	char *buf = malloc(SERIALBUF_SIZE);
 	struct hammer_ioc_mrecord_head pickup;
@@ -726,6 +726,12 @@ hammer_cmd_mirror_dump(void)
 	int size;
 	int offset;
 	int bytes;
+	int header_only = 0;
+
+	if (ac == 1 && strcmp(*av, "header") == 0)
+		header_only = 1;
+	else if (ac != 0)
+		mirror_usage(1);

 	/*
 	 * Read and process the PFS header 
@@ -735,6 +741,11 @@ hammer_cmd_mirror_dump(void)

 	mrec = read_mrecord(0, &error, &pickup);

+	if (header_only && mrec != NULL) {
+		dump_pfsd(&mrec->pfs.pfsd);
+		return;
+	}
+
 	/*
 	 * Read and process bulk records
 	 */
@@ -1406,7 +1417,7 @@ mirror_usage(int code)
 		"hammer mirror-read <filesystem> [begin-tid]\n"
 		"hammer mirror-read-stream <filesystem> [begin-tid]\n"
 		"hammer mirror-write <filesystem>\n"
-		"hammer mirror-dump\n"
+		"hammer mirror-dump [header]\n"
 		"hammer mirror-copy [[user@]host:]<filesystem>"
 				  " [[user@]host:]<filesystem>\n"
 		"hammer mirror-stream [[user@]host:]<filesystem>"
diff --git a/sbin/hammer/cmd_pseudofs.c b/sbin/hammer/cmd_pseudofs.c
index a987eff..db2beb7 100644
--- a/sbin/hammer/cmd_pseudofs.c
+++ b/sbin/hammer/cmd_pseudofs.c
@@ -38,7 +38,6 @@

 static void parse_pfsd_options(char **av, int ac, hammer_pseudofs_data_t pfsd);
 static void init_pfsd(hammer_pseudofs_data_t pfsd, int is_slave);
-static void dump_pfsd(hammer_pseudofs_data_t pfsd);
 static void pseudofs_usage(int code);
 static int getyn(void);
 static int timetosecs(char *str);
@@ -466,7 +465,6 @@ init_pfsd(hammer_pseudofs_data_t pfsd, int is_slave)
 		pfsd->mirror_flags |= HAMMER_PFSD_SLAVE;
 }

-static
 void
 dump_pfsd(hammer_pseudofs_data_t pfsd)
 {
diff --git a/sbin/hammer/hammer.8 b/sbin/hammer/hammer.8
index 44f6bae..feadd6a 100644
--- a/sbin/hammer/hammer.8
+++ b/sbin/hammer/hammer.8
@@ -762,12 +762,15 @@ configuration field for the two file systems do not match.
 If the target PFS does not exist this command will ask you whether
 you want to create a compatible PFS slave for the target or not.
 .\" ==== mirror-dump ====
-.It Ar mirror-dump
+.It Ar mirror-dump Ar [header]
 A
 .Ar mirror-read
 can be piped into a
 .Ar mirror-dump
 to dump an ASCII representation of the mirroring stream.
+If the keyword
+.Ar header
+is specified, only the header information is shown.
 .\" ==== mirror-copy ====
 .It Ar mirror-copy Ar [[user@]host:]filesystem Ar [[user@]host:]filesystem
 This is a shortcut which pipes a
diff --git a/sbin/hammer/hammer.c b/sbin/hammer/hammer.c
index 000bb99..637b302 100644
--- a/sbin/hammer/hammer.c
+++ b/sbin/hammer/hammer.c
@@ -352,7 +352,7 @@ main(int ac, char **av)
 		else if (strcmp(av[0], "mirror-stream") == 0)
 			hammer_cmd_mirror_copy(av + 1, ac - 1, 1);
 		else if (strcmp(av[0], "mirror-dump") == 0)
-			hammer_cmd_mirror_dump();
+			hammer_cmd_mirror_dump(av + 1, ac - 1);
 		else
 			usage(1);
 		exit(0);
@@ -482,7 +482,7 @@ usage(int exit_code)
 		"hammer mirror-read <filesystem> [begin-tid]\n"
 		"hammer mirror-read-stream <filesystem> [begin-tid]\n"
 		"hammer mirror-write <filesystem>\n"
-		"hammer mirror-dump\n"
+		"hammer mirror-dump [header]\n"
 		"hammer mirror-copy [[user@]host:]<filesystem>"
 				  " [[user@]host:]<filesystem>\n"
 		"hammer mirror-stream [[user@]host:]<filesystem>"
diff --git a/sbin/hammer/hammer.h b/sbin/hammer/hammer.h
index b0c6bdd..59a9167 100644
--- a/sbin/hammer/hammer.h
+++ b/sbin/hammer/hammer.h
@@ -86,7 +86,7 @@ void hammer_cmd_synctid(char **av, int ac);
 void hammer_cmd_mirror_read(char **av, int ac, int streaming);
 void hammer_cmd_mirror_write(char **av, int ac);
 void hammer_cmd_mirror_copy(char **av, int ac, int streaming);
-void hammer_cmd_mirror_dump(void);
+void hammer_cmd_mirror_dump(char **av, int ac);
 void hammer_cmd_history(const char *offset_str, char **av, int ac);
 void hammer_cmd_blockmap(void);
 void hammer_cmd_reblock(char **av, int ac, int flags);
@@ -111,4 +111,4 @@ void hammer_reset_cycle(void);

 int getpfs(struct hammer_ioc_pseudofs_rw *pfs, const char *path);
 void relpfs(int fd, struct hammer_ioc_pseudofs_rw *pfs);
-
+void dump_pfsd(hammer_pseudofs_data_t pfsd);
-- 
1.6.4



-- 
You have received this notification because you have either subscribed to it, or are involved in it.
To change your notification preferences, please click here: http://bugs.dragonflybsd.org/my/account



More information about the Submit mailing list