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