Add support for adding empty partition entries. I.e. skip partition

numbers or names. This gives more control over the actual layout and
helps to construct BSD disklabels with /usr or /var at dedicated
partitions.

Obtained from:	Juniper Networks, Inc.
MFC after:	3 days
Relnotes:	yes
This commit is contained in:
Marcel Moolenaar 2014-09-12 20:05:08 +00:00
parent 017717d87f
commit 752bf46955
2 changed files with 29 additions and 1 deletions

View File

@ -24,7 +24,7 @@
.\"
.\" $FreeBSD$
.\"
.Dd July 4, 2014
.Dd September 12, 2014
.Dt MKIMG 1
.Os
.Sh NAME
@ -171,6 +171,25 @@ utility as follows:
.Dl % mkimg -s mbr -b /boot/mbr -p freebsd:-'mkimg -s bsd -b /boot/boot \
-p freebsd-ufs:=root-file-system.ufs -p freebsd-swap::1G' -o mbr-bsd.img
.Pp
To accomodate the need to have partitions named or numbered in a certain
way, the
.Nm
utility allows for the specification of empty partitions.
For example, to create an image that is compatible with partition layouts
found in
.Pa /etc/disktab ,
the 'd' partition often needs to be skipped.
This is accomplished by inserting an unused partition after the first 2
partition specifications.
It is worth noting at this time that the BSD scheme will automatically
skip the 'c' partition by virtue of it referring to the entire disk.
To create an image that is compatible with the qp120at disk, use the
.Nm
utility as follows:
.Dl % mkimg -s bsd -b /boot/boot -p freebsd-ufs:=root-file-system.ufs \
-p freebsd-swap::20M -p- -p- -p- -p- -p freebsd-ufs:=usr-file-system.ufs \
-o bsd.img
.Pp
For partitioning schemes that feature partition labels, the
.Nm
utility supports assigning labels to the partitions specified.

View File

@ -101,6 +101,7 @@ usage(const char *why)
"are determined\n\t\t\t\t by the named file\n");
fprintf(stderr, "\t<t>[/<l>]:-<cmd>\t- partition content and size "
"are taken from\n\t\t\t\t the output of the command to run\n");
fprintf(stderr, "\t-\t\t\t- unused partition entry\n");
fprintf(stderr, "\t where:\n");
fprintf(stderr, "\t\t<t>\t- scheme neutral partition type\n");
fprintf(stderr, "\t\t<l>\t- optional scheme-dependent partition "
@ -140,6 +141,9 @@ pwr_of_two(u_int nr)
* '-' contents holds a command to run; the output of
* which is the contents of the partition.
* contents the specification of a partition's contents
*
* A specification that is a single dash indicates an unused partition
* entry.
*/
static int
parse_part(const char *spec)
@ -149,6 +153,11 @@ parse_part(const char *spec)
size_t len;
int error;
if (strcmp(spec, "-") == 0) {
nparts++;
return (0);
}
part = calloc(1, sizeof(struct part));
if (part == NULL)
return (ENOMEM);