mirror of
https://github.com/freebsd/freebsd-src
synced 2024-10-22 00:04:58 +00:00
This has been disconnected from the build since May 2003. GC it, as
bsdlabel and sunlabel are what we use now.
This commit is contained in:
parent
205bc8633e
commit
7e403160dc
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=125157
|
@ -1,12 +0,0 @@
|
|||
# @(#)Makefile 8.2 (Berkeley) 3/17/94
|
||||
# $FreeBSD$
|
||||
|
||||
PROG= disklabel
|
||||
SRCS= disklabel.c
|
||||
MAN= disklabel.5 disklabel.8
|
||||
|
||||
.if ${MACHINE} == "pc98"
|
||||
CFLAGS+= -DPC98
|
||||
.endif
|
||||
|
||||
.include <bsd.prog.mk>
|
|
@ -1,525 +0,0 @@
|
|||
.\" Copyright (c) 1987, 1991, 1993
|
||||
.\" The Regents of the University of California. All rights reserved.
|
||||
.\"
|
||||
.\" This code is derived from software contributed to Berkeley by
|
||||
.\" Symmetric Computer Systems.
|
||||
.\"
|
||||
.\" Redistribution and use in source and binary forms, with or without
|
||||
.\" modification, are permitted provided that the following conditions
|
||||
.\" are met:
|
||||
.\" 1. Redistributions of source code must retain the above copyright
|
||||
.\" notice, this list of conditions and the following disclaimer.
|
||||
.\" 2. Redistributions in binary form must reproduce the above copyright
|
||||
.\" notice, this list of conditions and the following disclaimer in the
|
||||
.\" documentation and/or other materials provided with the distribution.
|
||||
.\" 3. All advertising materials mentioning features or use of this software
|
||||
.\" must display the following acknowledgment:
|
||||
.\" This product includes software developed by the University of
|
||||
.\" California, Berkeley and its contributors.
|
||||
.\" 4. Neither the name of the University nor the names of its contributors
|
||||
.\" may be used to endorse or promote products derived from this software
|
||||
.\" without specific prior written permission.
|
||||
.\"
|
||||
.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
||||
.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
||||
.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
.\" SUCH DAMAGE.
|
||||
.\"
|
||||
.\" @(#)disklabel.5.5 8.1 (Berkeley) 6/5/93
|
||||
.\" $FreeBSD$
|
||||
.\"
|
||||
.Dd June 5, 1993
|
||||
.Dt DISKLABEL 5
|
||||
.Os
|
||||
.Sh NAME
|
||||
.Nm disklabel
|
||||
.Nd disk pack label
|
||||
.Sh SYNOPSIS
|
||||
.In sys/disklabel.h
|
||||
.Sh DESCRIPTION
|
||||
Each disk or disk pack on a system may contain a disk label
|
||||
which provides detailed information
|
||||
about the geometry of the disk and the partitions into which the disk
|
||||
is divided.
|
||||
It should be initialized when the disk is formatted,
|
||||
and may be changed later with the
|
||||
.Xr disklabel 8
|
||||
program.
|
||||
This information is used by the system disk driver and by the bootstrap
|
||||
program to determine how to program the drive
|
||||
and where to find the file systems on the disk partitions.
|
||||
Additional information is used by the file system in order
|
||||
to use the disk most efficiently and to locate important file system information.
|
||||
The description of each partition contains an identifier for the partition
|
||||
type (standard file system, swap area, etc.).
|
||||
The file system updates the in-core copy of the label if it contains
|
||||
incomplete information about the file system.
|
||||
.Pp
|
||||
The label is located in sector number
|
||||
.Dv LABELSECTOR
|
||||
of the drive, usually sector 0 where it may be found
|
||||
without any information about the disk geometry.
|
||||
It is at an offset
|
||||
.Dv LABELOFFSET
|
||||
from the beginning of the sector, to allow room for the initial bootstrap.
|
||||
The disk sector containing the label is normally made read-only
|
||||
so that it is not accidentally overwritten by pack-to-pack copies
|
||||
or swap operations;
|
||||
the
|
||||
.Dv DIOCWLABEL
|
||||
.Xr ioctl 2 ,
|
||||
which is done as needed by the
|
||||
.Xr disklabel 8
|
||||
program.
|
||||
.Pp
|
||||
A copy of the in-core label for a disk can be obtained with the
|
||||
.Dv DIOCGDINFO
|
||||
.Xr ioctl 2 ;
|
||||
this works with a file descriptor for a block or character (``raw'') device
|
||||
for any partition of the disk.
|
||||
The in-core copy of the label is set by the
|
||||
.Dv DIOCSDINFO
|
||||
.Xr ioctl 2 .
|
||||
The offset of a partition cannot generally be changed while it is open,
|
||||
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
|
||||
.Dv DIOCWDINFO
|
||||
.Xr ioctl 2
|
||||
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.
|
||||
All of these operations are normally done using
|
||||
.Xr disklabel 8 .
|
||||
.Pp
|
||||
The format of the disk label, as specified in
|
||||
.In sys/disklabel.h ,
|
||||
is
|
||||
.Bd -literal
|
||||
#ifndef _SYS_DISKLABEL_H_
|
||||
#define _SYS_DISKLABEL_H_
|
||||
|
||||
#ifndef _KERNEL
|
||||
#include <sys/types.h>
|
||||
#endif
|
||||
#include <sys/ioccom.h>
|
||||
|
||||
/*
|
||||
* Disk description table, see disktab(5)
|
||||
*/
|
||||
#define _PATH_DISKTAB "/etc/disktab"
|
||||
#define DISKTAB "/etc/disktab" /* deprecated */
|
||||
|
||||
/*
|
||||
* Each disk has a label which includes information about the hardware
|
||||
* disk geometry, file system 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.
|
||||
*/
|
||||
|
||||
/* XXX these should be defined per controller (or drive) elsewhere, not here! */
|
||||
#ifdef __i386__
|
||||
#define LABELSECTOR 1 /* sector containing label */
|
||||
#define LABELOFFSET 0 /* offset of label in sector */
|
||||
#endif
|
||||
|
||||
#ifdef __alpha__
|
||||
#define LABELSECTOR 0
|
||||
#define LABELOFFSET 64
|
||||
#endif
|
||||
|
||||
#ifndef LABELSECTOR
|
||||
#define LABELSECTOR 0 /* sector containing label */
|
||||
#endif
|
||||
|
||||
#ifndef LABELOFFSET
|
||||
#define LABELOFFSET 64 /* offset of label in sector */
|
||||
#endif
|
||||
|
||||
#define DISKMAGIC ((u_int32_t)0x82564557) /* The disk magic number */
|
||||
#ifndef MAXPARTITIONS
|
||||
#define MAXPARTITIONS 8
|
||||
#endif
|
||||
|
||||
#define LABEL_PART 2 /* partition containing label */
|
||||
#define RAW_PART 2 /* partition containing whole disk */
|
||||
#define SWAP_PART 1 /* partition normally containing swap */
|
||||
|
||||
#ifndef LOCORE
|
||||
struct disklabel {
|
||||
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" */
|
||||
char d_packname[16]; /* pack identifier */
|
||||
|
||||
/* disk geometry: */
|
||||
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_int16_t d_sparespertrack; /* # of spare sectors per track */
|
||||
u_int16_t d_sparespercyl; /* # of spare sectors per cylinder */
|
||||
/*
|
||||
* Alternate cylinders include maintenance, replacement, configuration
|
||||
* description areas, etc.
|
||||
*/
|
||||
u_int32_t d_acylinders; /* # of alt. cylinders per unit */
|
||||
|
||||
/* 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_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_int32_t d_drivedata[NDDATA]; /* drive-type specific information */
|
||||
#define NSPARE 5
|
||||
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 */
|
||||
|
||||
/* file system and partition information: */
|
||||
u_int16_t d_npartitions; /* number 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_int32_t p_size; /* number of sectors in partition */
|
||||
u_int32_t p_offset; /* starting sector */
|
||||
u_int32_t p_fsize; /* file system basic fragment size */
|
||||
u_int8_t p_fstype; /* file system type, see below */
|
||||
u_int8_t p_frag; /* file system fragments per block */
|
||||
union {
|
||||
u_int16_t cpg; /* UFS: FS cylinders per group */
|
||||
u_int16_t sgs; /* LFS: FS segment shift */
|
||||
} __partition_u1;
|
||||
#define p_cpg __partition_u1.cpg
|
||||
#define p_sgs __partition_u1.sgs
|
||||
} d_partitions[MAXPARTITIONS]; /* actually may be more */
|
||||
};
|
||||
#else /* LOCORE */
|
||||
/*
|
||||
* offsets for asm boot files.
|
||||
*/
|
||||
.set d_secsize,40
|
||||
.set d_nsectors,44
|
||||
.set d_ntracks,48
|
||||
.set d_ncylinders,52
|
||||
.set d_secpercyl,56
|
||||
.set d_secperunit,60
|
||||
.set d_end_,276 /* size of disk label */
|
||||
#endif /* LOCORE */
|
||||
|
||||
/* d_type values: */
|
||||
#define DTYPE_SMD 1 /* SMD, XSMD; VAX hp/up */
|
||||
#define DTYPE_MSCP 2 /* MSCP */
|
||||
#define DTYPE_DEC 3 /* other DEC (rk, rl) */
|
||||
#define DTYPE_SCSI 4 /* SCSI */
|
||||
#define DTYPE_ESDI 5 /* ESDI interface */
|
||||
#define DTYPE_ST506 6 /* ST506 etc. */
|
||||
#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 */
|
||||
#define DTYPE_VINUM 12 /* vinum volume */
|
||||
#define DTYPE_DOC2K 13 /* Msys DiskOnChip */
|
||||
|
||||
#if defined(PC98) && !defined(PC98_ATCOMPAT)
|
||||
#define DSTYPE_SEC256 0x80 /* physical sector size=256 */
|
||||
#endif
|
||||
|
||||
#ifdef DKTYPENAMES
|
||||
static char *dktypenames[] = {
|
||||
"unknown",
|
||||
"SMD",
|
||||
"MSCP",
|
||||
"old DEC",
|
||||
"SCSI",
|
||||
"ESDI",
|
||||
"ST506",
|
||||
"HP-IB",
|
||||
"HP-FL",
|
||||
"type 9",
|
||||
"floppy",
|
||||
"CCD",
|
||||
"Vinum",
|
||||
"DOC2K",
|
||||
NULL
|
||||
};
|
||||
#define DKMAXTYPES (sizeof(dktypenames) / sizeof(dktypenames[0]) - 1)
|
||||
#endif
|
||||
|
||||
/*
|
||||
* File system type and version.
|
||||
* Used to interpret other file system-specific
|
||||
* per-partition information.
|
||||
*/
|
||||
#define FS_UNUSED 0 /* unused */
|
||||
#define FS_SWAP 1 /* swap */
|
||||
#define FS_V6 2 /* Sixth Edition */
|
||||
#define FS_V7 3 /* Seventh Edition */
|
||||
#define FS_SYSV 4 /* System V */
|
||||
#define FS_V71K 5 /* V7 with 1K blocks (4.1, 2.9) */
|
||||
#define FS_V8 6 /* Eighth Edition, 4K blocks */
|
||||
#define FS_BSDFFS 7 /* 4.2BSD fast file system */
|
||||
#define FS_MSDOS 8 /* MSDOS file system */
|
||||
#define FS_BSDLFS 9 /* 4.4BSD log-structured file system */
|
||||
#define FS_OTHER 10 /* in use, but unknown/unsupported */
|
||||
#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_VINUM 14 /* Vinum drive */
|
||||
|
||||
#ifdef DKTYPENAMES
|
||||
static char *fstypenames[] = {
|
||||
"unused",
|
||||
"swap",
|
||||
"Version 6",
|
||||
"Version 7",
|
||||
"System V",
|
||||
"4.1BSD",
|
||||
"Eighth Edition",
|
||||
"4.2BSD",
|
||||
"MSDOS",
|
||||
"4.4LFS",
|
||||
"unknown",
|
||||
"HPFS",
|
||||
"ISO9660",
|
||||
"boot",
|
||||
"vinum",
|
||||
NULL
|
||||
};
|
||||
#define FSMAXTYPES (sizeof(fstypenames) / sizeof(fstypenames[0]) - 1)
|
||||
#endif
|
||||
|
||||
/*
|
||||
* 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. */
|
||||
#define D_RAMDISK 0x08 /* disk emulator */
|
||||
#define D_CHAIN 0x10 /* can do back-back transfers */
|
||||
|
||||
/*
|
||||
* Drive data for SMD.
|
||||
*/
|
||||
#define d_smdflags d_drivedata[0]
|
||||
#define D_SSE 0x1 /* supports skip sectoring */
|
||||
#define d_mindist d_drivedata[1]
|
||||
#define d_maxdist d_drivedata[2]
|
||||
#define d_sdist d_drivedata[3]
|
||||
|
||||
/*
|
||||
* Drive data for ST506.
|
||||
*/
|
||||
#define d_precompcyl d_drivedata[0]
|
||||
#define d_gap3 d_drivedata[1] /* used only when formatting */
|
||||
|
||||
/*
|
||||
* Drive data for SCSI.
|
||||
*/
|
||||
#define d_blind d_drivedata[0]
|
||||
|
||||
#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.
|
||||
*/
|
||||
struct format_op {
|
||||
char *df_buf;
|
||||
int df_count; /* value-result */
|
||||
daddr_t df_startblk;
|
||||
int df_reg[8]; /* result */
|
||||
};
|
||||
|
||||
/*
|
||||
* Structure used internally to retrieve information about a partition
|
||||
* on a disk.
|
||||
*/
|
||||
struct partinfo {
|
||||
struct disklabel *disklab;
|
||||
struct partition *part;
|
||||
};
|
||||
|
||||
/* DOS partition table -- located in boot block */
|
||||
|
||||
#if defined(PC98) && !defined(PC98_ATCOMPAT)
|
||||
#define DOSBBSECTOR 0 /* DOS boot block relative sector number */
|
||||
#define DOSLABELSECTOR 1 /* 0: 256b/s, 1: 512b/s */
|
||||
#define DOSPARTOFF 0
|
||||
#define NDOSPART 16
|
||||
#define DOSPTYP_386BSD 0x94 /* 386BSD partition type */
|
||||
#define MBR_PTYPE_FreeBSD 0x94 /* FreeBSD partition type */
|
||||
|
||||
struct dos_partition {
|
||||
unsigned char dp_mid;
|
||||
#define DOSMID_386BSD (0x14|0x80) /* 386bsd|bootable */
|
||||
unsigned char dp_sid;
|
||||
#define DOSSID_386BSD (0x44|0x80) /* 386bsd|active */
|
||||
unsigned char dp_dum1;
|
||||
unsigned char dp_dum2;
|
||||
unsigned char dp_ipl_sct;
|
||||
unsigned char dp_ipl_head;
|
||||
unsigned short dp_ipl_cyl;
|
||||
unsigned char dp_ssect; /* starting sector */
|
||||
unsigned char dp_shd; /* starting head */
|
||||
unsigned short dp_scyl; /* starting cylinder */
|
||||
unsigned char dp_esect; /* end sector */
|
||||
unsigned char dp_ehd; /* end head */
|
||||
unsigned short dp_ecyl; /* end cylinder */
|
||||
unsigned char dp_name[16];
|
||||
};
|
||||
|
||||
#else /* IBMPC */
|
||||
#define DOSBBSECTOR 0 /* DOS boot block relative sector number */
|
||||
#define DOSPARTOFF 446
|
||||
#define NDOSPART 4
|
||||
#define DOSPTYP_386BSD 0xa5 /* 386BSD partition type */
|
||||
|
||||
struct dos_partition {
|
||||
unsigned char dp_flag; /* bootstrap flags */
|
||||
unsigned char dp_shd; /* starting head */
|
||||
unsigned char dp_ssect; /* starting sector */
|
||||
unsigned char dp_scyl; /* starting cylinder */
|
||||
unsigned char dp_typ; /* partition type */
|
||||
unsigned char dp_ehd; /* end head */
|
||||
unsigned char dp_esect; /* end sector */
|
||||
unsigned char dp_ecyl; /* end cylinder */
|
||||
u_int32_t dp_start; /* absolute starting sector number */
|
||||
u_int32_t dp_size; /* partition size in sectors */
|
||||
};
|
||||
#endif
|
||||
|
||||
#define DPSECT(s) ((s) & 0x3f) /* isolate relevant bits of sector */
|
||||
#define DPCYL(c, s) ((c) + (((s) & 0xc0)<<2)) /* and those that are cylinder */
|
||||
|
||||
/*
|
||||
* 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 */
|
||||
#define DIOCGPART _IOW('d', 104, struct partinfo) /* get partition */
|
||||
|
||||
#define DIOCWLABEL _IOW('d', 109, int) /* write en/disable label */
|
||||
|
||||
#ifdef _KERNEL
|
||||
|
||||
/*
|
||||
* XXX encoding of disk minor numbers, should be elsewhere.
|
||||
*
|
||||
* See <sys/reboot.h> for a possibly better encoding.
|
||||
*
|
||||
* "cpio -H newc" can be used to back up device files with large minor
|
||||
* numbers (but not ones >= 2^31). Old cpio formats and all tar formats
|
||||
* don't have enough bits, and cpio and tar don't notice the lossage.
|
||||
* There are also some sign extension bugs.
|
||||
*/
|
||||
|
||||
/*
|
||||
3 2 1 0
|
||||
1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
|
||||
_________________________________________________________________
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
-----------------------------------------------------------------
|
||||
| TYPE |UNIT_2 | SLICE | MAJOR? | UNIT |PART |
|
||||
-----------------------------------------------------------------
|
||||
*/
|
||||
#define dkmakeminor(unit, slice, part) \e
|
||||
(((slice) << 16) | (((unit) & 0x1e0) << 16) | \e
|
||||
(((unit) & 0x1f) << 3) | (part))
|
||||
static __inline dev_t
|
||||
dkmodpart(dev_t dev, int part)
|
||||
{
|
||||
return (makedev(major(dev), (minor(dev) & ~7) | part));
|
||||
}
|
||||
|
||||
static __inline dev_t
|
||||
dkmodslice(dev_t dev, int slice)
|
||||
{
|
||||
return (makedev(major(dev), (minor(dev) & ~0x1f0000) | (slice << 16)));
|
||||
}
|
||||
|
||||
#define dkpart(dev) (minor(dev) & 7)
|
||||
#define dkslice(dev) ((minor(dev) >> 16) & 0x1f)
|
||||
#define dktype(dev) ((minor(dev) >> 25) & 0x7f)
|
||||
|
||||
static __inline u_int
|
||||
dkunit(dev_t dev)
|
||||
{
|
||||
return (((minor(dev) >> 16) & 0x1e0) | ((minor(dev) >> 3) & 0x1f));
|
||||
}
|
||||
|
||||
struct buf;
|
||||
struct buf_queue_head;
|
||||
|
||||
int bounds_check_with_label(struct buf *bp, struct disklabel *lp,
|
||||
int wlabel);
|
||||
void diskerr(struct buf *bp, char *what, int pri, int blkdone,
|
||||
struct disklabel *lp);
|
||||
void disksort(struct buf *ap, struct buf *bp);
|
||||
u_int dkcksum struct disklabel *lp);
|
||||
char *readdisklabel(dev_t dev, struct disklabel *lp);
|
||||
void bufqdisksort(struct buf_queue_head *ap, struct buf *bp);
|
||||
int setdisklabel(struct disklabel *olp, struct disklabel *nlp,
|
||||
u_long openmask);
|
||||
int writedisklabel(dev_t dev, struct disklabel *lp);
|
||||
#ifdef __alpha__
|
||||
void alpha_fix_srm_checksum(struct buf *bp);
|
||||
#endif
|
||||
|
||||
#endif /* _KERNEL */
|
||||
|
||||
#endif /* LOCORE */
|
||||
|
||||
#ifndef _KERNEL
|
||||
__BEGIN_DECLS
|
||||
struct disklabel *getdiskbyname(const char *);
|
||||
__END_DECLS
|
||||
#endif
|
||||
|
||||
#endif /* !_SYS_DISKLABEL_H_ */
|
||||
.Ed
|
||||
.Sh SEE ALSO
|
||||
.Xr disktab 5 ,
|
||||
.Xr disklabel 8
|
|
@ -1,976 +0,0 @@
|
|||
.\" Copyright (c) 1987, 1988, 1991, 1993
|
||||
.\" The Regents of the University of California. All rights reserved.
|
||||
.\"
|
||||
.\" This code is derived from software contributed to Berkeley by
|
||||
.\" Symmetric Computer Systems.
|
||||
.\"
|
||||
.\" Redistribution and use in source and binary forms, with or without
|
||||
.\" modification, are permitted provided that the following conditions
|
||||
.\" are met:
|
||||
.\" 1. Redistributions of source code must retain the above copyright
|
||||
.\" notice, this list of conditions and the following disclaimer.
|
||||
.\" 2. Redistributions in binary form must reproduce the above copyright
|
||||
.\" notice, this list of conditions and the following disclaimer in the
|
||||
.\" documentation and/or other materials provided with the distribution.
|
||||
.\" 3. All advertising materials mentioning features or use of this software
|
||||
.\" must display the following acknowledgment:
|
||||
.\" This product includes software developed by the University of
|
||||
.\" California, Berkeley and its contributors.
|
||||
.\" 4. Neither the name of the University nor the names of its contributors
|
||||
.\" may be used to endorse or promote products derived from this software
|
||||
.\" without specific prior written permission.
|
||||
.\"
|
||||
.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
||||
.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
||||
.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
.\" SUCH DAMAGE.
|
||||
.\"
|
||||
.\" @(#)disklabel.8 8.2 (Berkeley) 4/19/94
|
||||
.\" $FreeBSD$
|
||||
.\"
|
||||
.Dd March 15, 2003
|
||||
.Dt DISKLABEL 8
|
||||
.Os
|
||||
.Sh NAME
|
||||
.Nm disklabel
|
||||
.Nd read and write disk pack label
|
||||
.Sh SYNOPSIS
|
||||
.Nm
|
||||
.Op Fl r
|
||||
.Ar disk
|
||||
.Nm
|
||||
.Fl w
|
||||
.Op Fl nr
|
||||
.Op Fl m Ar machine
|
||||
.Ar disk type
|
||||
.Op Ar packid
|
||||
.Nm
|
||||
.Fl e
|
||||
.Op Fl nr
|
||||
.Op Fl m Ar machine
|
||||
.Ar disk
|
||||
.Nm
|
||||
.Fl R
|
||||
.Op Fl nr
|
||||
.Op Fl m Ar machine
|
||||
.Ar disk protofile
|
||||
.Pp
|
||||
.Nm
|
||||
.Fl B
|
||||
.Op Fl b Ar boot
|
||||
.Op Fl m Ar machine
|
||||
.Ar disk
|
||||
.Nm
|
||||
.Fl w B
|
||||
.Op Fl n
|
||||
.Op Fl b Ar boot
|
||||
.Op Fl m Ar machine
|
||||
.Ar disk type
|
||||
.Op Ar packid
|
||||
.Nm
|
||||
.Fl R B
|
||||
.Op Fl n
|
||||
.Op Fl b Ar boot
|
||||
.Op Fl m Ar machine
|
||||
.Ar disk protofile
|
||||
.Sh DESCRIPTION
|
||||
The
|
||||
.Nm
|
||||
utility
|
||||
installs, examines or modifies the label on a disk drive or pack.
|
||||
When writing
|
||||
the label, it can be used to change the drive identification, the disk
|
||||
partitions on the drive, or to replace a damaged label.
|
||||
There are several forms
|
||||
of the command that read (display), install, or edit the label on a disk.
|
||||
In addition,
|
||||
.Nm
|
||||
can install bootstrap code.
|
||||
.Ss Raw or In-Core Label
|
||||
The disk label resides close to or at the beginning of each disk slice.
|
||||
For faster access, the kernel maintains a copy in core at all times.
|
||||
By default, most
|
||||
.Nm
|
||||
access the in-core copy of the label.
|
||||
To access the raw (on-disk) copy, use the
|
||||
.Fl r
|
||||
option.
|
||||
This option allows a label to be installed on a disk without kernel
|
||||
support for a label, such as when labels are first installed on a system; it
|
||||
must be used when first installing a label on a disk.
|
||||
The specific effect of
|
||||
.Fl r
|
||||
is described under each command.
|
||||
.Ss Disk Device Name
|
||||
All
|
||||
.Nm
|
||||
forms require a disk device name, which should always be the raw
|
||||
device name representing the disk or slice.
|
||||
For example,
|
||||
.Pa da0
|
||||
represents the entire disk regardless of any
|
||||
.Tn DOS
|
||||
partitioning,
|
||||
and
|
||||
.Pa da0s1
|
||||
represents a slice.
|
||||
Some devices, most notably
|
||||
.Xr ccd 4 ,
|
||||
require that the
|
||||
.Dq whole-disk
|
||||
(or
|
||||
.Ql c )
|
||||
partition be specified.
|
||||
For example,
|
||||
.Pa ccd0c .
|
||||
When specifying the device,
|
||||
the
|
||||
.Pa /dev/
|
||||
path prefix may be omitted;
|
||||
the
|
||||
.Nm
|
||||
utility will automatically prepend it.
|
||||
.Ss Reading the Disk Label
|
||||
To examine the label on a disk drive, use
|
||||
.Nm
|
||||
without options:
|
||||
.Pp
|
||||
.Nm
|
||||
.Op Fl r
|
||||
.Ar disk
|
||||
.Pp
|
||||
.Ar disk
|
||||
represents the raw disk in question, and may be in the form
|
||||
.Pa da0
|
||||
or
|
||||
.Pa /dev/da0c .
|
||||
It will display all of the parameters associated with the drive and its
|
||||
partition layout.
|
||||
Unless the
|
||||
.Fl r
|
||||
option is given,
|
||||
the kernel's in-core copy of the label is displayed;
|
||||
if the disk has no label, or the partition types on the disk are incorrect,
|
||||
the kernel may have constructed or modified the label.
|
||||
If the
|
||||
.Fl r
|
||||
option is given,
|
||||
.Nm
|
||||
reads the label from the raw disk and displays it.
|
||||
Both versions are usually
|
||||
identical except in the case where a label has not yet been initialized or
|
||||
is corrupt.
|
||||
.Ss Writing a Standard Label
|
||||
To write a standard label, use the form
|
||||
.Pp
|
||||
.Nm
|
||||
.Fl w
|
||||
.Op Fl nr
|
||||
.Op Fl m Ar machine
|
||||
.Ar disk type
|
||||
.Op Ar packid
|
||||
.Pp
|
||||
The required arguments to
|
||||
.Nm
|
||||
are the drive to be labeled, and the drive type as described in the
|
||||
.Xr disktab 5
|
||||
file.
|
||||
The drive parameters and partitions are taken from that file.
|
||||
If different disks of the same physical type are to have different partitions,
|
||||
it will be necessary to have separate
|
||||
.Xr disktab 5
|
||||
entries describing each, or to edit
|
||||
the label after installation as described below.
|
||||
The optional argument is a
|
||||
pack identification string, up to 16 characters long.
|
||||
The
|
||||
.Ar packid
|
||||
must be quoted if it contains blanks.
|
||||
.Pp
|
||||
If the
|
||||
.Fl m
|
||||
option is given, then label will be written so that
|
||||
it is understood by the target
|
||||
.Ar machine ;
|
||||
defaults to the current hardware architecture.
|
||||
.Pp
|
||||
If
|
||||
.Fl n
|
||||
is used, no data will be written to the device, and instead the
|
||||
disk label that would have been written will be printed to standard output.
|
||||
.Pp
|
||||
If the
|
||||
.Fl r
|
||||
option is given, the disk sectors containing the label and bootstrap
|
||||
will be written directly.
|
||||
A side-effect of this is that any existing bootstrap code will be overwritten
|
||||
and the disk rendered unbootable.
|
||||
See the boot options below for a method of
|
||||
writing the and the bootstrap at the same time.
|
||||
If
|
||||
.Fl r
|
||||
is not specified,
|
||||
the existing label will be updated via the in-core copy, and any bootstrap
|
||||
code will be unaffected.
|
||||
If the disk does not already have a label, the
|
||||
.Fl r
|
||||
option must be used.
|
||||
In either case, the kernel's in-core label is replaced.
|
||||
.Pp
|
||||
For a virgin disk that is not known to
|
||||
.Xr disktab 5 ,
|
||||
.Ar type
|
||||
can be specified as
|
||||
.Cm auto .
|
||||
In this case, the driver is requested to produce a virgin label for the
|
||||
disk.
|
||||
This might or might not be successful, depending on whether the
|
||||
driver for the disk is able to get the required data without reading
|
||||
anything from the disk at all.
|
||||
It will likely succeed for all
|
||||
.Tn SCSI
|
||||
disks, most
|
||||
.Tn IDE
|
||||
disks, and
|
||||
.Cm vnode
|
||||
type memory disks
|
||||
.Pq Xr md 4 .
|
||||
Writing a label to the
|
||||
disk is the only supported operation, and the
|
||||
.Ar disk
|
||||
itself must be provided as the canonical name, i.e., not as a full
|
||||
path name.
|
||||
.Pp
|
||||
For most harddisks, a label based on percentages for most partitions (and
|
||||
one partition with a size of
|
||||
.Ql * )
|
||||
will produce a reasonable configuration.
|
||||
.Pp
|
||||
PC-based systems have special requirements in order for the
|
||||
.Tn BIOS
|
||||
to properly recognize a
|
||||
.Fx
|
||||
disk label.
|
||||
Older systems may require what is known as a
|
||||
.Dq dangerously-dedicated
|
||||
disk label, which creates a fake
|
||||
.Tn DOS
|
||||
partition to work around problems older
|
||||
.Tn BIOS Ns es
|
||||
have with modern disk geometries.
|
||||
On newer systems, a normal
|
||||
.Tn DOS
|
||||
partition should generally be created using
|
||||
.Xr fdisk 8 ,
|
||||
and then a
|
||||
.Fx
|
||||
disk label within that slice.
|
||||
This is described later on in this page.
|
||||
.Pp
|
||||
Installing a new disk label does not in of itself allow the system to boot
|
||||
a kernel using that label.
|
||||
Boot blocks must also be installed, which is
|
||||
described later on in this manual page.
|
||||
.Ss Editing an Existing Disk Label
|
||||
To edit an existing disk label, use the form
|
||||
.Pp
|
||||
.Nm
|
||||
.Fl e
|
||||
.Op Fl nr
|
||||
.Op Fl m Ar machine
|
||||
.Ar disk
|
||||
.Pp
|
||||
This command reads the label from the in-core kernel copy, or directly from the
|
||||
disk if the
|
||||
.Fl r
|
||||
option is also specified.
|
||||
The label is written to a file in
|
||||
.Tn ASCII
|
||||
format, and then supplied to an editor for changes.
|
||||
If no editor is specified in the
|
||||
.Ev EDITOR
|
||||
environment variable,
|
||||
.Xr vi 1
|
||||
is used.
|
||||
When the editor terminates, the label file is used to rewrite the disk label.
|
||||
Existing bootstrap code is unchanged regardless of whether
|
||||
.Fl r
|
||||
was specified.
|
||||
.Pp
|
||||
If the
|
||||
.Fl m
|
||||
option is given, then the label will be written so that
|
||||
it is understood by the target
|
||||
.Ar machine ;
|
||||
defaults to the current hardware architecture.
|
||||
.Pp
|
||||
If
|
||||
.Fl n
|
||||
is used, no data will be written to the device, and instead the
|
||||
disk label that would have been written will be printed to standard output.
|
||||
This is
|
||||
useful to see how a partitioning scheme will work out for a specific disk.
|
||||
.Ss Restoring a Disk Label From a File
|
||||
To restore a disk label from a file, use the form
|
||||
.Pp
|
||||
.Nm
|
||||
.Fl R
|
||||
.Op Fl nr
|
||||
.Op Fl m Ar machine
|
||||
.Ar disk protofile
|
||||
.Pp
|
||||
.Nm
|
||||
is capable of restoring a disk label that was previously saved in a file in
|
||||
.Tn ASCII
|
||||
format.
|
||||
The prototype file used to create the label should be in the same format as that
|
||||
produced when reading or editing a label.
|
||||
Comments are delimited by
|
||||
.Ql #
|
||||
and newline.
|
||||
As when writing a new label, any existing bootstrap code will be
|
||||
clobbered if
|
||||
.Fl r
|
||||
is specified, and will be unaffected otherwise.
|
||||
See the boot options below for a
|
||||
method of restoring the label and writing the bootstrap at the same time.
|
||||
.Pp
|
||||
If the
|
||||
.Fl m
|
||||
option is given, then the label will be written so that
|
||||
it is understood by the target
|
||||
.Ar machine ;
|
||||
defaults to the current hardware architecture.
|
||||
.Pp
|
||||
If
|
||||
.Fl n
|
||||
is used, no data will be written to the device, and instead the
|
||||
disk label that would have been written will be printed to standard output.
|
||||
This is
|
||||
useful to see how a partitioning scheme will work out for a specific disk.
|
||||
.Ss Installing Bootstraps
|
||||
The final three forms of
|
||||
.Nm
|
||||
are used to install bootstrap code.
|
||||
If a
|
||||
.Dq dangerously-dedicated
|
||||
disk is created for compatibility with older PC systems,
|
||||
the raw disk name such as
|
||||
.Pa da0
|
||||
should be specified.
|
||||
If an existing slice should be labeled,
|
||||
the slice name such as
|
||||
.Pa da0s1
|
||||
should be specified,
|
||||
and to make it bootable,
|
||||
.Tn MBR
|
||||
on the base disk should probably be updated; see
|
||||
.Xr fdisk 8 .
|
||||
.Pp
|
||||
.Nm
|
||||
.Fl B
|
||||
.Op Fl b Ar boot
|
||||
.Op Fl m Ar machine
|
||||
.Ar disk
|
||||
.Pp
|
||||
This form installs the bootstrap only.
|
||||
It does not change the disk label.
|
||||
Never use this command on a base disk, such as
|
||||
.Pa da0 ,
|
||||
unless the intent is to create a
|
||||
.Dq dangerously-dedicated
|
||||
disk.
|
||||
This command is typically run on a slice such as
|
||||
.Pa da0s1 .
|
||||
.Pp
|
||||
The
|
||||
.Fl m
|
||||
option should be specified if the label was
|
||||
created for a different hardware architecture,
|
||||
.Ar machine .
|
||||
.Pp
|
||||
.Nm
|
||||
.Fl w B
|
||||
.Op Fl n
|
||||
.Op Fl b Ar boot
|
||||
.Op Fl m Ar machine
|
||||
.Ar disk type
|
||||
.Op Ar packid
|
||||
.Pp
|
||||
This form corresponds to the
|
||||
.Dq "write label"
|
||||
command described above.
|
||||
In addition to writing a new volume label, it also installs the bootstrap.
|
||||
If run on a base disk, this command will create a
|
||||
.Dq dangerously-dedicated
|
||||
label.
|
||||
This command is normally run on a slice rather than a base disk.
|
||||
.Pp
|
||||
If the
|
||||
.Fl m
|
||||
option is given, then the label and bootstrap will be written so that
|
||||
they are understood by the target
|
||||
.Ar machine ;
|
||||
defaults to the current hardware architecture.
|
||||
.Pp
|
||||
If
|
||||
.Fl n
|
||||
is used, no data will be written to the device, and instead the
|
||||
disk label that would have been written will be printed to standard output.
|
||||
.Pp
|
||||
.Nm
|
||||
.Fl R B
|
||||
.Op Fl n
|
||||
.Op Fl b Ar boot
|
||||
.Op Fl m Ar machine
|
||||
.Ar disk protofile
|
||||
.Pp
|
||||
This form corresponds to the
|
||||
.Dq "restore label"
|
||||
command described above.
|
||||
In addition to restoring the volume label, it also installs the bootstrap.
|
||||
If run on a base disk, this command will create a
|
||||
.Dq dangerously-dedicated
|
||||
label.
|
||||
This command is normally run on a slice rather than a base disk.
|
||||
.Pp
|
||||
The bootstrap commands always access the disk directly, so it is not necessary
|
||||
to specify the
|
||||
.Fl r
|
||||
option.
|
||||
.Pp
|
||||
If the
|
||||
.Fl m
|
||||
option is given, then the label and bootstrap will be written so that
|
||||
they are understood by the target
|
||||
.Ar machine ;
|
||||
defaults to the current hardware architecture.
|
||||
.Pp
|
||||
If
|
||||
.Fl n
|
||||
is used, no data will be written to the device, and instead the
|
||||
disk label that would have been written will be printed to standard output.
|
||||
.Pp
|
||||
The bootstrap code is comprised of two boot programs compiled into a single
|
||||
.Pa /boot/boot
|
||||
image.
|
||||
An alternative boot image may be specified with the
|
||||
.Fl b
|
||||
option.
|
||||
.Ss Initializing/Formatting a Bootable Disk From Scratch
|
||||
To initialize a disk from scratch, the following sequence is recommended.
|
||||
Please note that this will wipe everything that was previously on the disk,
|
||||
including any
|
||||
.No non- Ns Fx
|
||||
slices.
|
||||
.Bl -enum
|
||||
.It
|
||||
Use
|
||||
.Xr fdisk 8
|
||||
to initialize the hard disk, and create a slice table, referred to
|
||||
as the
|
||||
.Dq "partition table"
|
||||
in
|
||||
.Tn DOS .
|
||||
.It
|
||||
Use
|
||||
.Nm
|
||||
to define partitions on
|
||||
.Fx
|
||||
slices created in the previous step.
|
||||
.It
|
||||
Finally use
|
||||
.Xr newfs 8
|
||||
to create file systems on new partitions.
|
||||
.El
|
||||
.Pp
|
||||
A typical partitioning scheme would be to have an
|
||||
.Ql a
|
||||
partition
|
||||
of approximately 128MB to hold the root file system, a
|
||||
.Ql b
|
||||
partition for
|
||||
swap, a
|
||||
.Ql d
|
||||
partition for
|
||||
.Pa /var
|
||||
(usually 128MB), an
|
||||
.Ql e
|
||||
partition
|
||||
for
|
||||
.Pa /var/tmp
|
||||
(usually 128MB), an
|
||||
.Ql f
|
||||
partition for
|
||||
.Pa /usr
|
||||
(usually around 2GB),
|
||||
and finally a
|
||||
.Ql g
|
||||
partition for
|
||||
.Pa /home
|
||||
(usually all remaining space).
|
||||
Your mileage may vary.
|
||||
.Pp
|
||||
.Nm fdisk Fl BI Pa da0
|
||||
.Pp
|
||||
.Nm
|
||||
.Fl w B
|
||||
.Pa da0s1
|
||||
.Cm auto
|
||||
.Pp
|
||||
.Nm
|
||||
.Fl e
|
||||
.Pa da0s1
|
||||
.Sh FILES
|
||||
.Bl -tag -width ".Pa /etc/disktab" -compact
|
||||
.It Pa /boot/boot
|
||||
Default boot image.
|
||||
.It Pa /etc/disktab
|
||||
Disk description file.
|
||||
.El
|
||||
.Sh SAVED FILE FORMAT
|
||||
The
|
||||
.Nm
|
||||
utility
|
||||
uses an
|
||||
.Tn ASCII
|
||||
version of the label when examining, editing, or restoring a disk
|
||||
label.
|
||||
The format is:
|
||||
.Bd -literal -offset 4n
|
||||
# /dev/da1c:
|
||||
type: SCSI
|
||||
disk: da0s1
|
||||
label:
|
||||
flags:
|
||||
bytes/sector: 512
|
||||
sectors/track: 51
|
||||
tracks/cylinder: 19
|
||||
sectors/cylinder: 969
|
||||
cylinders: 1211
|
||||
sectors/unit: 1173930
|
||||
rpm: 3600
|
||||
interleave: 1
|
||||
trackskew: 0
|
||||
cylinderskew: 0
|
||||
headswitch: 0 # milliseconds
|
||||
track-to-track seek: 0 # milliseconds
|
||||
drivedata: 0
|
||||
|
||||
8 partitions:
|
||||
# size offset fstype [fsize bsize bps/cpg]
|
||||
a: 81920 0 4.2BSD 1024 8192 16 # (Cyl. 0 - 84*)
|
||||
b: 160000 81920 swap # (Cyl. 84* - 218*)
|
||||
c: 1173930 0 unused 0 0 # (Cyl. 0 - 1211*)
|
||||
h: 962010 211920 vinum # (Cyl. 218*- 1211*)
|
||||
.Ed
|
||||
.Pp
|
||||
Lines starting with a
|
||||
.Ql #
|
||||
mark are comments.
|
||||
Most of the other specifications are no longer used.
|
||||
The ones which must still be set correctly are:
|
||||
.Pp
|
||||
.Bl -inset
|
||||
.It Ar label
|
||||
is an optional label, set by the
|
||||
.Ar packid
|
||||
option when writing a label.
|
||||
.It Ar flags
|
||||
may be
|
||||
.Cm removable , ecc
|
||||
or
|
||||
.Cm badsect .
|
||||
.Cm removable
|
||||
is set for removable media drives, but no current
|
||||
.Fx
|
||||
driver evaluates this
|
||||
flag.
|
||||
.Cm ecc
|
||||
is no longer supported;
|
||||
.Cm badsect
|
||||
specifies that the drive can perform bad sector remapping.
|
||||
.It Ar sectors/unit
|
||||
describes the total size of the disk.
|
||||
This value must be correct.
|
||||
.It Ar "the partition table"
|
||||
is the
|
||||
.Ux
|
||||
partition table, not the
|
||||
.Tn DOS
|
||||
partition table described in
|
||||
.Xr fdisk 8 .
|
||||
.El
|
||||
.Pp
|
||||
The partition table can have up to 8 entries.
|
||||
It contains the following information:
|
||||
.Bl -tag -width indent
|
||||
.It Ar #
|
||||
The partition identifier is a single letter in the range
|
||||
.Ql a
|
||||
to
|
||||
.Ql h .
|
||||
By convention, partition
|
||||
.Ql c
|
||||
is reserved to describe the entire disk.
|
||||
.It Ar size
|
||||
The size of the partition in sectors,
|
||||
.Cm K
|
||||
(kilobytes - 1024),
|
||||
.Cm M
|
||||
(megabytes - 1024*1024),
|
||||
.Cm G
|
||||
(gigabytes - 1024*1024*1024),
|
||||
.Cm %
|
||||
(percentage of free space
|
||||
.Em after
|
||||
removing any fixed-size partitions other than partition
|
||||
.Ql c ) ,
|
||||
or
|
||||
.Cm *
|
||||
(all remaining free space
|
||||
.Em after
|
||||
fixed-size and percentage partitions).
|
||||
For partition
|
||||
.Ql c ,
|
||||
a size of
|
||||
.Cm *
|
||||
indicates the entire disk.
|
||||
Lowercase versions of
|
||||
.Cm K , M ,
|
||||
and
|
||||
.Cm G
|
||||
are allowed.
|
||||
Size and type should be specifed without any spaces between them.
|
||||
.Pp
|
||||
Example: 2097152, 1G, 1024M and 1048576K are all the same size
|
||||
(assuming 512-byte sectors).
|
||||
.It Ar offset
|
||||
The offset of the start of the partition from the beginning of the
|
||||
drive in sectors, or
|
||||
.Cm *
|
||||
to have
|
||||
.Nm
|
||||
calculate the correct offset to use (the end of the previous partition plus
|
||||
one, ignoring partition
|
||||
.Ql c .
|
||||
For partition
|
||||
.Ql c ,
|
||||
.Cm *
|
||||
will be interpreted as an offset of 0.
|
||||
.It Ar fstype
|
||||
Describes the purpose of the partition.
|
||||
The example shows all currently used partition types.
|
||||
For
|
||||
.Tn UFS
|
||||
file systems and
|
||||
.Xr ccd 4
|
||||
partitions, use type
|
||||
.Cm 4.2BSD .
|
||||
For Vinum drives, use type
|
||||
.Cm vinum .
|
||||
Other common types are
|
||||
.Cm swap
|
||||
and
|
||||
.Cm unused .
|
||||
By convention, partition
|
||||
.Ql c
|
||||
represents the entire slice and should be of type
|
||||
.Cm unused ,
|
||||
though
|
||||
.Nm
|
||||
does not enforce this convention.
|
||||
The
|
||||
.Nm
|
||||
utility
|
||||
also knows about a number of other partition types,
|
||||
none of which are in current use.
|
||||
(See the definitions starting with
|
||||
.Dv FS_UNUSED
|
||||
in
|
||||
.In sys/disklabel.h
|
||||
for more details.)
|
||||
.It Ar fsize
|
||||
For
|
||||
.Cm 4.2BSD
|
||||
and
|
||||
.Tn LFS
|
||||
file systems only, the fragment size.
|
||||
Defaults to 1024 for partitions smaller than 1GB,
|
||||
4096 for partitions 1GB or larger.
|
||||
.It Ar bsize
|
||||
For
|
||||
.Cm 4.2BSD
|
||||
and
|
||||
.Tn LFS
|
||||
file systems only, the block size.
|
||||
Defaults to 8192 for partitions smaller than 1GB,
|
||||
16384 for partitions 1GB or larger.
|
||||
.It Ar bps/cpg
|
||||
For
|
||||
.Cm 4.2BSD
|
||||
file systems, the number of cylinders in a cylinder group.
|
||||
For
|
||||
.Tn LFS
|
||||
file systems, the segment shift value.
|
||||
Defaults to 16 for partitions smaller than 1GB,
|
||||
64 for partitions 1GB or larger.
|
||||
.El
|
||||
.Pp
|
||||
The remainder of the line is a comment and shows the cylinder allocations based
|
||||
on the obsolete (but possibly correct) geometry information about the drive.
|
||||
The asterisk
|
||||
.Pq Ql *
|
||||
indicates that the partition does not begin or end exactly on a
|
||||
cylinder boundary.
|
||||
.Sh EXAMPLES
|
||||
.Dl "disklabel da0s1"
|
||||
.Pp
|
||||
Display the in-core label for the first slice of the
|
||||
.Pa da0
|
||||
disk, as obtained via
|
||||
.Pa /dev/da0s1 .
|
||||
(If the disk is
|
||||
.Dq dangerously-dedicated ,
|
||||
the base disk name should be specified, such as
|
||||
.Pa da0 . )
|
||||
.Pp
|
||||
.Dl "disklabel da0s1 > savedlabel"
|
||||
.Pp
|
||||
Save the in-core label for
|
||||
.Pa da0s1
|
||||
into the file
|
||||
.Pa savedlabel .
|
||||
This file can be used with the
|
||||
.Fl R
|
||||
option to restore the label at a later date.
|
||||
.Pp
|
||||
.Dl "disklabel -w -r /dev/da0s1 da2212 foo"
|
||||
.Pp
|
||||
Create a label for
|
||||
.Pa da0s1
|
||||
based on information for
|
||||
.Dq da2212
|
||||
found in
|
||||
.Pa /etc/disktab .
|
||||
Any existing bootstrap code will be clobbered
|
||||
and the disk rendered unbootable.
|
||||
.Pp
|
||||
.Dl "disklabel -e -r da0s1"
|
||||
.Pp
|
||||
Read the on-disk label for
|
||||
.Pa da0s1 ,
|
||||
edit it, and reinstall in-core as well as on-disk.
|
||||
Existing bootstrap code is unaffected.
|
||||
.Pp
|
||||
.Dl "disklabel -e -r -n da0s1"
|
||||
.Pp
|
||||
Read the on-disk label for
|
||||
.Pa da0s1 ,
|
||||
edit it, and display what the new label would be (in sectors).
|
||||
It does
|
||||
.Em not
|
||||
install the new label either in-core or on-disk.
|
||||
.Pp
|
||||
.Dl "disklabel -r -w da0s1 auto"
|
||||
.Pp
|
||||
Try to auto-detect the required information from
|
||||
.Pa da0s1 ,
|
||||
and write a new label to the disk.
|
||||
Use another
|
||||
.Nm Fl e
|
||||
command to edit the
|
||||
partitioning and file system information.
|
||||
.Pp
|
||||
.Dl "disklabel -R da0s1 savedlabel"
|
||||
.Pp
|
||||
Restore the on-disk and in-core label for
|
||||
.Pa da0s1
|
||||
from information in
|
||||
.Pa savedlabel .
|
||||
Existing bootstrap code is unaffected.
|
||||
.Pp
|
||||
.Dl "disklabel -R -n da0s1 label_layout"
|
||||
.Pp
|
||||
Display what the label would be for
|
||||
.Pa da0s1
|
||||
using the partition layout in
|
||||
.Pa label_layout .
|
||||
This is useful for determining how much space would be alloted for various
|
||||
partitions with a labelling scheme using
|
||||
.Cm % Ns -based
|
||||
or
|
||||
.Cm *
|
||||
partition sizes.
|
||||
.Pp
|
||||
.Dl "disklabel -B da0s1"
|
||||
.Pp
|
||||
Install a new bootstrap on
|
||||
.Pa da0s1 .
|
||||
The boot code comes from
|
||||
.Pa /boot/boot .
|
||||
On-disk and in-core labels are unchanged.
|
||||
.Pp
|
||||
.Dl "disklabel -w -B /dev/da0s1 -b newboot da2212"
|
||||
.Pp
|
||||
Install a new label and bootstrap.
|
||||
The label is derived from
|
||||
.Xr disktab 5
|
||||
information for
|
||||
.Dq da2212 ,
|
||||
and installed both in-core and on-disk.
|
||||
The bootstrap code comes from the file
|
||||
.Pa newboot
|
||||
in the current working directory.
|
||||
.Bd -literal -offset indent
|
||||
dd if=/dev/zero of=/dev/da0 bs=512 count=32
|
||||
fdisk -BI da0
|
||||
dd if=/dev/zero of=/dev/da0s1 bs=512 count=32
|
||||
disklabel -w -B da0s1 auto
|
||||
disklabel -e da0s1
|
||||
.Ed
|
||||
.Pp
|
||||
Completely wipe any prior information on the disk, creating a new bootable
|
||||
disk with a
|
||||
.Tn DOS
|
||||
partition table containing one slice, covering the whole disk.
|
||||
Initialize the label on this slice,
|
||||
then edit it.
|
||||
The
|
||||
.Xr dd 1
|
||||
commands are optional, but may be necessary for some
|
||||
.Tn BIOS Ns es
|
||||
to properly
|
||||
recognize the disk.
|
||||
.Pp
|
||||
This is an example disk label that uses some of the new partition size types
|
||||
such as
|
||||
.Cm % , M , G ,
|
||||
and
|
||||
.Cm * ,
|
||||
which could be used as a source file for
|
||||
.Dq Li "disklabel -R ad0s1c new_label_file" :
|
||||
.Bd -literal -offset 4n
|
||||
# /dev/ad0s1c:
|
||||
type: ESDI
|
||||
disk: ad0s1
|
||||
label:
|
||||
flags:
|
||||
bytes/sector: 512
|
||||
sectors/track: 63
|
||||
tracks/cylinder: 16
|
||||
sectors/cylinder: 1008
|
||||
cylinders: 40633
|
||||
sectors/unit: 40959009
|
||||
rpm: 3600
|
||||
interleave: 1
|
||||
trackskew: 0
|
||||
cylinderskew: 0
|
||||
headswitch: 0 # milliseconds
|
||||
track-to-track seek: 0 # milliseconds
|
||||
drivedata: 0
|
||||
|
||||
8 partitions:
|
||||
# size offset fstype [fsize bsize bps/cpg]
|
||||
a: 400M 0 4.2BSD 4096 16384 75 # (Cyl. 0 - 812*)
|
||||
b: 1G * swap
|
||||
c: * * unused
|
||||
e: 204800 * 4.2BSD
|
||||
f: 5g * 4.2BSD
|
||||
g: * * 4.2BSD
|
||||
.Ed
|
||||
.Sh SEE ALSO
|
||||
.Xr ccd 4 ,
|
||||
.Xr md 4 ,
|
||||
.Xr disklabel 5 ,
|
||||
.Xr disktab 5 ,
|
||||
.Xr boot0cfg 8 ,
|
||||
.Xr fdisk 8 ,
|
||||
.Xr vinum 8
|
||||
.Sh DIAGNOSTICS
|
||||
The kernel device drivers will not allow the size of a disk partition
|
||||
to be decreased or the offset of a partition to be changed while it is open.
|
||||
Some device drivers create a label containing only a single large partition
|
||||
if a disk is unlabeled; thus, the label must be written to the
|
||||
.Ql a
|
||||
partition of the disk while it is open.
|
||||
This sometimes requires the desired label to be set in two steps,
|
||||
the first one creating at least one other partition,
|
||||
and the second one setting the label on the new partition
|
||||
while shrinking the
|
||||
.Ql a
|
||||
partition.
|
||||
.Pp
|
||||
On some machines, the bootstrap code may not fit entirely in the area
|
||||
allocated for it by some file systems.
|
||||
As a result,
|
||||
it may not be possible to have file systems on some partitions of a
|
||||
.Dq bootable
|
||||
disk.
|
||||
When installing bootstrap code,
|
||||
.Nm
|
||||
checks for these cases.
|
||||
If the installed boot code would overlap a partition of type
|
||||
.Dv FS_UNUSED ,
|
||||
it is marked as type
|
||||
.Dv FS_BOOT .
|
||||
The
|
||||
.Xr newfs 8
|
||||
utility will disallow creation of file systems on
|
||||
.Dv FS_BOOT
|
||||
partitions.
|
||||
Conversely, if a partition has a type other than
|
||||
.Dv FS_UNUSED
|
||||
or
|
||||
.Dv FS_BOOT ,
|
||||
.Nm
|
||||
will not install bootstrap code that overlaps it.
|
||||
.Sh BUGS
|
||||
When a disk name is given without a full pathname,
|
||||
the constructed device name uses the
|
||||
.Ql c
|
||||
partition.
|
||||
.Pp
|
||||
For the i386 architecture, the primary bootstrap sector contains
|
||||
an embedded
|
||||
.Em fdisk
|
||||
table.
|
||||
The
|
||||
.Nm
|
||||
utility takes care to not clobber it when installing a bootstrap only
|
||||
.Pq Fl B ,
|
||||
or when editing an existing label
|
||||
.Pq Fl e ,
|
||||
but it unconditionally writes the primary bootstrap program onto
|
||||
the disk for
|
||||
.Fl w
|
||||
or
|
||||
.Fl R ,
|
||||
thus replacing the
|
||||
.Em fdisk
|
||||
table by the dummy one in the bootstrap program.
|
||||
This is only of
|
||||
concern if the disk is fully dedicated, so that the
|
||||
.Fx
|
||||
disk label
|
||||
starts at absolute block 0 on the disk.
|
||||
.Pp
|
||||
The
|
||||
.Nm
|
||||
utility
|
||||
does not perform all possible error checking.
|
||||
Warnings are given if partitions overlap,
|
||||
if an absolute offset does not match the expected offset,
|
||||
if the
|
||||
.Ql c
|
||||
partition does not start at 0 or does not cover the entire slice,
|
||||
if a partition runs past the end of the device,
|
||||
and a number of other errors,
|
||||
but no warning is given if space remains unused.
|
File diff suppressed because it is too large
Load diff
|
@ -1,40 +0,0 @@
|
|||
/*
|
||||
* Copyright (c) 1989, 1993
|
||||
* The Regents of the University of California. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. All advertising materials mentioning features or use of this software
|
||||
* must display the following acknowledgement:
|
||||
* This product includes software developed by the University of
|
||||
* California, Berkeley and its contributors.
|
||||
* 4. Neither the name of the University nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* @(#)pathnames.h 8.1 (Berkeley) 6/5/93
|
||||
* $FreeBSD$
|
||||
*/
|
||||
|
||||
#include <paths.h>
|
||||
|
||||
#define _PATH_BOOTDIR "/boot"
|
||||
#define PATH_TMPFILE "/tmp/EdDk.XXXXXXXXXX"
|
Loading…
Reference in a new issue