Update to the slices era. Make /dev/rfoo0 the defaults, not

/dev/rfoo0d.

Scan a list of devices instead of insisting on all the world
being wd0.

Allow for disk names to be specified (e.g. `sd0') instead of full
path names only.

Sync the man page with the reality.
This commit is contained in:
Joerg Wunsch 1995-09-01 18:00:14 +00:00
parent f024993b17
commit e3038c6ef5
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=10514
4 changed files with 162 additions and 30 deletions

View File

@ -8,13 +8,34 @@
.Nm
.Op Fl i
.Op Fl u
.Op Fl a
.Op Fl 0123
.Op disk
.Bl -tag -width time
.It Fl i
Initializes sector 0 of the disk.
.It Fl u
Is used for updating (editing) sector 0 of the disk.
.It Fl i
Initializes sector 0 of the disk. This implies
.Fl u .
.It Fl a
Change the active partition only.
.It Fl 0123
Operate on a single fdisk entry only.
.El
.Pp
The final disk name can be provided as a
.Sq bare
disk name only, e.g.
.Ql sd0 ,
or as a fully qualified device node under
.Pa /dev .
If omitted, the disks
.Ql wd0 ,
.Ql sd0 ,
and
.Ql od0
are being searched in that order, until one is
being found responding.
.Sh PROLOGUE
In order for the BIOS to boot the kernel,
certain conventions must be adhered to.
@ -39,14 +60,14 @@ The DOS
program can be used to divide space on the disk into partitions and set one
.Em active.
.Sh DESCRIPTION
The 386bsd program
The FreeBSD program
.Nm
serves a similar purpose to the DOS program.
When called with no arguments, it prints the sector 0 partition table.
An example follows:
.Bd -literal
******* Working on device /dev/rwd0d *******
******* Working on device /dev/rwd0 *******
parameters extracted from in-core disklabel are:
cylinders=769 heads=15 sectors/track=33 (495 blks/cyl)
@ -56,7 +77,7 @@ An example follows:
Warning: BIOS sector numbering starts with sector 1
Information from DOS bootblock is:
The data for partition 0 is:
sysid 165,(386BSD)
sysid 165,(FreeBSD/NetBSD/386BSD)
start 495, size 380160 (185 Meg), flag 0
beg: cyl 1/ sector 1/ head 0;
end: cyl 768/ sector 33/ head 14
@ -79,7 +100,7 @@ The second partition overlaps the end of the first.
(Used for debugging purposes)
.Bl -tag -width "cyl, sector and head"
.It Em "sysid"
is used to label the partition. 386bsd reserves the
is used to label the partition. FreeBSD reserves the
magic number 165 decimal (A5 in hex).
.It Em "start and size"
fields provide the start address
@ -147,7 +168,7 @@ flag just edits the fields as they appear on the disk.
While the
.Fl i
flag is used to "initialize" sector 0;
it will setup the last BIOS partition to use the whole disk for 386bsd;
it will setup the last BIOS partition to use the whole disk for FreeBSD;
and make it active.
.Sh NOTES
.Pp
@ -160,7 +181,7 @@ This allows the user to create a bootblock that can work with drives
that use geometry translation under the BIOS.
.Pp
If you hand craft your disk layout,
please make sure that the 386bsd partition starts on a cylinder boundary.
please make sure that the FreeBSD partition starts on a cylinder boundary.
A number of decisions made later may assume this.
(This might not be necessary later.)
.Pp
@ -175,4 +196,10 @@ that are not fully explained in this manual page.
.Sh SEE ALSO
.Xr disklabel 8
.Sh BUGS
One less now, but probably more
The entire program should be made more user-friendly.
.Pp
Throughout this man page, the term
.Sq partition
is used where it should actually be
.Sq slice ,
in order to conform with the terms used elsewhere.

View File

@ -27,6 +27,7 @@
#include <sys/types.h>
#include <sys/disklabel.h>
#include <stdio.h>
#include <errno.h>
#include <sys/stat.h>
#include <sys/ioctl.h>
#include <fcntl.h>
@ -53,7 +54,12 @@ static char lbuf[LBUF];
#define SECSIZE 512
char *disk = "/dev/rwd0d";
const char *disk;
const char *disks[] =
{
"/dev/rwd0", "/dev/rsd0", "/dev/rod0", 0
};
char *name;
struct disklabel disklabel; /* disk parameters */
@ -174,7 +180,7 @@ struct part_type
main(argc, argv)
char **argv;
{
int i;
int i;
name = *argv;
{register char *cp = name;
@ -215,10 +221,41 @@ int i;
}
if (argc > 0)
disk = argv[0];
{
static char realname[12];
if (open_disk(u_flag) < 0)
exit(1);
if(strncmp(argv[0], "/dev", 4) == 0)
disk = argv[0];
else
{
snprintf(realname, 12, "/dev/r%s", argv[0]);
disk = realname;
}
if (open_disk(u_flag) < 0)
{
fprintf(stderr, "Cannot open disk %s (%s)\n",
disk, sys_errlist[errno]);
exit(1);
}
}
else
{
int i, rv;
for(i = 0; disks[i]; i++)
{
disk = disks[i];
rv = open_disk(u_flag);
if(rv != -2) break;
}
if(rv < 0)
{
fprintf(stderr, "Cannot open any disk (%s)\n",
sys_errlist[errno]);
exit(1);
}
}
printf("******* Working on device %s *******\n",disk);
if(u_flag)
@ -255,7 +292,7 @@ int i;
exit(0);
usage:
printf("fdisk {-a|-i|-r} {disk}\n");
printf("fdisk {-a|-i|-u} [-{0,1,2,3}] [disk]\n");
}
print_s0(which)
@ -465,6 +502,8 @@ struct stat st;
fprintf(stderr,"%s: Device %s is not character special\n",
name, disk);
if ((fd = open(disk, a_flag || u_flag ? O_RDWR : O_RDONLY)) == -1) {
if(errno == ENXIO)
return -2;
fprintf(stderr,"%s: Can't open device %s\n", name, disk);
return -1;
}

View File

@ -8,13 +8,34 @@
.Nm
.Op Fl i
.Op Fl u
.Op Fl a
.Op Fl 0123
.Op disk
.Bl -tag -width time
.It Fl i
Initializes sector 0 of the disk.
.It Fl u
Is used for updating (editing) sector 0 of the disk.
.It Fl i
Initializes sector 0 of the disk. This implies
.Fl u .
.It Fl a
Change the active partition only.
.It Fl 0123
Operate on a single fdisk entry only.
.El
.Pp
The final disk name can be provided as a
.Sq bare
disk name only, e.g.
.Ql sd0 ,
or as a fully qualified device node under
.Pa /dev .
If omitted, the disks
.Ql wd0 ,
.Ql sd0 ,
and
.Ql od0
are being searched in that order, until one is
being found responding.
.Sh PROLOGUE
In order for the BIOS to boot the kernel,
certain conventions must be adhered to.
@ -39,14 +60,14 @@ The DOS
program can be used to divide space on the disk into partitions and set one
.Em active.
.Sh DESCRIPTION
The 386bsd program
The FreeBSD program
.Nm
serves a similar purpose to the DOS program.
When called with no arguments, it prints the sector 0 partition table.
An example follows:
.Bd -literal
******* Working on device /dev/rwd0d *******
******* Working on device /dev/rwd0 *******
parameters extracted from in-core disklabel are:
cylinders=769 heads=15 sectors/track=33 (495 blks/cyl)
@ -56,7 +77,7 @@ An example follows:
Warning: BIOS sector numbering starts with sector 1
Information from DOS bootblock is:
The data for partition 0 is:
sysid 165,(386BSD)
sysid 165,(FreeBSD/NetBSD/386BSD)
start 495, size 380160 (185 Meg), flag 0
beg: cyl 1/ sector 1/ head 0;
end: cyl 768/ sector 33/ head 14
@ -79,7 +100,7 @@ The second partition overlaps the end of the first.
(Used for debugging purposes)
.Bl -tag -width "cyl, sector and head"
.It Em "sysid"
is used to label the partition. 386bsd reserves the
is used to label the partition. FreeBSD reserves the
magic number 165 decimal (A5 in hex).
.It Em "start and size"
fields provide the start address
@ -147,7 +168,7 @@ flag just edits the fields as they appear on the disk.
While the
.Fl i
flag is used to "initialize" sector 0;
it will setup the last BIOS partition to use the whole disk for 386bsd;
it will setup the last BIOS partition to use the whole disk for FreeBSD;
and make it active.
.Sh NOTES
.Pp
@ -160,7 +181,7 @@ This allows the user to create a bootblock that can work with drives
that use geometry translation under the BIOS.
.Pp
If you hand craft your disk layout,
please make sure that the 386bsd partition starts on a cylinder boundary.
please make sure that the FreeBSD partition starts on a cylinder boundary.
A number of decisions made later may assume this.
(This might not be necessary later.)
.Pp
@ -175,4 +196,10 @@ that are not fully explained in this manual page.
.Sh SEE ALSO
.Xr disklabel 8
.Sh BUGS
One less now, but probably more
The entire program should be made more user-friendly.
.Pp
Throughout this man page, the term
.Sq partition
is used where it should actually be
.Sq slice ,
in order to conform with the terms used elsewhere.

View File

@ -27,6 +27,7 @@
#include <sys/types.h>
#include <sys/disklabel.h>
#include <stdio.h>
#include <errno.h>
#include <sys/stat.h>
#include <sys/ioctl.h>
#include <fcntl.h>
@ -53,7 +54,12 @@ static char lbuf[LBUF];
#define SECSIZE 512
char *disk = "/dev/rwd0d";
const char *disk;
const char *disks[] =
{
"/dev/rwd0", "/dev/rsd0", "/dev/rod0", 0
};
char *name;
struct disklabel disklabel; /* disk parameters */
@ -174,7 +180,7 @@ struct part_type
main(argc, argv)
char **argv;
{
int i;
int i;
name = *argv;
{register char *cp = name;
@ -215,10 +221,41 @@ int i;
}
if (argc > 0)
disk = argv[0];
{
static char realname[12];
if (open_disk(u_flag) < 0)
exit(1);
if(strncmp(argv[0], "/dev", 4) == 0)
disk = argv[0];
else
{
snprintf(realname, 12, "/dev/r%s", argv[0]);
disk = realname;
}
if (open_disk(u_flag) < 0)
{
fprintf(stderr, "Cannot open disk %s (%s)\n",
disk, sys_errlist[errno]);
exit(1);
}
}
else
{
int i, rv;
for(i = 0; disks[i]; i++)
{
disk = disks[i];
rv = open_disk(u_flag);
if(rv != -2) break;
}
if(rv < 0)
{
fprintf(stderr, "Cannot open any disk (%s)\n",
sys_errlist[errno]);
exit(1);
}
}
printf("******* Working on device %s *******\n",disk);
if(u_flag)
@ -255,7 +292,7 @@ int i;
exit(0);
usage:
printf("fdisk {-a|-i|-r} {disk}\n");
printf("fdisk {-a|-i|-u} [-{0,1,2,3}] [disk]\n");
}
print_s0(which)
@ -465,6 +502,8 @@ struct stat st;
fprintf(stderr,"%s: Device %s is not character special\n",
name, disk);
if ((fd = open(disk, a_flag || u_flag ? O_RDWR : O_RDONLY)) == -1) {
if(errno == ENXIO)
return -2;
fprintf(stderr,"%s: Can't open device %s\n", name, disk);
return -1;
}