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 $
39 .Dd September 28, 2009
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 a 32 bit 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 label.
303 Existing bootstrap code is unchanged regardless of whether
308 is specified, no data will be written to the device, and instead the
309 disklabel that would have been written will be printed to stdout.
311 useful to see how a partitioning scheme will work out for a specific disk.
312 .Ss Restoring a disk label from a file
313 To restore a disk label from a file, use the form
319 .Ar disk Ar protofile
322 is capable of restoring a disk label that was previously saved in a file
324 The prototype file used to create the label should be in the same format
325 as that produced when reading or editing a label.
326 Comments are delimited by
329 As when writing a new label, any existing bootstrap code will be
332 is specified and will be unaffected otherwise.
333 See the boot options below for a
334 method of restoring the label and writing the bootstrap at the same time.
337 is used, no data will be written to the device, and instead the
338 disklabel that would have been written will be printed to stdout.
340 useful to see how a partitioning scheme will work out for a specific disk.
341 .Ss Enabling and disabling writing to the disk label area
342 By default, it is not possible to write to the disk label area at the beginning
344 The disk driver arranges for
346 and similar system calls
349 on any attempt to do so.
351 to write to this area (for example, to obliterate the label), use the form
357 To disallow writing to the label area after previously allowing it,
363 .Ss Installing bootstraps
364 The final three forms of
366 are used to install bootstrap code, which allows boot from a
369 If you are creating a
370 .Dq dangerously-dedicated
371 slice for compatibility with older PC systems,
372 you generally want to specify the compatibility slice, such as
374 If you are creating a label within an existing DOS slice,
376 the slice name such as
378 Making a slice bootable can be tricky.
379 If you are using a normal DOS
380 slice you typically install (or leave) a standard MBR on the base disk and
383 bootblocks in the slice.
392 .Oo Ar disktype Ns / Ns Cm auto Oc
394 This form installs the bootstrap only.
395 It does not change the disk label.
396 You should never use this command on the compatibility slice unless you
398 .Dq dangerously-dedicated
401 This command is typically run on a
414 .Ar disk Ar disktype Ns / Ns Cm auto
417 This form corresponds to the
419 command described above.
420 In addition to writing a new volume label, it also installs the bootstrap.
421 If run on the compatibility slice this command will create a
422 .Dq dangerously-dedicated
424 This command is normally run on a
426 slice rather than the compatibility slice.
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,
456 so it is not necessary to specify the
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 normally 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,
513 to initialize the hard disk, and create a GPT or MBR slice table,
515 .Dq "partition table"
523 to define partitions on
525 slices created in the previous step.
531 to create file systems on new partitions.
534 A typical partitioning scheme would be to have an
537 of approximately 512MB to hold the root file system, a
540 swap (usually 4GB), a
552 (usually around 4GB),
557 (usually all remaining space).
558 If you are tight on space all sizes can be halved.
559 Your mileage may vary.
562 .Dl "disklabel -w -B da0s1 auto"
563 .Dl "disklabel -e da0s1"
566 no longer snoop-adjusts the on-disk label when reading or writing
569 is now responsible for adjusting the label when operating in raw mode.
572 disklabels store offsets as absolute block numbers
573 rather than slice-relative block numbers.
576 is unable to issue the
578 ioctl to get slice information it will
579 refuse to read or write the label in raw mode.
582 option may be used to force the operation by supplying a manual offset.
584 .Bl -tag -width ".Pa /etc/disktab" -compact
586 Default stage1 boot image.
588 Default stage2 boot image.
590 Disk description file.
592 .Sh SAVED FILE FORMAT
597 version of the label when examining, editing, or restoring a disk label.
599 .Bd -literal -offset 4n
608 sectors/cylinder: 1512
610 sectors/unit: 243581184
615 headswitch: 0 # milliseconds
616 track-to-track seek: 0 # milliseconds
621 a: 1048560 16 4.2BSD # 511.992MB
622 b: 8388608 1048576 swap # 4096.000MB
623 c: 243581184 0 unused # 118936.125MB
624 d: 4194304 9437184 4.2BSD # 2048.000MB
625 e: 4194304 13631488 4.2BSD # 2048.000MB
626 f: 8388608 17825792 4.2BSD # 4096.000MB
627 h: 196395264 26214400 HAMMER # 95896.125MB
628 i: 10485760 222609664 ccd # 5120.000MB
629 j: 10485760 233095424 vinum # 5120.000MB
632 Lines starting with a
635 Most of the other specifications are no longer used.
636 The ones which must still be set correctly are:
639 is an optional label, set by the
641 option when writing a label.
648 is set for removable media drives, but no current
650 driver evaluates this
653 is no longer supported;
655 specifies that the drive can perform bad sector remapping.
657 describes the total size of the disk.
658 This value must be correct.
659 .It Ar "the partition table"
662 partition table, not the
664 partition table described in
668 The partition table can have up to 16 entries.
669 It contains the following information:
670 .Bl -tag -width indent
672 The partition identifier is a single letter in the range
676 By convention, partition
678 is reserved to describe the entire disk.
680 The size of the partition in sectors,
684 (megabytes - 1024*1024),
686 (gigabytes - 1024*1024*1024),
688 (percentage of free space
690 removing any fixed-size partitions other than partition
694 (all remaining free space
696 fixed-size and percentage partitions).
701 indicates the entire disk.
702 Lowercase versions of
707 Size and type should be specified without any spaces between them.
709 Example: 2097152, 1G, 1024M and 1048576K are all the same size
710 (assuming 512-byte sectors).
712 The offset of the start of the partition from the beginning of the
717 calculate the correct offset to use (the end of the previous partition plus
718 one, ignoring partition
723 will be interpreted as an offset of 0.
725 Describes the purpose of the partition.
726 The example shows all currently used partition types.
729 file systems, use type
733 file systems, use type
739 For Vinum drives, use type
741 Other common types are
745 By convention, partition
747 represents the entire slice and should be of type
751 does not enforce this convention.
755 also knows about a number of other partition types,
756 none of which are in current use.
764 The remainder of the line is a comment and shows the size of
767 .Dl "disklabel da0s1"
769 Display the in-core label for the first slice of the
771 disk, as obtained via
774 .Dq dangerously-dedicated ,
775 the compatibility slice name should be specified, such as
778 .Dl "disklabel da0s1 > savedlabel"
780 Save the in-core label for
784 This file can be used with the
786 option to restore the label at a later date.
788 .Dl "disklabel -w -r /dev/da0s1 da2212 foo"
792 based on information for
796 Any existing bootstrap code will be clobbered
797 and the disk rendered unbootable.
799 .Dl "disklabel -e -r da0s1"
801 Read the on-disk label for
803 edit it, and reinstall in-core as well as on-disk.
804 Existing bootstrap code is unaffected.
806 .Dl "disklabel -e -r -n da0s1"
808 Read the on-disk label for
810 edit it, and display what the new label would be (in sectors).
813 install the new label either in-core or on-disk.
815 .Dl "disklabel -r -w da0s1 auto"
817 Try to auto-detect the required information from
819 and write a new label to the disk.
823 partitioning and file system information.
825 .Dl "disklabel -R da0s1 savedlabel"
827 Restore the on-disk and in-core label for
831 Existing bootstrap code is unaffected.
833 .Dl "disklabel -R -n da0s1 label_layout"
835 Display what the label would be for
837 using the partition layout in
839 This is useful for determining how much space would be allotted for various
840 partitions with a labelling scheme using
846 .Dl "disklabel -B da0s1"
848 Install a new bootstrap on
850 The boot code comes from
854 On-disk and in-core labels are unchanged.
856 .Dl "disklabel -w -B /dev/da0s1 -b newboot1 -s newboot2 da2212"
858 Install a new label and bootstrap.
859 The label is derived from disktab information for
861 and installed both in-core and on-disk.
862 The bootstrap code comes from the files
867 .Dl "dd if=/dev/zero of=/dev/da0 bs=512 count=32"
869 .Dl "dd if=/dev/zero of=/dev/da0s1 bs=512 count=32"
870 .Dl "disklabel -w -B da0s1 auto"
871 .Dl "disklabel -e da0s1"
873 Completely wipe any prior information on the disk, creating a new bootable
874 disk with a DOS partition table containing one
878 initialize the slice, then edit it to your needs.
881 commands are optional, but may be necessary for some BIOSes to properly
884 .Dl "disklabel -W da0s1"
885 .Dl "dd if=/dev/zero of=/dev/da0s1 bs=512 count=32"
886 .Dl "disklabel64 -r -w da0s1 auto"
887 .Dl "disklabel64 -N da0s1"
889 Completely wipe any prior information on the slice,
890 changing label format to 64 bit.
891 The wiping is needed as
896 won't do any operations if label with other format is already installed.
898 This is an example disklabel that uses some of the new partition size types
903 which could be used as a source file for
905 .Dl "disklabel -R ad0s1 new_label_file"
906 .Bd -literal -offset 4n
915 sectors/cylinder: 1008
917 sectors/unit: 40959009
922 headswitch: 0 # milliseconds
923 track-to-track seek: 0 # milliseconds
936 The kernel device drivers will not allow the size of a disk partition
937 to be decreased or the offset of a partition to be changed while it is open.
938 Some device drivers create a label containing only a single large partition
939 if a disk is unlabeled; thus, the label must be written to the
941 partition of the disk while it is open.
942 This sometimes requires the desired
943 label to be set in two steps, the first one creating at least one other
944 partition, and the second setting the label on the new partition while
949 On some machines the bootstrap code may not fit entirely in the area
950 allocated for it by some file systems.
951 As a result, it may not be possible to have file systems on some partitions
955 When installing bootstrap code,
957 checks for these cases.
958 If the installed boot code would overlap a partition of type
964 utility will disallow creation of file systems on
967 Conversely, if a partition has a type other than
972 will not install bootstrap code that overlaps it.
976 storing sector numbers in 32 bit format
978 is restricted to 2TB, using the prevalent sector size of 512B.
980 labels should be used to partition larger disks.
984 use slightly different versions of
987 and are not generally compatible.
990 kernel can often use labels from other
992 for read-only operation.
1004 .Xr newfs_hammer 8 ,
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.