Author: ae Date: Mon Nov 22 10:08:33 2010 New Revision: 215671 URL: http://svn.freebsd.org/changeset/base/215671
Log: Always dump partition labels with `gpart backup`, but `gpart restore` does restore them only when -l option is specified [1]. Make number of entries field in backup format optional. Document -l and -r options of `gpart show` action. Suggested by: pjd [1] MFC after: 1 week Modified: head/sbin/geom/class/part/geom_part.c head/sbin/geom/class/part/gpart.8 Modified: head/sbin/geom/class/part/geom_part.c ============================================================================== --- head/sbin/geom/class/part/geom_part.c Mon Nov 22 09:59:10 2010 (r215670) +++ head/sbin/geom/class/part/geom_part.c Mon Nov 22 10:08:33 2010 (r215671) @@ -100,10 +100,8 @@ struct g_command PUBSYM(class_commands)[ G_OPT_SENTINEL }, "[-b start] [-s size] -t type [-i index] [-l label] [-f flags] geom" }, - { "backup", 0, gpart_backup, { - { 'l', "backup_labels", NULL, G_TYPE_BOOL}, - G_OPT_SENTINEL }, - "[-l] geom" + { "backup", 0, gpart_backup, G_NULL_OPTS, + "geom" }, { "bootcode", 0, gpart_bootcode, { { 'b', GPART_PARAM_BOOTCODE, G_VAL_OPTIONAL, G_TYPE_STRING }, @@ -175,9 +173,10 @@ struct g_command PUBSYM(class_commands)[ }, { "restore", 0, gpart_restore, { { 'F', "force", NULL, G_TYPE_BOOL }, + { 'l', "restore_labels", NULL, G_TYPE_BOOL }, { 'f', "flags", GPART_FLAGS, G_TYPE_STRING }, G_OPT_SENTINEL }, - "[-F] [-f flags] provider [...]" + "[-lF] [-f flags] provider [...]" }, { "recover", 0, gpart_issue, { { 'f', "flags", GPART_FLAGS, G_TYPE_STRING }, @@ -678,7 +677,7 @@ gpart_backup(struct gctl_req *req, unsig const char *s, *scheme; off_t sector, end; off_t length, secsz; - int error, labels, i, windex, wblocks, wtype; + int error, i, windex, wblocks, wtype; if (gctl_get_int(req, "nargs") != 1) errx(EXIT_FAILURE, "Invalid number of arguments."); @@ -696,7 +695,6 @@ gpart_backup(struct gctl_req *req, unsig s = gctl_get_ascii(req, "arg0"); if (s == NULL) abort(); - labels = gctl_get_int(req, "backup_labels"); gp = find_geom(classp, s); if (gp == NULL) errx(EXIT_FAILURE, "No such geom: %s.", s); @@ -734,14 +732,12 @@ gpart_backup(struct gctl_req *req, unsig length = end - sector + 1; } s = find_provcfg(pp, "label"); - printf("%-*s %*s %*jd %*jd", + printf("%-*s %*s %*jd %*jd %s %s\n", windex, find_provcfg(pp, "index"), wtype, find_provcfg(pp, "type"), wblocks, (intmax_t)sector, - wblocks, (intmax_t)length); - if (labels && s != NULL) - printf(" %s", s); - printf(" %s\n", fmtattrib(pp)); + wblocks, (intmax_t)length, + (s != NULL) ? s: "", fmtattrib(pp)); } geom_deletetree(&mesh); } @@ -769,7 +765,7 @@ gpart_restore(struct gctl_req *req, unsi struct ggeom *gp; const char *s, *flags, *errstr, *label; char **ap, *argv[6], line[BUFSIZ], *pline; - int error, forced, i, l, nargs, created; + int error, forced, i, l, nargs, created, rl; intmax_t n; nargs = gctl_get_int(req, "nargs"); @@ -778,6 +774,7 @@ gpart_restore(struct gctl_req *req, unsi forced = gctl_get_int(req, "force"); flags = gctl_get_ascii(req, "flags"); + rl = gctl_get_int(req, "restore_labels"); s = gctl_get_ascii(req, "class"); if (s == NULL) abort(); @@ -829,19 +826,21 @@ gpart_restore(struct gctl_req *req, unsi break; l = ap - &argv[0]; label = pline = NULL; - if (l == 2) { /* create table */ + if (l == 1 || l == 2) { /* create table */ if (created) errx(EXIT_FAILURE, "Incorrect backup format."); - n = atoi(argv[1]); + if (l == 2) + n = strtoimax(argv[1], NULL, 0); for (i = 0; i < nargs; i++) { s = gctl_get_ascii(req, "arg%d", i); r = gctl_get_handle(); - n = strtoimax(argv[1], NULL, 0); gctl_ro_param(r, "class", -1, classp->lg_name); gctl_ro_param(r, "verb", -1, "create"); gctl_ro_param(r, "scheme", -1, argv[0]); - gctl_ro_param(r, "entries", sizeof(n), &n); + if (l == 2) + gctl_ro_param(r, "entries", + sizeof(n), &n); gctl_ro_param(r, "flags", -1, "restore"); gctl_ro_param(r, "arg0", -1, s); errstr = gctl_issue(r); @@ -877,7 +876,7 @@ gpart_restore(struct gctl_req *req, unsi gctl_ro_param(r, "type", -1, argv[1]); gctl_ro_param(r, "start", -1, argv[2]); gctl_ro_param(r, "size", -1, argv[3]); - if (label != NULL) + if (rl != 0 && label != NULL) gctl_ro_param(r, "label", -1, argv[4]); gctl_ro_param(r, "arg0", -1, s); error = gpart_autofill(r); Modified: head/sbin/geom/class/part/gpart.8 ============================================================================== --- head/sbin/geom/class/part/gpart.8 Mon Nov 22 09:59:10 2010 (r215670) +++ head/sbin/geom/class/part/gpart.8 Mon Nov 22 10:08:33 2010 (r215671) @@ -24,7 +24,7 @@ .\" .\" $FreeBSD$ .\" -.Dd November 20, 2010 +.Dd November 22, 2010 .Dt GPART 8 .Os .Sh NAME @@ -94,7 +94,6 @@ utility: .\" ==== BACKUP ==== .Nm .Cm backup -.Op Fl l .Ar geom .\" ==== BOOTCODE ==== .Nm @@ -149,7 +148,7 @@ utility: .\" ==== RESTORE ==== .Nm .Cm restore -.Op Fl F +.Op Fl lF .Op Fl f Ar flags .Ar provider .Op Ar ... @@ -163,6 +162,7 @@ utility: .\" ==== SHOW ==== .Nm .Cm show +.Op Fl lr .Op Ar geom ... .\" ==== UNDO ==== .Nm @@ -225,12 +225,6 @@ about its use. Dump a partition table to standard output in special format used by .Cm restore action. -.Pp -Additional options include: -.Bl -tag -width 10n -.It Fl l -Dump partition labels for partitioning schemes that support them. -.El .\" ==== BOOTCODE ==== .It Cm bootcode Embed bootstrap code into the partitioning scheme's metadata on the @@ -439,6 +433,8 @@ Additional options include: Destroy partition table on the given .Ar provider before doing restore. +.It Fl l +Restore partition labels for partitioning schemes that support them. .It Fl f Ar flags Additional operational flags. See the section entitled @@ -466,6 +462,14 @@ about its use. .It Cm show Show the current partition information of the specified geoms or all geoms if none are specified. +Additional options include: +.Bl -tag -width 10n +.It Fl l +For partition schemes that support partition labels print them +instead of partition type. +.It Fl r +Show raw partition type instead of symbolic name. +.El .\" ==== UNDO ==== .It Cm undo Revert any pending changes for geom @@ -819,13 +823,13 @@ After having created all required partit Create backup of partition table from .Pa da0 .Bd -literal -offset indent -/sbin/gpart backup -l da0 > da0.backup +/sbin/gpart backup da0 > da0.backup .Ed .Pp Restore partition table from backup to .Pa da0 .Bd -literal -offset indent -/sbin/gpart restore da0 < /mnt/da0.backup +/sbin/gpart restore -l da0 < /mnt/da0.backup .Ed .Pp Clone partition table from _______________________________________________ svn-src-head@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/svn-src-head To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"