summaryrefslogtreecommitdiff
path: root/sbin/disklabel
diff options
context:
space:
mode:
authorTodd C. Miller <millert@cvs.openbsd.org>2001-08-06 17:36:45 +0000
committerTodd C. Miller <millert@cvs.openbsd.org>2001-08-06 17:36:45 +0000
commit4930fc0991e7c969826fcf623e92c5bad4d13d51 (patch)
tree7d963f796985c5af6037baaa664bdb8e1ef957b9 /sbin/disklabel
parent28da278735f5a98c72ac117022cf9849a86aafd2 (diff)
Update to reality based on sys/disklabel.h
Diffstat (limited to 'sbin/disklabel')
-rw-r--r--sbin/disklabel/disklabel.5264
1 files changed, 151 insertions, 113 deletions
diff --git a/sbin/disklabel/disklabel.5 b/sbin/disklabel/disklabel.5
index 92738dcf48c..5429cfe37e2 100644
--- a/sbin/disklabel/disklabel.5
+++ b/sbin/disklabel/disklabel.5
@@ -1,4 +1,4 @@
-.\" $OpenBSD: disklabel.5,v 1.9 2000/03/14 21:31:42 aaron Exp $
+.\" $OpenBSD: disklabel.5,v 1.10 2001/08/06 17:36:44 millert Exp $
.\" $NetBSD: disklabel.5,v 1.3 1995/03/18 14:54:36 cgd Exp $
.\"
.\" Copyright (c) 1987, 1991, 1993
@@ -37,7 +37,7 @@
.\"
.\" @(#)disklabel.5.5 8.1 (Berkeley) 6/5/93
.\"
-.Dd June 5, 1993
+.Dd August 6, 2001
.Dt DISKLABEL 5
.Os
.Sh NAME
@@ -95,13 +95,27 @@ nor can it be made smaller while it is open.
One exception is that any change is allowed if no label was found
on the disk, and the driver was able to construct only a skeletal label
without partition information.
-Finally, the
+The
.Dv DIOCWDINFO
.Xr ioctl
operation sets the in-core label and then updates the on-disk label;
there must be an existing label on the disk for this operation to succeed.
Thus, the initial label for a disk or disk pack must be installed
by writing to the raw disk.
+The
+.Dv DIOCGPDINFO
+.Xr ioctl
+operation gets the default label for a disk. This simulates the case
+where there is no physical label on the disk itself and can be used to
+see the label the kernel would construct in that case.
+The
+.Dv DIOCRLDINFO
+.Xr ioctl
+operation causes the kernel to update its copy of label based on the
+physical label on the disk. It can be used when the on-disk version
+of the label was changed directly or, if there is no physical label,
+to update the kernel's skeletal label if some variable affecting label
+generation has changed (e.g. the fdisk partition table).
All of these operations are normally done using
.Xr disklabel .
.Pp
@@ -110,47 +124,46 @@ The format of the disk label, as specified in
is
.Bd -literal
/*
-* Disk description table, see disktab(5)
-*/
+ * Disk description table, see disktab(5)
+ */
#define DISKTAB "/etc/disktab"
/*
-* Each disk has a label which includes information about the hardware
-* disk geometry, filesystem partitions, and drive specific information.
-* The label is in block 0 or 1, possibly offset from the beginning
-* to leave room for a bootstrap, etc.
-*/
+ * Each disk has a label which includes information about the hardware
+ * disk geometry, filesystem partitions, and drive specific information.
+ * The label is in block 0 or 1, possibly offset from the beginning
+ * to leave room for a bootstrap, etc.
+ */
#ifndef LABELSECTOR
-#define LABELSECTOR 0 /* sector containing label */
+#define LABELSECTOR 0 /* sector containing label */
#endif
#ifndef LABELOFFSET
-#define LABELOFFSET 64 /* offset of label in sector */
+#define LABELOFFSET 64 /* offset of label in sector */
#endif
-#define DISKMAGIC ((u_long) 0x82564557) /* The disk magic number */
+#define DISKMAGIC ((u_int32_t)0x82564557) /* disk magic number */
#ifndef LOCORE
struct disklabel {
- u_long d_magic; /* the magic number */
- short d_type; /* drive type */
- short d_subtype; /* controller/d_type specific */
+ u_int32_t d_magic; /* the magic number */
+ u_int16_t d_type; /* drive type */
+ u_int16_t d_subtype; /* controller/d_type specific */
char d_typename[16]; /* type name, e.g., "eagle" */
/*
- * d_packname contains the pack identifier and is returned when
- * the disklabel is read off the disk or in-core copy.
- * d_boot0 and d_boot1 are the (optional) names of the
- * primary (block 0) and secondary (block 1-15) bootstraps
- * as found in /usr/mdec. These are returned when using
- * getdiskbyname(3)
- to retrieve the values from /etc/disktab.
- */
+ * d_packname contains the pack identifier and is returned when
+ * the disklabel is read off the disk or in-core copy.
+ * d_boot0 and d_boot1 are the (optional) names of the
+ * primary (block 0) and secondary (block 1-15) bootstraps
+ * as found in /usr/mdec. These are returned when using
+ * getdiskbyname(3) to retrieve the values from /etc/disktab.
+ */
union {
- char un_d_packname[16]; /* pack identifier */
+ char un_d_packname[16]; /* pack identifier */
struct {
- char *un_d_boot0; /* primary bootstrap name */
- char *un_d_boot1; /* secondary bootstrap name */
+ char *un_d_boot0; /* primary bootstrap name */
+ char *un_d_boot1; /* secondary bootstrap name */
} un_b;
} d_un;
#define d_packname d_un.un_d_packname
@@ -158,77 +171,77 @@ struct disklabel {
#define d_boot1 d_un.un_b.un_d_boot1
/* disk geometry: */
- u_long d_secsize; /* # of bytes per sector */
- u_long d_nsectors; /* # of data sectors per track */
- u_long d_ntracks; /* # of tracks per cylinder */
- u_long d_ncylinders; /* # of data cylinders per unit */
- u_long d_secpercyl; /* # of data sectors per cylinder */
- u_long d_secperunit; /* # of data sectors per unit */
+ u_int32_t d_secsize; /* # of bytes per sector */
+ u_int32_t d_nsectors; /* # of data sectors per track */
+ u_int32_t d_ntracks; /* # of tracks per cylinder */
+ u_int32_t d_ncylinders; /* # of data cylinders per unit */
+ u_int32_t d_secpercyl; /* # of data sectors per cylinder */
+ u_int32_t d_secperunit; /* # of data sectors per unit */
/*
- * Spares (bad sector replacements) below
- * are not counted in d_nsectors or d_secpercyl.
- * Spare sectors are assumed to be physical sectors
- * which occupy space at the end of each track and/or cylinder.
- */
- u_short d_sparespertrack; /* # of spare sectors per track */
- u_short d_sparespercyl; /* # of spare sectors per cylinder */
+ * Spares (bad sector replacements) below
+ * are not counted in d_nsectors or d_secpercyl.
+ * Spare sectors are assumed to be physical sectors
+ * which occupy space at the end of each track and/or cylinder.
+ */
+ u_int16_t d_sparespertrack; /* # of spare sects per track */
+ u_int16_t d_sparespercyl; /* # of spare sects per cylinder */
/*
- * Alternate cylinders include maintenance, replacement,
- * configuration description areas, etc.
- */
- u_long d_acylinders; /* # of alt. cylinders per unit */
+ * Alternate cylinders include maintenance, replacement,
+ * configuration description areas, etc.
+ */
+ u_int32_t d_acylinders; /* # of alt. cylinders per unit */
- /* hardware characteristics: */
+ /* hardware characteristics: */
/*
- * d_interleave, d_trackskew and d_cylskew describe perturbations
- * in the media format used to compensate for a slow controller.
- * Interleave is physical sector interleave, set up by the formatter
- * or controller when formatting. When interleaving is in use,
- * logically adjacent sectors are not physically contiguous,
- * but instead are separated by some number of sectors.
- * It is specified as the ratio of physical sectors traversed
- * per logical sector. Thus an interleave of 1:1 implies contiguous
- * layout, while 2:1 implies that logical sector 0 is separated
- * by one sector from logical sector 1.
- * d_trackskew is the offset of sector 0 on track N
- * relative to sector 0 on track N-1 on the same cylinder.
- * Finally, d_cylskew is the offset of sector 0 on cylinder N
- * relative to sector 0 on cylinder N-1.
- */
- u_short d_rpm; /* rotational speed */
- u_short d_interleave; /* hardware sector interleave */
- u_short d_trackskew; /* sector 0 skew, per track */
- u_short d_cylskew; /* sector 0 skew, per cylinder */
- u_long d_headswitch; /* head switch time, usec */
- u_long d_trkseek; /* track-to-track seek, usec */
- u_long d_flags; /* generic flags */
+ * d_interleave, d_trackskew and d_cylskew describe perturbations
+ * in the media format used to compensate for a slow controller.
+ * Interleave is physical sector interleave, set up by the
+ * formatter or controller when formatting. When interleaving is
+ * in use, logically adjacent sectors are not physically
+ * contiguous, but instead are separated by some number of sectors.
+ * It is specified as the ratio of physical sectors traversed
+ * per logical sector. Thus an interleave of 1:1 implies
+ * contiguous layout, while 2:1 implies that logical sector 0 is
+ * separated by one sector from logical sector 1.
+ * d_trackskew is the offset of sector 0 on track N
+ * relative to sector 0 on track N-1 on the same cylinder.
+ * Finally, d_cylskew is the offset of sector 0 on cylinder N
+ * relative to sector 0 on cylinder N-1.
+ */
+ u_int16_t d_rpm; /* rotational speed */
+ u_int16_t d_interleave; /* hardware sector interleave */
+ u_int16_t d_trackskew; /* sector 0 skew, per track */
+ u_int16_t d_cylskew; /* sector 0 skew, per cylinder */
+ u_int32_t d_headswitch; /* head switch time, usec */
+ u_int32_t d_trkseek; /* track-to-track seek, usec */
+ u_int32_t d_flags; /* generic flags */
#define NDDATA 5
- u_long d_drivedata[NDDATA]; /* drive-type specific information */
+ u_int32_t d_drivedata[NDDATA]; /* drive-type specific info */
#define NSPARE 5
- u_long d_spare[NSPARE]; /* reserved for future use */
- u_long d_magic2; /* the magic number (again) */
- u_short d_checksum; /* xor of data incl. partitions */
+ u_int32_t d_spare[NSPARE];/* reserved for future use */
+ u_int32_t d_magic2; /* the magic number (again) */
+ u_int16_t d_checksum; /* xor of data incl. partitions */
/* filesystem and partition information: */
- u_short d_npartitions; /* number of partitions in following */
- u_long d_bbsize; /* size of boot area at sn0, bytes */
- u_long d_sbsize; /* max size of fs superblock, bytes */
+ u_int16_t d_npartitions; /* # of partitions in following */
+ u_int32_t d_bbsize; /* size of boot area at sn0, bytes */
+ u_int32_t d_sbsize; /* max size of fs superblock, bytes */
struct partition { /* the partition table */
- u_long p_size; /* number of sectors in partition */
- u_long p_offset; /* starting sector */
- u_long p_fsize; /* filesystem basic fragment size */
- u_char p_fstype; /* filesystem type, see below */
- u_char p_frag; /* filesystem fragments per block */
+ u_int32_t p_size; /* number of sectors in partition */
+ u_int32_t p_offset; /* starting sector */
+ u_int32_t p_fsize; /* filesystem basic frag size */
+ u_int8_t p_fstype; /* filesystem type, see below */
+ u_int8_t p_frag; /* filesystem frags per block */
union {
- u_short cpg; /* UFS: FS cylinders per group */
- u_short sgs; /* LFS: FS segment shift */
+ u_int16_t cpg; /* UFS: FS cyls per group */
+ u_int16_t sgs; /* LFS: FS segment shift */
} __partition_u1;
#define p_cpg __partition_u1.cpg
#define p_sgs __partition_u1.sgs
- u_short p_cpg; /* filesystem cylinders per group */
- } d_partitions[MAXPARTITIONS]; /* actually may be more, MAXPARTITIONS
- * depends on the architecture, and
- * typically varies between 8 and 16.
+ } d_partitions[MAXPARTITIONS]; /* actually may be more,
+ * MAXPARTITIONS depends on the
+ * architecture, and typically
+ * varies between 8 and 16.
*/
};
@@ -242,6 +255,10 @@ struct disklabel {
#define DTYPE_HPIB 7 /* CS/80 on HP-IB */
#define DTYPE_HPFL 8 /* HP Fiber-link */
#define DTYPE_FLOPPY 10 /* floppy */
+#define DTYPE_CCD 11 /* concatenated disk device */
+#define DTYPE_VND 12 /* vnode pseudo-disk */
+#define DTYPE_ATAPI 13 /* ATAPI */
+#define DTYPE_RAID 14 /* RAIDframe */
#ifdef DKTYPENAMES
static char *dktypenames[] = {
@@ -256,16 +273,20 @@ static char *dktypenames[] = {
"HP-FL",
"type 9",
"floppy",
- 0
+ "ccd",
+ "vnd",
+ "ATAPI",
+ "RAID",
+ NULL
};
#define DKMAXTYPES (sizeof(dktypenames) / sizeof(dktypenames[0]) - 1)
#endif
/*
-* Filesystem type and version.
-* Used to interpret other filesystem-specific
-* per-partition information.
-*/
+ * Filesystem type and version.
+ * Used to interpret other filesystem-specific
+ * per-partition information.
+ */
#define FS_UNUSED 0 /* unused */
#define FS_SWAP 1 /* swap */
#define FS_V6 2 /* Sixth Edition */
@@ -280,16 +301,22 @@ static char *dktypenames[] = {
#define FS_HPFS 11 /* OS/2 high-performance file system */
#define FS_ISO9660 12 /* ISO 9660, normally CD-ROM */
#define FS_BOOT 13 /* partition contains bootstrap */
+#define FS_ADOS 14 /* AmigaDOS fast file system */
+#define FS_HFS 15 /* Macintosh HFS */
+#define FS_ADFS 16 /* Acorn Disk Filing System */
+#define FS_EXT2FS 17 /* ext2fs */
+#define FS_CCD 18 /* ccd component */
+#define FS_RAID 19 /* RAIDframe */
#ifdef DKTYPENAMES
static char *fstypenames[] = {
"unused",
"swap",
- "Version 6",
- "Version 7",
- "System V",
+ "Version6",
+ "Version7",
+ "SystemV",
"4.1BSD",
- "Eighth Edition",
+ "Eighth-Edition",
"4.2BSD",
"MSDOS",
"4.4LFS",
@@ -297,14 +324,20 @@ static char *fstypenames[] = {
"HPFS",
"ISO9660",
"boot",
- 0
+ "ADOS",
+ "HFS",
+ "ADFS",
+ "ext2fs",
+ "ccd",
+ "RAID",
+ NULL
};
#define FSMAXTYPES (sizeof(fstypenames) / sizeof(fstypenames[0]) - 1)
#endif
/*
-* flags shared by various drives:
-*/
+ * flags shared by various drives:
+ */
#define D_REMOVABLE 0x01 /* removable media */
#define D_ECC 0x02 /* supports ECC */
#define D_BADSECT 0x04 /* supports bad sector forw. */
@@ -312,8 +345,8 @@ static char *fstypenames[] = {
#define D_CHAIN 0x10 /* can do back-back transfers */
/*
-* Drive data for SMD.
-*/
+ * Drive data for SMD.
+ */
#define d_smdflags d_drivedata[0]
#define D_SSE 0x1 /* supports skip sectoring */
@@ -322,8 +355,8 @@ static char *fstypenames[] = {
#define d_sdist d_drivedata[3]
/*
-* Drive data for ST506.
-*/
+ * Drive data for ST506.
+ */
#define d_precompcyl d_drivedata[0]
#define d_gap3 d_drivedata[1] /* used only when formatting */
@@ -334,12 +367,12 @@ static char *fstypenames[] = {
#ifndef LOCORE
/*
-* Structure used to perform a format
-* or other raw operation, returning data
-* and/or register values.
-* Register identification and format
-* are device- and driver-dependent.
-*/
+ * Structure used to perform a format
+ * or other raw operation, returning data
+ * and/or register values.
+ * Register identification and format
+ * are device- and driver-dependent.
+ */
struct format_op {
char *df_buf;
int df_count; /* value-result */
@@ -348,18 +381,18 @@ struct format_op {
};
/*
-* Structure used internally to retrieve
-* information about a partition on a disk.
-*/
+ * Structure used internally to retrieve
+ * information about a partition on a disk.
+ */
struct partinfo {
struct disklabel *disklab;
struct partition *part;
};
/*
-* Disk-specific ioctls.
-*/
- /* get and set disklabel; DIOCGPART used internally */
+ * Disk-specific ioctls.
+ */
+/* get and set disklabel; DIOCGPART used internally */
#define DIOCGDINFO _IOR('d', 101, struct disklabel) /* get */
#define DIOCSDINFO _IOW('d', 102, struct disklabel) /* set */
#define DIOCWDINFO _IOW('d', 103, struct disklabel) /* set, update disk */
@@ -374,6 +407,11 @@ struct partinfo {
#define DIOCWLABEL _IOW('d', 109, int) /* write en/disable label */
#define DIOCSBAD _IOW('d', 110, struct dkbad) /* set kernel dkbad */
+#define DIOCEJECT _IO('d', 112) /* eject disk */
+#define DIOCLOCK _IOW('d', 113, int) /* lock/unlock pack */
+
+#define DIOCGPDINFO _IOR('d', 114, struct disklabel)/* get physical */
+#define DIOCRLDINFO _IO('d', 115) /* reload disklabel */
#endif LOCORE
.Ed