Added dates for 4.0 release
[ikiwiki.git] / docs / newhandbook / Booting / index.mdwn
index 114b668..0e39183 100644 (file)
@@ -1,90 +1,52 @@
 # The DragonFly Booting Process 
-
-
-
+[[!toc  levels=3]]
 
 ## Synopsis 
 
-
-
 The process of starting a computer and loading the operating system is referred to as ***the bootstrap process***, or simply ***booting***. DragonFly's boot process provides a great deal of flexibility in customizing what happens when you start the system, allowing you to select from different operating systems installed on the same computer, or even different versions of the same operating system or installed kernel.
 
-
-
 This chapter details the configuration options you can set and how to customize the DragonFly boot process. This includes everything that happens until the DragonFly kernel has started, probed for devices, and started [init(8)](http://leaf.dragonflybsd.org/cgi/web-man?command#init&section8). If you are not quite sure when this happens, it occurs when the text color changes from bright white to grey.
 
-
-
 After reading this chapter, you will know:
 
-
-
 * What the components of the DragonFly bootstrap system are, and how they interact.
 
 * The options you can give to the components in the DragonFly bootstrap to control the boot process.
 
 * The basics of [device.hints(5)](http://leaf.dragonflybsd.org/cgi/web-man?command#device.hints&section5&manpath=FreeBSD+5.2-current).
 
-
  **x86 Only:** This chapter only describes the boot process for DragonFly running on x86 systems.
 
-
-
-
-
-
-
 ## The Booting Problem 
 
-
 Turning on a computer and starting the operating system poses an interesting dilemma. By definition, the computer does not know how to do anything until the operating system is started. This includes running programs from the disk. So if the computer can not run a program from the disk without the operating system, and the operating system programs are on the disk, how is the operating system started?
 
-
 This problem parallels one in the book ***The Adventures of Baron Munchausen***. A character had fallen part way down a manhole, and pulled himself out by grabbing his bootstraps, and lifting. In the early days of computing the term ***bootstrap*** was applied to the mechanism used to load the operating system, which has become shortened to ***booting***.
 
-
 On x86 hardware the Basic Input/Output System (BIOS) is responsible for loading the operating system. To do this, the BIOS looks on the hard disk for the Master Boot Record (MBR), which must be located on a specific place on the disk. The BIOS has enough knowledge to load and run the MBR, and assumes that the MBR can then carry out the rest of the tasks involved in loading the operating system possibly with the help of the BIOS.
 
-
 The code within the MBR is usually referred to as a ***boot manager***, especially when it interacts with the user. In this case the boot manager usually has more code in the first ***track*** of the disk or within some OS's file system. (A boot manager is sometimes also called a ***boot loader***, but FreeBSD uses that term for a later stage of booting.) Popular boot managers include  **boot0**  (a.k.a.  **Boot Easy** , the standard DragonFly boot manager),  **Grub** ,  **GAG** , and  **LILO** . (Only  **boot0**  fits within the MBR.)
 
-
 If you have only one operating system installed on your disks then a standard PC MBR will suffice. This MBR searches for the first bootable (a.k.a. active) slice on the disk, and then runs the code on that slice to load the remainder of the operating system. The MBR installed by [fdisk(8)](http://leaf.dragonflybsd.org/cgi/web-man?command=fdisk&section=8), by default, is such an MBR. It is based on `/boot/mbr`.
 
-
 If you have installed multiple operating systems on your disks then you can install a different boot manager, one that can display a list of different operating systems, and allows you to choose the one to boot from. Two of these are discussed in the next subsection.
 
-
 The remainder of the DragonFly bootstrap system is divided into three stages. The first stage is run by the MBR, which knows just enough to get the computer into a specific state and run the second stage. The second stage can do a little bit more, before running the third stage. The third stage finishes the task of loading the operating system. The work is split into these three stages because the PC standards put limits on the size of the programs that can be run at stages one and two. Chaining the tasks together allows DragonFly to provide a more flexible loader.
 
-
 The kernel is then started and it begins to probe for devices and initialize them for use. Once the kernel boot process is finished, the kernel passes control to the user process [init(8)](http://leaf.dragonflybsd.org/cgi/web-man?command=init&section=8), which then makes sure the disks are in a usable state. [init(8)](http://leaf.dragonflybsd.org/cgi/web-man?command=init&section=8) then starts the user-level resource configuration which mounts file systems, sets up network cards to communicate on the network, and generally starts all the processes that usually are run on a DragonFly system at startup.
 
-
 ----
 
-
-
 ## The Boot Manager and Boot Stages 
 
-
-
 ### The Boot Manager 
 
-
-
 The code in the MBR or boot manager is sometimes referred to as ***stage zero*** of the boot process. This subsection discusses two of the boot managers previously mentioned:  **boot0**  and  **LILO** .
 
-
-
  **The** boot0 ** Boot Manager:** The MBR installed by FreeBSD's installer or [boot0cfg(8)](http://leaf.dragonflybsd.org/cgi/web-man?command=boot0cfg&section=8), by default, is based on `/boot/boot0`. (The  **boot0**  program is very simple, since the program in the MBR can only be 446 bytes long because of the slice table and `0x55AA` identifier at the end of the MBR.) If you have installed  **boot0**  and multiple operating systems on your hard disks, then you will see a display similar to this one at boot time:
 
-
-
  **Example 7-1. `boot0` Screenshot** 
 
-
-
     
 
     F1 DOS
@@ -101,30 +63,16 @@ The code in the MBR or boot manager is sometimes referred to as ***stage zero***
 
     Default: F2
 
-
-
-
-
 Other operating systems, in particular Windows┬«, have been known to overwrite an existing MBR with their own. If this happens to you, or you want to replace your existing MBR with the DragonFly MBR then use the following command:
 
-
-
     
 
     # fdisk -B -b /boot/boot0 device
 
-
-
-
-
 where `***device***` is the device that you boot from, such as `ad0` for the first IDE disk, `ad2` for the first IDE disk on a second IDE controller, `da0` for the first SCSI disk, and so on. Or, if you want a custom configuration of the MBR, use [boot0cfg(8)](http://leaf.dragonflybsd.org/cgi/web-man?command=boot0cfg&section=8).
 
-
-
  **The LILO Boot Manager:** To install this boot manager so it will also boot DragonFly, first start Linux and add the following to your existing `/etc/lilo.conf` configuration file:
 
-
-
     
 
     other=/dev/hdXY
@@ -135,46 +83,24 @@ where `***device***` is the device that you boot from, such as `ad0` for the fir
 
     label=DragonFly
 
-
-
-
-
-In the above, specify DragonFly's primary partition and drive using Linux specifiers, replacing `***X***` with the Linux drive letter and `***Y***` with the Linux primary partition number. If you are using a SCSI drive, you will need to change `***/dev/hd***` to read something similar to `***/dev/sd***`. The `loader=/boot/chain.b` line can be omitted if you have both operating systems on the same drive. Now run `/sbin/lilo┬á-v` to commit your new changes to the system; this should be verified by checking its screen messages.
-
-
+In the above, specify DragonFly's primary partition and drive using Linux specifiers, replacing `***X***` with the Linux drive letter and `***Y***` with the Linux primary partition number. If you are using a SCSI drive, you will need to change `***/dev/hd***` to read something similar to `***/dev/sd***`. The `loader=/boot/chain.b` line can be omitted if you have both operating systems on the same drive. Now run `/sbin/lilo -v` to commit your new changes to the system; this should be verified by checking its screen messages.
 
 ### Stage One, /boot/boot1, and Stage Two, /boot/boot2 
 
-
-
 Conceptually the first and second stages are part of the same program, on the same area of the disk. Because of space constraints they have been split into two, but you would always install them together. They are copied from the combined file `/boot/boot` by the installer or  **disklabel**  (see below).
 
-
-
 They are located outside file systems, in the first track of the boot slice, starting with the first sector. This is where [ boot0](boot-blocks.html#BOOT-BOOT0), or any other boot manager, expects to find a program to run which will continue the boot process. The number of sectors used is easily determined from the size of `/boot/boot`.
 
-
-
 They are found on the boot sector of the boot slice, which is where [ boot0](boot-blocks.html#BOOT-BOOT0), or any other program on the MBR expects to find the program to run to continue the boot process. The files in the `/boot` directory are copies of the real files, which are stored outside of the DragonFly file system.
 
-
-
 `boot1` is very simple, since it can only be 512 bytes in size, and knows just enough about the DragonFly ***disklabel***, which stores information about the slice, to find and execute `boot2`.
 
-
-
 `boot2` is slightly more sophisticated, and understands the DragonFly file system enough to find files on it, and can provide a simple interface to choose the kernel or loader to run.
 
-
-
 Since the [ loader](boot-blocks.html#BOOT-LOADER) is much more sophisticated, and provides a nice easy-to-use boot configuration, `boot2` usually runs it, but previously it was tasked to run the kernel directly.
 
-
-
  **Example 7-2. boot2 Screenshot** 
 
-
-
     
 
     >> DragonFly/i386 BOOT
@@ -183,62 +109,32 @@ Since the [ loader](boot-blocks.html#BOOT-LOADER) is much more sophisticated, an
 
     boot:
 
-
-
-
-
 If you ever need to replace the installed `boot1` and `boot2` use [disklabel(8)](http://leaf.dragonflybsd.org/cgi/web-man?command=disklabel&section=8):
 
-
-
     
 
     # disklabel -B diskslice
 
-
-
-
-
 where `***diskslice***` is the disk and slice you boot from, such as `ad0s1` for the first slice on the first IDE disk.
 
-
-
 ### Stage Three, `/boot/loader` 
 
-
-
 The loader is the final stage of the three-stage bootstrap, and is located on the file system, usually as `/boot/loader`.
 
-
-
 The loader is intended as a user-friendly method for configuration, using an easy-to-use built-in command set, backed up by a more powerful interpreter, with a more complex command set.
 
-
-
 #### Loader Program Flow 
 
-
-
 During initialization, the loader will probe for a console and for disks, and figure out what disk it is booting from. It will set variables accordingly, and an interpreter is started where user commands can be passed from a script or interactively.
 
-
-
 The loader will then read `/boot/loader.rc`, which by default reads in `/boot/defaults/loader.conf` which sets reasonable defaults for variables and reads `/boot/loader.conf` for local changes to those variables. `loader.rc` then acts on these variables, loading whichever modules and kernel are selected.
 
-
-
 Finally, by default, the loader issues a 10 second wait for key presses, and boots the kernel if it is not interrupted. If interrupted, the user is presented with a prompt which understands the easy-to-use command set, where the user may adjust variables, unload all modules, load modules, and then finally boot or reboot.
 
-
-
 #### Loader Built-In Commands 
 
-
-
 These are the most commonly used loader commands. For a complete discussion of all available commands, please see [loader(8)](http://leaf.dragonflybsd.org/cgi/web-man?command=loader&section=8).
 
-
-
 * autoboot `***seconds***`: Proceeds to boot the kernel if not interrupted within the time span given, in seconds. It displays a countdown, and the default time span is 10 seconds.
 
 * boot [`***-options***`] [`***kernelname***`]: Immediately proceeds to boot the kernel, with the given options, if any, and with the kernel name given, if it is.
@@ -265,17 +161,10 @@ These are the most commonly used loader commands. For a complete discussion of a
 
 * unload: Removes all loaded modules.
 
-
-
 #### Loader Examples 
 
-
-
 Here are some practical examples of loader usage:
 
-
-
-
 * To simply boot your usual kernel, but in single-user mode:
 
       
@@ -284,7 +173,6 @@ Here are some practical examples of loader usage:
 
   
 
-
 * To unload your usual kernel and modules, and then load just your old (or another) kernel:
 
       
@@ -309,7 +197,6 @@ Here are some practical examples of loader usage:
 
   
 
-
 * To load a kernel configuration script (an automated script which does the things you would normally do in the kernel boot-time configurator):
 
       
@@ -318,82 +205,38 @@ Here are some practical examples of loader usage:
 
   
 
-
-
 ----
 
-
-
-
-
 ## Kernel Interaction During Boot 
 
-
-
 Once the kernel is loaded by either [ loader](boot-blocks.html#BOOT-LOADER) (as usual) or [ boot2](boot-blocks.html#BOOT-BOOT1) (bypassing the loader), it examines its boot flags, if any, and adjusts its behavior as necessary.
 
-
-
 ### Kernel Boot Flags 
 
-
-
 Here are the more common boot flags:
 
-
-
 `-a`:: during kernel initialization, ask for the device to mount as the root file system.`-C`:: boot from CDROM.`-c`:: run UserConfig, the boot-time kernel configurator`-s`:: boot into single-user mode`-v`:: be more verbose during kernel startup
 
-
-
  **Note:** There are other boot flags; read [boot(8)](http://leaf.dragonflybsd.org/cgi/web-man?command=boot&section=8) for more information on them.
 
-
-
-
-
-
-
-
-
-
-
 ## Init: Process Control Initialization 
 
-
-
 Once the kernel has finished booting, it passes control to the user process [init(8)](http://leaf.dragonflybsd.org/cgi/web-man?command=init&section=8), which is located at `/sbin/init`, or the program path specified in the `init_path` variable in `loader`.
 
-
-
 ### Automatic Reboot Sequence 
 
-
-
 The automatic reboot sequence makes sure that the file systems available on the system are consistent. If they are not, and [fsck(8)](http://leaf.dragonflybsd.org/cgi/web-man?command=fsck&section=8) cannot fix the inconsistencies, [init(8)](http://leaf.dragonflybsd.org/cgi/web-man?command=init&section=8) drops the system into [single-user mode](boot-init.html#BOOT-SINGLEUSER) for the system administrator to take care of the problems directly.
 
-
-
 ### Single-User Mode 
 
-
-
 This mode can be reached through the [automatic reboot sequence](boot-init.html#BOOT-AUTOREBOOT), or by the user booting with the `-s` option or setting the `boot_single` variable in `loader`.
 
-
-
 It can also be reached by calling [shutdown(8)](http://leaf.dragonflybsd.org/cgi/web-man?command=shutdown&section=8) without the reboot (`-r`) or halt (`-h`) options, from [multi-user mode](boot-init.html#BOOT-MULTIUSER).
 
-
-
 If the system `console` is set to `insecure` in `/etc/ttys`, then the system prompts for the `root` password before initiating single-user mode.
 
-
-
 ***'Example 7-3. An Insecure Console in `/etc/ttys`***'
 
-
-
     
 
     # name  getty                           type    status          comments
@@ -406,51 +249,25 @@ If the system `console` is set to `insecure` in `/etc/ttys`, then the system pro
 
     console none                            unknown off insecure
 
-
-
-
-
  **Note:** An `insecure` console means that you consider your physical security to the console to be insecure, and want to make sure only someone who knows the `root` password may use single-user mode, and it does not mean that you want to run your console insecurely. Thus, if you want security, choose `insecure`, not `secure`.
 
-
-
 ### Multi-User Mode 
 
-
-
 If [init(8)](http://leaf.dragonflybsd.org/cgi/web-man?command=init&section=8) finds your file systems to be in order, or once the user has finished in [single-user mode](boot-init.html#BOOT-SINGLEUSER), the system enters multi-user mode, in which it starts the resource configuration of the system.
 
-
-
 #### Resource Configuration (rc) 
 
-
-
 The resource configuration system reads in configuration defaults from `/etc/defaults/rc.conf`, and system-specific details from `/etc/rc.conf`, and then proceeds to mount the system file systems mentioned in `/etc/fstab`, start up networking services, start up miscellaneous system daemons, and finally runs the startup scripts of locally installed packages.
 
-
-
 The [rc(8)](http://leaf.dragonflybsd.org/cgi/web-man?command=rc&section=8) manual page is a good reference to the resource configuration system, as is examining the scripts themselves.
 
-
-
 ## Shutdown Sequence 
 
-
-
 Upon controlled shutdown, via [shutdown(8)](http://leaf.dragonflybsd.org/cgi/web-man?command=shutdown&section=8), [init(8)](http://leaf.dragonflybsd.org/cgi/web-man?command=init&section=8) will attempt to run the script `/etc/rc.shutdown`, and then proceed to send all processes the `TERM` signal, and subsequently the `KILL` signal to any that do not terminate timely.
 
-
-
 To power down a DragonFly machine on architectures and systems that support power management, simply use the command `shutdown -p now` to turn the power off immediately. To just reboot a DragonFly system, just use `shutdown -r now`. You need to be `root` or a member of `operator` group to run [shutdown(8)](http://leaf.dragonflybsd.org/cgi/web-man?command=shutdown&section=8). The [halt(8)](http://leaf.dragonflybsd.org/cgi/web-man?command=halt&section=8) and [reboot(8)](http://leaf.dragonflybsd.org/cgi/web-man?command=reboot&section=8) commands can also be used, please refer to their manual pages and to [shutdown(8)](http://leaf.dragonflybsd.org/cgi/web-man?command=shutdown&section=8)'s one for more information.
 
-
-
  **Note:** Power management requires [acpi(4)](http://leaf.dragonflybsd.org/cgi/web-man?command=acpi&section=4) support in the kernel or loaded as a module, or [apm(4)](http://leaf.dragonflybsd.org/cgi/web-man?command=apm&section=4) support.
 
-
-
 <!-- this section needs the info about sernos and vfs.mountrootfrom or whatever it's called -->
 
-
-