1 .\" Copyright (c) 1987, 1988, 1991, 1993
2 .\" The Regents of the University of California. All rights reserved.
4 .\" This code is derived from software contributed to Berkeley by
5 .\" Symmetric Computer Systems.
7 .\" Redistribution and use in source and binary forms, with or without
8 .\" modification, are permitted provided that the following conditions
10 .\" 1. Redistributions of source code must retain the above copyright
11 .\" notice, this list of conditions and the following disclaimer.
12 .\" 2. Redistributions in binary form must reproduce the above copyright
13 .\" notice, this list of conditions and the following disclaimer in the
14 .\" documentation and/or other materials provided with the distribution.
15 .\" 3. All advertising materials mentioning features or use of this software
16 .\" must display the following acknowledgment:
17 .\" This product includes software developed by the University of
18 .\" California, Berkeley and its contributors.
19 .\" 4. Neither the name of the University nor the names of its contributors
20 .\" may be used to endorse or promote products derived from this software
21 .\" without specific prior written permission.
23 .\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
24 .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
25 .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
26 .\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
27 .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
28 .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
29 .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
30 .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
31 .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
32 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
35 .\" @(#)disklabel.8 8.2 (Berkeley) 4/19/94
36 .\" $FreeBSD: src/sbin/disklabel/disklabel.8,v 1.15.2.22 2003/04/17 17:56:34 trhodes Exp $
37 .\" $DragonFly: src/sbin/disklabel/disklabel.8,v 1.30 2008/09/16 20:45:36 thomas Exp $
44 .Nd read and write 32 bit disk pack label
53 .Ar disk Ar disktype Ns / Ns Cm auto
76 .Oo Ar disktype Ns / Ns Cm auto Oc
85 .Ar disk Ar disktype Ns / Ns Cm auto
96 .Oo Ar disktype Ns / Ns Cm auto Oc
98 .Fl f Ar slice_start_lba
104 installs, examines or modifies the label on a disk drive or pack.
106 the label, it can be used to change the drive identification, the disk
107 partitions on the drive, or to replace a damaged label.
108 There are several forms
109 of the command that read (display), install or edit the label on a disk.
113 can install bootstrap code.
114 .Ss Raw or in-core label
115 The disk label resides close to or at the beginning of each disk slice.
116 For faster access, the kernel maintains a copy in core at all times.
118 default, most forms of the
120 command access the in-core copy of the label.
121 To access the raw (on-disk)
125 This option allows a label to be installed on a disk without kernel
126 support for a label, such as when labels are first installed on a system; it
127 must be used when first installing a label on a disk.
128 The specific effect of
130 is described under each command.
134 forms require a disk device name, which should always be the raw
135 device name representing the disk or slice.
137 uses the following scheme for slice numbering:
138 If the disk doesn't use GPT (typically laid out by
140 but e.g.\& MBR (typically laid out by
144 represents the entire disk regardless of any DOS partitioning.
145 Slice 0 is called the compatibility slice,
146 and slice 1 and onward, e.g.\&
151 If the disk does use GPT, then all slices are
153 slices, slice 0 isn't special, it is just the first slice on the disk.
154 You do not have to include the
156 path prefix when specifying the device.
159 utility will automatically prepend it.
160 .Ss Reading the disk label
161 To examine the label on a disk drive, use
170 represents the raw disk in question, and may be in the form
174 It will display all of the parameters associated with the drive and its
179 the kernel's in-core copy of the label is displayed;
180 if the disk has no label, or the partition types on the disk are incorrect,
181 the kernel may have constructed or modified the label.
186 reads the label from the raw disk and displays it.
187 Both versions are usually
188 identical except in the case where a label has not yet been initialized or
190 .Ss Writing a standard label
191 To write a standard label, use the form
197 .Ar disk Ar disktype Ns / Ns Cm auto
200 The required arguments to
202 are the drive to be labeled and the drive type as described in the
205 The drive parameters and partitions are taken from that file.
207 different disks of the same physical type are to have different partitions, it
208 will be necessary to have separate disktab entries describing each, or to edit
209 the label after installation as described below.
210 The optional argument is a
211 pack identification string, up to 16 characters long.
213 quoted if it contains blanks.
217 flag is given, no data will be written to the device, and instead the
218 disklabel that would have been written will be printed to stdout.
222 flag is given, the disk sectors containing the label and bootstrap
223 will be written directly.
224 A side-effect of this is that any existing bootstrap code will be overwritten
225 and the disk rendered unbootable.
226 See the boot options below for a method of
227 writing the label and the bootstrap at the same time.
231 the existing label will be updated via the in-core copy and any bootstrap
232 code will be unaffected.
233 If the disk does not already have a label, the
236 In either case, the kernel's in-core label is replaced.
238 For a virgin disk that is not known to
243 In this case, the driver is requested to produce a virgin label for the
245 This might or might not be successful, depending on whether the
246 driver for the disk is able to get the required data without reading
247 anything from the disk at all.
248 It will likely succeed for all SCSI
249 disks, most IDE disks, and vnode devices.
250 Writing a label to the
251 disk is the only supported operation, and the
253 itself must be provided as the canonical name, i.e.\& not as a full
256 For most harddisks, a label based on percentages for most partitions (and
257 one partition with a size of
259 will produce a reasonable configuration.
261 PC-based systems have special requirements in order for the BIOS to properly
265 Older systems may require what is known as a
266 .Dq dangerously dedicated
267 disklabel, which creates a fake DOS partition to work around problems older
268 BIOSes have with modern disk geometries.
269 On newer systems you generally want
270 to create a normal DOS partition using
274 disklabel within that slice.
276 later on in this page.
278 Installing a new disklabel does not in of itself allow your system to boot
279 a kernel using that label.
280 You must also install boot blocks, which is
281 described later on in this manual page.
282 .Ss Editing an existing disk label
283 To edit an existing disk label, use the form
291 This command reads the label from the in-core kernel copy, or directly from the
294 flag is also specified.
295 The label is written to a file in ASCII and then
296 supplied to an editor for changes.
297 If no editor is specified in an
299 environment variable,
302 When the editor terminates, the label file is used to rewrite the disk
304 Existing bootstrap code is unchanged regardless of whether
309 is specified, no data will be written to the device, and instead the
310 disklabel that would have been written will be printed to stdout.
312 useful to see how a partitioning scheme will work out for a specific disk.
313 .Ss Restoring a disk label from a file
314 To restore a disk label from a file, use the form
320 .Ar disk Ar protofile
323 is capable of restoring a disk label that was previously saved in a file
325 The prototype file used to create the label should be in the same format
326 as that produced when reading or editing a label.
327 Comments are delimited by
330 As when writing a new label, any existing bootstrap code will be
333 is specified and will be unaffected otherwise.
334 See the boot options below for a
335 method of restoring the label and writing the bootstrap at the same time.
338 is used, no data will be written to the device, and instead the
339 disklabel that would have been written will be printed to stdout.
341 useful to see how a partitioning scheme will work out for a specific disk.
342 .Ss Enabling and disabling writing to the disk label area
343 By default, it is not possible to write to the disk label area at the beginning
345 The disk driver arranges for
347 and similar system calls
350 on any attempt to do so.
352 to write to this area (for example, to obliterate the label), use the form
358 To disallow writing to the label area after previously allowing it, use the
364 .Ss Installing bootstraps
365 The final three forms of
367 are used to install bootstrap code.
368 If you are creating a
369 .Dq dangerously-dedicated
370 slice for compatibility with older PC systems,
371 you generally want to specify the compatibility slice, such as
373 If you are creating a label within an existing DOS slice,
375 the slice name such as
377 Making a slice bootable can be tricky.
378 If you are using a normal DOS
379 slice you typically install (or leave) a standard MBR on the base disk and
382 bootblocks in the slice.
393 This form installs the bootstrap only.
394 It does not change the disk label.
395 You should never use this command on the compatibility slice unless you
397 .Dq dangerously-dedicated
400 This command is typically run on a
413 .Ar disk Ar disktype Ns / Ns Cm auto
416 This form corresponds to the
418 command described above.
419 In addition to writing a new volume label, it also installs the bootstrap.
420 If run on the compatibility slice this command will create a
421 .Dq dangerously-dedicated
423 This command is normally run on a
425 slice rather than the compatibility
429 is used, no data will be written to the device, and instead the
430 disklabel that would have been written will be printed to stdout.
440 .Ar disk Ar protofile
441 .Oo Ar disktype Ns / Ns Cm auto Oc
443 This form corresponds to the
445 command described above.
446 In addition to restoring the volume label, it also installs the bootstrap.
447 If run on the compatibility slice this command will create a
448 .Dq dangerously-dedicated
450 This command is normally run on a
452 slice rather than the compatibility
455 The bootstrap commands always access the disk directly, so it is not necessary
461 is used, no data will be written to the device, and instead the
462 disklabel that would have been written will be printed to stdout.
464 The bootstrap code is comprised of two boot programs.
465 Specify the name of the
466 boot programs to be installed in one of these ways:
469 Specify the names explicitly with the
475 indicates the primary boot program and
477 the secondary boot program.
478 The boot programs are located in
485 flags are not specified, but
487 was specified, the names of the programs are taken from the
493 entry for the disk if the disktab entry exists and includes those parameters.
495 Otherwise, the default boot image names are used:
499 for the standard stage1 and stage2 boot images.
501 .Ss Initializing/Formatting a bootable disk from scratch
502 To initialize a disk from scratch the following sequence is recommended.
503 Please note that this will wipe everything that was previously on the disk,
511 to initialize the hard disk, and create a slice table, referred to
513 .Dq "partition table"
519 to define partitions on
521 slices created in the previous step.
525 to create file systems on new partitions.
528 A typical partitioning scheme would be to have an
531 of approximately 512MB to hold the root file system, a
534 swap (usually 4GB), a
547 (usually around 4GB),
552 (usually all remaining space).
553 Your mileage may vary.
555 .Nm fdisk Fl BI Pa da0
567 no longer snoop-adjusts the on-disk label when reading or writing
570 is now responsible for adjusting the label when operating in raw mode.
573 disklabels store offsets as absolute block numbers
574 rather than slice-relative block numbers.
577 is unable to issue the
579 ioctl to get slice information it will
580 refuse to read or write the label in raw mode.
583 option may be used to force the operation by supplying a manual offset.
585 .Bl -tag -width ".Pa /etc/disktab" -compact
587 Default stage1 boot image.
589 Default stage2 boot image.
591 Disk description file.
593 .Sh SAVED FILE FORMAT
599 version of the label when examining, editing, or restoring a disk
602 .Bd -literal -offset 4n
611 sectors/cylinder: 1512
613 sectors/unit: 243581184
618 headswitch: 0 # milliseconds
619 track-to-track seek: 0 # milliseconds
624 a: 1048560 16 4.2BSD # 511.992MB
625 b: 8388608 1048576 swap # 4096.000MB
626 c: 243581184 0 unused # 118936.125MB
627 d: 4194304 9437184 4.2BSD # 2048.000MB
628 e: 4194304 13631488 4.2BSD # 2048.000MB
629 f: 8388608 17825792 4.2BSD # 4096.000MB
630 h: 196395264 26214400 HAMMER # 95896.125MB
631 i: 10485760 222609664 ccd # 5120.000MB
632 j: 10485760 233095424 vinum # 5120.000MB
635 Lines starting with a
638 Most of the other specifications are no longer used.
639 The ones which must still be set correctly are:
642 is an optional label, set by the
644 option when writing a label.
651 is set for removable media drives, but no current
653 driver evaluates this
656 is no longer supported;
658 specifies that the drive can perform bad sector remapping.
660 describes the total size of the disk.
661 This value must be correct.
662 .It Ar "the partition table"
665 partition table, not the
667 partition table described in
671 The partition table can have up to 16 entries.
672 It contains the following information:
673 .Bl -tag -width indent
675 The partition identifier is a single letter in the range
679 By convention, partition
681 is reserved to describe the entire disk.
683 The size of the partition in sectors,
687 (megabytes - 1024*1024),
689 (gigabytes - 1024*1024*1024),
691 (percentage of free space
693 removing any fixed-size partitions other than partition
697 (all remaining free space
699 fixed-size and percentage partitions).
704 indicates the entire disk.
705 Lowercase versions of
710 Size and type should be specified without any spaces between them.
712 Example: 2097152, 1G, 1024M and 1048576K are all the same size
713 (assuming 512-byte sectors).
715 The offset of the start of the partition from the beginning of the
720 calculate the correct offset to use (the end of the previous partition plus
721 one, ignoring partition
726 will be interpreted as an offset of 0.
728 Describes the purpose of the partition.
729 The example shows all currently used partition types.
732 file systems, use type
736 file systems, use type
742 For Vinum drives, use type
744 Other common types are
748 By convention, partition
750 represents the entire slice and should be of type
754 does not enforce this convention.
758 also knows about a number of other partition types,
759 none of which are in current use.
767 The remainder of the line is a comment and shows the size of the partition
770 .Dl "disklabel da0s1"
772 Display the in-core label for the first slice of the
774 disk, as obtained via
777 .Dq dangerously-dedicated ,
778 the compatibility slice name should be specified, such as
781 .Dl "disklabel da0s1 > savedlabel"
783 Save the in-core label for
787 This file can be used with the
789 option to restore the label at a later date.
791 .Dl "disklabel -w -r /dev/da0s1 da2212 foo"
795 based on information for
799 Any existing bootstrap code will be clobbered
800 and the disk rendered unbootable.
802 .Dl "disklabel -e -r da0s1"
804 Read the on-disk label for
806 edit it, and reinstall in-core as well as on-disk.
807 Existing bootstrap code is unaffected.
809 .Dl "disklabel -e -r -n da0s1"
811 Read the on-disk label for
813 edit it, and display what the new label would be (in sectors).
816 install the new label either in-core or on-disk.
818 .Dl "disklabel -r -w da0s1 auto"
820 Try to auto-detect the required information from
822 and write a new label to the disk.
826 partitioning and file system information.
828 .Dl "disklabel -R da0s1 savedlabel"
830 Restore the on-disk and in-core label for
834 Existing bootstrap code is unaffected.
836 .Dl "disklabel -R -n da0s1 label_layout"
838 Display what the label would be for
840 using the partition layout in
842 This is useful for determining how much space would be allotted for various
843 partitions with a labelling scheme using
849 .Dl disklabel -B da0s1
851 Install a new bootstrap on
853 The boot code comes from
857 On-disk and in-core labels are unchanged.
859 .Dl disklabel -w -B /dev/da0s1 -b newboot1 -s newboot2 da2212
861 Install a new label and bootstrap.
862 The label is derived from disktab information for
864 and installed both in-core and on-disk.
865 The bootstrap code comes from the files
870 .Dl dd if=/dev/zero of=/dev/da0 bs=512 count=32
872 .Dl dd if=/dev/zero of=/dev/da0s1 bs=512 count=32
873 .Dl disklabel -w -B da0s1 auto
874 .Dl disklabel -e da0s1
876 Completely wipe any prior information on the disk, creating a new bootable
877 disk with a DOS partition table containing one
881 initialize the slice, then edit it to your needs.
884 commands are optional, but may be necessary for some BIOSes to properly
887 .Dl disklabel -W da0s1
888 .Dl dd if=/dev/zero of=/dev/da0s1 bs=512 count=32
889 .Dl disklabel64 -r -w da0s1 auto
890 .Dl disklabel64 -N da0s1
892 Completely wipe any prior information on the slice,
893 changing label format to 64 bit.
894 The wiping is needed as
899 won't do any operations if label with other format is already installed.
901 This is an example disklabel that uses some of the new partition size types
906 which could be used as a source file for
908 .Dl disklabel -R ad0s1 new_label_file
909 .Bd -literal -offset 4n
918 sectors/cylinder: 1008
920 sectors/unit: 40959009
925 headswitch: 0 # milliseconds
926 track-to-track seek: 0 # milliseconds
939 The kernel device drivers will not allow the size of a disk partition
940 to be decreased or the offset of a partition to be changed while it is open.
941 Some device drivers create a label containing only a single large partition
942 if a disk is unlabeled; thus, the label must be written to the
944 partition of the disk while it is open.
945 This sometimes requires the desired
946 label to be set in two steps, the first one creating at least one other
947 partition, and the second setting the label on the new partition while
952 On some machines the bootstrap code may not fit entirely in the area
953 allocated for it by some file systems.
954 As a result, it may not be possible to have file systems on some partitions
958 When installing bootstrap code,
960 checks for these cases.
961 If the installed boot code would overlap a partition of type
967 utility will disallow creation of file systems on
970 Conversely, if a partition has a type other than
975 will not install bootstrap code that overlaps it.
979 storing sector numbers in 32 bit format
981 is restricted to 2TB, using the prevalent sector size of 512B.
983 labels should be used to partition larger disks.
987 use slightly different versions of
990 and are not generally compatible.
993 kernel can often use labels from other
995 for read-only operation.
1007 For the i386 architecture, the primary bootstrap sector contains
1013 utility takes care to not clobber it when installing a bootstrap only
1015 or when editing an existing label
1017 but it unconditionally writes the primary bootstrap program onto
1024 table by the dummy one in the bootstrap program.
1026 concern if the disk is fully dedicated, so that the
1029 starts at absolute block 0 on the disk.
1034 does not perform all possible error checking.
1038 overlap; if an absolute offset does not match the expected offset; if the
1040 partition does not start at 0 or does not cover the entire slice; if a
1041 partition runs past the end of the device; and a number of other errors; but
1042 no warning is given if space remains unused.