Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/sbin/disklabel Add options to define labelsector and -offset...
details: https://anonhg.NetBSD.org/src/rev/f72a60538d86
branches: trunk
changeset: 457553:f72a60538d86
user: mlelstv <mlelstv%NetBSD.org@localhost>
date: Tue Jul 02 16:23:47 2019 +0000
description:
Add options to define labelsector and -offset and number of slices.
Make options to chose alternate label position for systems using MBR
more intuitive. -m now selects mode with MBR, -n selects mode without,
independent of the machine defaults.
diffstat:
sbin/disklabel/disklabel.8 | 51 ++++++++++++++++++++++++++++++++++++++++-----
sbin/disklabel/main.c | 50 +++++++++++++++++++++++++++++---------------
2 files changed, 78 insertions(+), 23 deletions(-)
diffs (237 lines):
diff -r 115951c446b2 -r f72a60538d86 sbin/disklabel/disklabel.8
--- a/sbin/disklabel/disklabel.8 Tue Jul 02 16:10:15 2019 +0000
+++ b/sbin/disklabel/disklabel.8 Tue Jul 02 16:23:47 2019 +0000
@@ -1,4 +1,4 @@
-.\" $NetBSD: disklabel.8,v 1.68 2017/07/03 21:33:41 wiz Exp $
+.\" $NetBSD: disklabel.8,v 1.69 2019/07/02 16:23:47 mlelstv Exp $
.\"
.\" Copyright (c) 1987, 1988, 1991, 1993
.\" The Regents of the University of California. All rights reserved.
@@ -41,37 +41,52 @@
.Sh SYNOPSIS
.\" disklabel: read label
.Nm
-.Op Fl ACDFmrtv
+.Op Fl ACDFmnrtv
.Op Fl B Ar endian
+.Op Fl L Ar sector
.Op Fl M Ar machine
+.Op Fl O Ar offset
+.Op Fl P Ar size
.Ar disk
.\" disklabel -e: read/modify/write using $EDITOR
.Nm
.Fl e
-.Op Fl CDFImrv
+.Op Fl CDFImnrv
.Op Fl B Ar endian
+.Op Fl L Ar sector
.Op Fl M Ar machine
+.Op Fl O Ar offset
+.Op Fl P Ar size
.Ar disk
.\" disklabel -i: read/modify/write using builtin commands
.Nm
.Fl i
-.Op Fl DFImrv
+.Op Fl DFImnrv
.Op Fl B Ar endian
+.Op Fl L Ar sector
.Op Fl M Ar machine
+.Op Fl O Ar offset
+.Op Fl P Ar size
.Ar disk
.\" disklabel -R: write from edited output
.Nm
.Fl R
-.Op Fl DFmrv
+.Op Fl DFmnrv
.Op Fl B Ar endian
+.Op Fl L Ar sector
.Op Fl M Ar machine
+.Op Fl O Ar offset
+.Op Fl P Ar size
.Ar disk Ar protofile
.\" disklabel -w: write from disctab entry
.Nm
.Fl w
-.Op Fl DFmrv
+.Op Fl DFmnrv
.Op Fl B Ar endian
+.Op Fl L Ar sector
.Op Fl M Ar machine
+.Op Fl O Ar offset
+.Op Fl P Ar size
.Op Fl f Ar disktab
.Ar disk Ar disktype
.Oo Ar packid Oc
@@ -189,8 +204,23 @@
.It Fl M Ar machine
Specify the machine to generate a label for.
Defaults to the current machine it is compiled for.
+Specific details can be overridden via environment
+and with the options
+.Fl B, L, O, p, m
+and
+.Fl n.
+.It Fl L
+num specify the relative sector number of the disklabel
+similar to the environment variable DISKLABELSECTOR.
+.It Fl O
+num specify the relative byte offset of the disklabel.
+similar to the environment variable DISKLABELOFFSET.
+.It Fl P
+num specify the size of the partition table.
.It Fl m
expect the label to have an MBR.
+.It Fl n
+expect the label not to have an MBR.
.It Fl r
Read/write the disk directly rather than using
.Xr ioctl 2
@@ -368,3 +398,12 @@
to write directly to disk, and bypass the format translation.
This will result in a disk label that the PROMs will not recognize,
and that therefore cannot be booted from.
+.Pp
+The
+.Fl m
+flag previously toggled between using an MBR and not using an MBR,
+with the default being implied by the machine type.
+It now always enables MBR mode, independent of the machine default.
+Use the
+.Fl n
+flag to disable MBR mode.
diff -r 115951c446b2 -r f72a60538d86 sbin/disklabel/main.c
--- a/sbin/disklabel/main.c Tue Jul 02 16:10:15 2019 +0000
+++ b/sbin/disklabel/main.c Tue Jul 02 16:23:47 2019 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: main.c,v 1.50 2018/06/27 01:14:48 kamil Exp $ */
+/* $NetBSD: main.c,v 1.51 2019/07/02 16:23:47 mlelstv Exp $ */
/*
* Copyright (c) 2006 The NetBSD Foundation, Inc.
@@ -76,7 +76,7 @@
static char sccsid[] = "@(#)disklabel.c 8.4 (Berkeley) 5/4/95";
/* from static char sccsid[] = "@(#)disklabel.c 1.2 (Symmetric) 11/28/85"; */
#else
-__RCSID("$NetBSD: main.c,v 1.50 2018/06/27 01:14:48 kamil Exp $");
+__RCSID("$NetBSD: main.c,v 1.51 2019/07/02 16:23:47 mlelstv Exp $");
#endif
#endif /* not lint */
@@ -154,7 +154,6 @@
static int Dflag; /* Delete old labels (use with write) */
static int Iflag; /* Read/write direct, but default if absent */
static int lflag; /* List all known file system types and exit */
-static int mflag; /* Expect disk to contain an MBR */
static int verbose;
static int read_all; /* set if op = READ && Aflag */
@@ -481,6 +480,7 @@
#endif
DELETE
} op = UNSPEC, old_op;
+ unsigned long val;
#ifndef HAVE_NBTOOL_CONFIG_H
#if !defined(NATIVELABEL_ONLY)
@@ -502,22 +502,13 @@
}
#endif
- mflag = labelusesmbr;
- if (mflag < 0) {
-#if HAVE_NBTOOL_CONFIG_H
- warn("getlabelusesmbr() failed");
-#else
- warn("getlabelusesmbr() failed");
- mflag = LABELUSESMBR;
-#endif
- }
#if HAVE_NBTOOL_CONFIG_H
/* We must avoid doing any ioctl requests */
Fflag = rflag = 1;
#endif
error = 0;
- while ((ch = getopt(argc, argv, "AB:CDFIM:NRWef:ilmrtvw")) != -1) {
+ while ((ch = getopt(argc, argv, "AB:CDFIL:M:NO:P:RWef:ilmnrtvw")) != -1) {
old_op = op;
switch (ch) {
case 'A': /* Action all labels */
@@ -559,6 +550,24 @@
case 'N': /* Disallow writes to label sector */
op = SETREADONLY;
break;
+ case 'L': /* Label sector */
+ val = strtoul(optarg, NULL, 10);
+ if ((val == ULONG_MAX && errno == ERANGE) || val > UINT_MAX)
+ err(EXIT_FAILURE, "invalid label sector: %s", optarg);
+ labelsector = val;
+ break;
+ case 'O': /* Label offset */
+ val = strtoul(optarg, NULL, 10);
+ if ((val == ULONG_MAX && errno == ERANGE) || val > UINT_MAX)
+ err(EXIT_FAILURE, "invalid label offset: %s", optarg);
+ labeloffset = val;
+ break;
+ case 'P': /* Max partitions */
+ val = strtoul(optarg, NULL, 10);
+ if ((val == ULONG_MAX && errno == ERANGE) || val < 1 || val > UINT_MAX)
+ err(EXIT_FAILURE, "invalid max partitions: %s", optarg);
+ maxpartitions = val;
+ break;
case 'W': /* Allow writes to label sector */
op = SETWRITABLE;
break;
@@ -578,7 +587,10 @@
lflag = 1;
break;
case 'm': /* Expect disk to have an MBR */
- mflag ^= 1;
+ labelusesmbr = 1;
+ break;
+ case 'n': /* Expect disk to not have an MBR */
+ labelusesmbr = 0;
break;
case 'r': /* Read/write label directly from disk */
rflag = 1;
@@ -600,6 +612,10 @@
usage();
}
+ if (maxpartitions > MAXPARTITIONS) {
+ errx(1, "too large maxpartitions > %u\n", MAXPARTITIONS);
+ }
+
#if !defined(NATIVELABEL_ONLY)
if (maxpartitions == 0) {
errx(1, "unknown label: use -M/-B and $MACHINE/$MACHINE_ARCH");
@@ -989,7 +1005,7 @@
static int
writelabel_mbr(int f, u_int sector)
{
- return update_label(f, sector, mflag ? LABELOFFSET_MBR : ~0U) ? 2 : 0;
+ return update_label(f, sector, labelusesmbr ? LABELOFFSET_MBR : ~0U) ? 2 : 0;
}
#endif /* !NO_MBR_SUPPORT */
@@ -1369,7 +1385,7 @@
}
}
- if (mflag && process_mbr(f, readlabel_mbr) == 0)
+ if (labelusesmbr && process_mbr(f, readlabel_mbr) == 0)
return 0;
disk_lp = find_label(f, 0);
@@ -1378,7 +1394,7 @@
return 0;
}
- if (!mflag && process_mbr(f, readlabel_mbr) == 0)
+ if (!labelusesmbr && process_mbr(f, readlabel_mbr) == 0)
return 0;
return 1;
Home |
Main Index |
Thread Index |
Old Index