xref: /freebsd/sbin/fdisk/fdisk.8 (revision 68e7a217f8019b955f87547f218e95ab237597af)
1.\" $FreeBSD$
2.\"
3.Dd October 4, 1996
4.Dt FDISK 8
5.Os
6.Sh NAME
7.Nm fdisk
8.Nd PC slice table maintenance program
9.Sh SYNOPSIS
10.Nm
11.Op Fl BIaistu
12.Op Fl b Ar bootcode
13.Op Fl 1234
14.Op Ar disk
15.Bl -tag -width time
16.Nm
17.Fl f Ar configfile
18.Op Fl itv
19.Op Ar disk
20.Sh PROLOGUE
21In order for the BIOS to boot the kernel,
22certain conventions must be adhered to.
23Sector 0 of the disk must contain boot code,
24a slice table,
25and a magic number.
26BIOS slices can be used to break the disk up into several pieces.
27The BIOS brings in sector 0 and verifies the magic number.  The sector
280 boot code then searches the slice table to determine which
29slice is marked
30.Em active .
31This boot code then brings in the bootstrap from the
32.Em active
33slice and, if marked bootable, runs it.
34Under DOS,
35you can have one or more slices with one
36.Em active .
37The DOS
38.Nm
39program can be used to divide space on the disk into slices and set one
40.Em active .
41.Sh DESCRIPTION
42The
43.Fx
44program,
45.Nm ,
46serves a similar purpose to the DOS program.  The first form is used to
47display slice information or to interactively edit the slice
48table.  The second is used to write a slice table using a
49.Ar configfile
50and is designed to be used by other scripts/programs.
51.Pp
52Options are:
53.It Fl a
54Change the active slice only.  Ignored if
55.Fl f
56is given.
57.It Fl b Ar bootcode
58Get the boot code from the file
59.Ar bootcode .
60Default is
61.Pa /boot/mbr .
62.It Fl B
63Reinitialize the boot code contained in sector 0 of the disk.  Ignored
64if
65.Fl f
66is given.
67.It Fl f Ar configfile
68Set slice values using the file
69.Ar configfile .
70The
71.Ar configfile
72always modifies existing slices, unless
73.Fl i
74is also given, in which case all existing slices are deleted (marked
75as "unused") before the
76.Ar configfile
77is read.  The
78.Ar configfile
79can be "-", in which case
80.Ar stdin
81is read.  See
82.Sx CONFIGURATION FILE ,
83below, for file syntax.
84.Pp
85.Em WARNING :
86when
87.Fl f
88is used, you are not asked if you really want to write the slices
89table (as you are in the interactive mode).  Use with caution!
90.It Fl i
91Initialize sector 0 of the disk.  This implies
92.Fl u ,
93unless
94.Fl f
95is given.
96.It Fl I
97Initialize the contents of sector 0
98for one
99.Fx
100slice covering the entire disk.
101.It Fl s
102Print summary information and exit.
103.It Fl t
104Test mode; do not write slice values.  Generally used with the
105.Fl f
106option to see what would be written to the slice table.  Implies
107.Fl v .
108.It Fl u
109Is used for updating (editing) sector 0 of the disk.  Ignored if
110.Fl f
111is given.
112.It Fl v
113Be verbose.  When
114.Fl f
115is used,
116.Nm
117prints out the slice table that is written to the disk.
118.It Fl 1234
119Operate on a single fdisk entry only.  Ignored if
120.Fl f
121is given.
122.El
123.Pp
124The final disk name can be provided as a
125.Sq bare
126disk name only, e.g.\&
127.Ql da0 ,
128or as a full pathname.
129If omitted,
130.Nm
131tries to figure out the default disk device name from the
132mounted root device.
133.Pp
134When called with no arguments, it prints the sector 0 partition table.
135An example follows:
136.Bd -literal
137	******* Working on device /dev/ad0 *******
138	parameters extracted from in-core disklabel are:
139	cylinders=769 heads=15 sectors/track=33 (495 blks/cyl)
140
141	parameters to be used for BIOS calculations are:
142	cylinders=769 heads=15 sectors/track=33 (495 blks/cyl)
143
144	Warning: BIOS sector numbering starts with sector 1
145	Information from DOS bootblock is:
146	The data for partition 1 is:
147	sysid 165,(FreeBSD/NetBSD/386BSD)
148    	    start 495, size 380160 (185 Meg), flag 0
149		beg: cyl 1/ sector 1/ head 0;
150		end: cyl 768/ sector 33/ head 14
151	The data for partition 2 is:
152	sysid 164,(unknown)
153    	    start 378180, size 2475 (1 Meg), flag 0
154		beg: cyl 764/ sector 1/ head 0;
155		end: cyl 768/ sector 33/ head 14
156	The data for partition 3 is:
157	<UNUSED>
158	The data for partition 4 is:
159	sysid 99,(ISC UNIX, other System V/386, GNU HURD or Mach)
160    	    start 380656, size 224234 (109 Meg), flag 80
161		beg: cyl 769/ sector 2/ head 0;
162		end: cyl 197/ sector 33/ head 14
163.Ed
164.Pp
165The disk is divided into three slices that happen to fill the disk.
166The second slice overlaps the end of the first.
167(Used for debugging purposes.)
168.Bl -tag -width "cyl, sector and head"
169.It Em "sysid"
170is used to label the slice.
171.Fx
172reserves the
173magic number 165 decimal (A5 in hex).
174.It Em start No and Em size
175fields provide the start address
176and size of a slice in sectors.
177.It Em "flag 80"
178specifies that this is the active slice.
179.It Em cyl , sector No and Em head
180fields are used to specify the beginning and end addresses of the slice.
181.It Em Note :
182these numbers are calculated using BIOS's understanding of the disk geometry
183and saved in the bootblock.
184.El
185.Pp
186The
187.Fl i
188and
189.Fl u
190flags are used to indicate that the slice data is to be updated.
191Unless the
192.Fl f
193option is also given,
194.Nm
195will enter a conversational mode.
196In this mode, no changes will be written to disk unless you explicitly tell
197.Nm
198to.
199.Pp
200.Nm Fdisk
201will display each slice and ask whether you want to edit it.
202If you say yes,
203.Nm
204will step through each field, show you the old value,
205and ask you for a new one.
206When you are done with the slice,
207.Nm
208will display it and ask you whether it is correct.
209.Nm Fdisk
210will then proceed to the next entry.
211.Pp
212Getting the
213.Em cyl , sector ,
214and
215.Em head
216fields correct is tricky, so by default,
217they will be calculated for you;
218you can specify them if you choose to though.
219.Pp
220After all the slices are processed,
221you are given the option to change the
222.Em active
223slice.
224Finally, when all the new data for sector 0 has been accumulated,
225you are asked to confirm whether you really want to rewrite it.
226.Pp
227The difference between the
228.Fl u
229and
230.Fl i
231flags is that
232the
233.Fl u
234flag just edits (updates) the fields as they appear on the disk,
235while the
236.Fl i
237flag is used to "initialize" sector 0;
238it will set up the last BIOS slice to use the whole disk for
239.Fx
240and make it active.
241.Sh NOTES
242The automatic calculation of starting cylinder etc. uses
243a set of figures that represent what the BIOS thinks the
244geometry of the drive is.
245These figures are taken from the in-core disklabel by default,
246but
247.Nm
248initially gives you an opportunity to change them.
249This allows you to create a bootblock that can work with drives
250that use geometry translation under the BIOS.
251.Pp
252If you hand craft your disk layout,
253please make sure that the
254.Fx
255slice starts on a cylinder boundary.
256A number of decisions made later may assume this.
257(This might not be necessary later.)
258.Pp
259Editing an existing slice will most likely result in the loss of
260all data in that slice.
261.Pp
262You should run
263.Nm
264interactively once or twice to see how it works.
265This is completely safe as long as you answer the last question
266in the negative.  There are subtleties that
267.Nm
268detects that are not fully explained in this manual page.
269.Sh CONFIGURATION FILE
270When the
271.Fl f
272option is given, a disk's slice table can be written using values
273from a
274.Ar configfile .
275The syntax of this file is very simple;
276each line is either a comment or a specification, as follows:
277.Bl -tag -width Ds
278.It Xo
279.Ic #
280.Ar comment ...
281.Xc
282Lines beginning with a "#" are comments and are ignored.
283.It Xo
284.Ic g
285.Ar spec1
286.Ar spec2
287.Ar spec3
288.Xc
289Set the BIOS geometry used in slice calculations.  There must be
290three values specified, with a letter preceding each number:
291.Bl -tag -width Ds
292.Sm off
293.It Cm c Ar num
294.Sm on
295Set the number of cylinders to
296.Ar num .
297.Sm off
298.It Cm h Ar num
299.Sm on
300Set the number of heads to
301.Ar num .
302.Sm off
303.It Cm s Ar num
304.Sm on
305Set the number of sectors/track to
306.Ar num .
307.El
308.Pp
309These specs can occur in any order, as the leading letter determines
310which value is which; however, all three must be specified.
311.Pp
312This line must occur before any lines that specify slice
313information.
314.Pp
315It is an error if the following is not true:
316.Bd -literal -offset indent
3171 <= number of cylinders
3181 <= number of heads <= 256
3191 <= number of sectors/track < 64
320.Ed
321.Pp
322The number of cylinders should be less than or equal to 1024, but this
323is not enforced, although a warning will be printed.  Note that bootable
324.Fx
325slices (the "/" filesystem) must lie completely within the
326first 1024 cylinders; if this is not true, booting may fail.
327Non-bootable slices do not have this restriction.
328.Pp
329Example (all of these are equivalent), for a disk with 1019 cylinders,
33039 heads, and 63 sectors:
331.Bd -literal -offset indent
332g       c1019   h39     s63
333g       h39     c1019   s63
334g       s63     h39     c1019
335.Ed
336.It Xo
337.Ic p
338.Ar slice
339.Ar type
340.Ar start
341.Ar length
342.Xc
343Set the slice given by
344.Ar slice
345(1-4) to type
346.Ar type ,
347starting at sector
348.Ar start
349for
350.Ar length
351sectors.
352.Pp
353Only those slices explicitly mentioned by these lines are modified;
354any slice not referenced by a "p" line will not be modified.
355However, if an invalid slice table is present, or the
356.Fl i
357option is specified, all existing slice entries will be cleared
358(marked as unused), and these "p" lines will have to be used to
359explicitly set slice information.  If multiple slices need to be
360set, multiple "p" lines must be specified; one for each slice.
361.Pp
362These slice lines must occur after any geometry specification lines,
363if one is present.
364.Pp
365The
366.Ar type
367is 165 for
368.Fx
369slices.  Specifying a slice type of zero is
370the same as clearing the slice and marking it as unused; however,
371dummy values (such as "0") must still be specified for
372.Ar start
373and
374.Ar length .
375.Pp
376Note: the start offset will be rounded upwards to a head boundary if
377necessary, and the end offset will be rounded downwards to a cylinder
378boundary if necessary.
379.Pp
380Example: to clear slice 4 and mark it as unused:
381.Bd -literal -offset indent
382p       4       0       0       0
383.Ed
384.Pp
385Example: to set slice 1 to a
386.Fx
387slice, starting at sector 1
388for 2503871 sectors (note: these numbers will be rounded upwards and
389downwards to correspond to head and cylinder boundaries):
390.Pp
391.Bd -literal -offset indent
392p       1       165     1       2503871
393.Ed
394.Pp
395.It Xo
396.Ic a
397.Ar slice
398.Xc
399Make
400.Ar slice
401the active slice.  Can occur anywhere in the config file, but only
402one must be present.
403.Pp
404Example: to make slice 1 the active slice:
405.Bd -literal -offset indent
406a       1
407.Ed
408.El
409.Sh FILES
410.Bl -tag -width /boot/mbr -compact
411.It Pa /boot/mbr
412The default boot code
413.El
414.Sh SEE ALSO
415.Xr boot0cfg 8 ,
416.Xr disklabel 8 ,
417.Xr newfs 8
418.Sh BUGS
419The default boot code will not necessarily handle all slice types
420correctly, in particular those introduced since MS-DOS 6.x.
421.Pp
422The entire program should be made more user-friendly.
423.Pp
424Most users new to
425.Fx
426do not understand the difference between
427.Ar slice
428and
429.Ar partition
430causing difficulty to adjust.
431.Pp
432You cannot use this command to completely dedicate a disk to
433.Fx .
434The
435.Xr disklabel 8
436command must be used for this.
437