I want to learn about LILO, lilo.conf, and, most importantly Dual-Booting...how do I do it?


Please Note commands to type are in blue and Links (to type or otherwise) are in Blue-Green.

Some notes before we get started:
Now, usually the best situtation is to install Linux after you have installed the other operating system, especially in the case with Windows NT, where it has its own boot loader. Pay attention to the name of the disk, such as hda1, since you will need this information when configuring the lilo.conf file.
If you have installed Linux first, this will also be covered, as well. If you want to boot Linux from the NT boot program (because you may not like Lilo, or because NT wrote over the lilo information on your MBR, or whatever the reason).
If you read the Mini-How-To's, you might possibly learn how to do it, but they assume that you:
  1. Read the how-to BEFORE you installed an OS and Linux (or the other way around)
  2. Have a general UNDERSTANDING of what the /etc/lilo.conf entries mean
  3. Don't want to have an IN-DEPTH understanding of lilo itself and the /etc/lilo.conf file.
  4. Want you to REFERENCE other mini-How-To's for various situations.
  5. As explained on the Main Page, this type of thinking is not smart learning. Its redundant, but follows a nice ISO-style standardizatione that the Linux community seems to enjoy. . . . Time to break the mold.

    Now on to the actual meat, for those of you who just want to jump right in. . . .
    LILO
    1. LILO is a boot program, similar to NT's boot loader. It can reside on the Master Boot Record of the hard-drive, or it can be placed within the partition itself.
    2. One of these options must be selected at the time of installation.
    3. If you have Windows NT installed prior to the Linux installation, its safe to have it write to the MBR.
    4. If you are installing Linux first, you may want to think about installing lilo to the partition, rather than the MBR, IF AND ONLY IF you are going to install Windows NT at a later date. The reason being that NT's Boot Loader will write over lilo in the MBR. This means that you will not be able to boot to the Linux Partition, unless you have created a floppy.
      1. By installing LILO to the boot partition, this allows you to modify the NT boot loader in order to add Linux as a viable boot option which will appear in the NT boot loader menu when you first start your system.
    5. If you are just installing Windows 9x, Dos, Win 3x, OS/2, or another Unix-OS, you can safely install LILO to the MBR. This will boot before anything else, and allow you to boot the other operating systems, once the lilo.conf file has been modified.

    /etc/lilo.conf

    1. The file /etc/lilo.conf is what lilo uses to get its boot information.
    2. To activate changes after you have modified lilo.conf, simply run: lilo from anywhere within Linux.
      1. This is, of course, assuming lilo is in your path. Lilo, like other programs resides in a specific directory on your hard disk, usually /sbin/lilo.
    3. The contents of lilo.conf are similar to:


    4. boot=/dev/hdc
      map=/boot/map
      install=/boot/boot.b
      prompt
      timeout=50
      default=linux

      image=/boot/vmlinuz-2.2.12-20
            label=linux
            initrd=/boot/initrd-2.2.12-20.img
            read-only
            root=/dev/hdc12

  1. boot=/dev/hdc tells the system to boot from the device mapped to /dev/hdc in this case.
  2. map=/boot/map tells the system to look in /boot for a System Map named: map(usually named System.map on vanilla Redhat installs).
  3. install=/boot/boot.b tells the system to look in boot for a file named boot.b. This file tells lilo where to look for the boot-sector information. (Which is typo'd as bootd.b in one of the Mini-HOW-TO's, By The Way.)
  4. prompt tells lilo to display the standard lilo: prompt during bootup. This allows for interactivity on the users part. More on this in a second...
  5. timeout=50 tells lilo to wait 50 tenths of a second for keyboard input. If no key is pressed, the default configuration is loaded.
  6. default=linux tells lilo that the default configuration is linux. You can type in a different configuration to boot a different partition or OS.
    1. Lilo will wait 4 seconds for you to press shift. If you do, it will pause at the prompt for input.
    2. In my experience, if you press tab or ?, lilo will show you the available boot options. This includes the default image to load (in this case linux), and any other images you want to load, such as another OS, or another kernel. This is very helpful for when you do a kernel upgrade. You can have more than one image in the same place in /boot which means you can boot an older kernel if your recompile or patch failed to run correctly.
  7. image=/boot/vmlinuz-2.2.12-20 tells lilo the name of the boot image of a Linux kernel for this configuration.
  8. label=linux tells linux which label to use at bootup for this configuration.
  9. initrd=/boot/initrd-2.2.12-20.img tells linux where the image file is to load the boot loader initialized RAM disk. Essentially, it is a RAM disk which contains a block-device to boot the full kernel in a two-part process.
    1. During the first boot-up phase, the kernel starts up and mounts an initial root file-system from the contents of /dev/initrd. This is the boot loader (in this case, lilo) initializing the RAM disk itself.
    2. During the second phase, additional drivers or other modules are loaded from the initial root device's contents.
    3. The final phase, if you can call it a phase, consist of mounting the normal root filesystem from a different device, such as the hard-disk itself. Gives a new meaning to the old phrase bootstrapping. A bootstrap in the olden days, according to lore, was a strap attached to the top of your boot that you could pull to help get your boot on. Hence, the expression pull oneself up by the bootstraps.
    4. If you do upgrade your machine, you may want to create a new initrd file for the upgraded hardware (this is especially true if you happen to upgrade from IDE hard-drives to SCSI hard-drives with a PCI SCSI controller). To upgrade your initrd file, run: /sbin/mkinitrd /boot/new_initrd_file 2.2.12 (or whatever kernel library modules you wish to use to create the new initrd image from /lib/modules). You must have the following in order for a proper initrd to be created in this way:
      1. The loopback block device is available.
      2. The file /etc/conf.modules has a line for your SCSI adapter, such as: alias scsi_hostadapter BusLogic
  10. read-only tells lilo to boot the initial RAM disk as read-only. Typically, the system startup procedure re-mounts the root file system as read-write, after checking the file system for inconsistencies (fsck).
  11. root=/dev/hdc12 tells lilo which device should be mounted as root.

See More information regarding available options in the /etc/lilo.conf file.

Windoze NT Loader

  1. Windoze NT loader (NTLDR) is similar to the lilo boot program for Linux.
  2. NTLDR is the the boot program for Windows NT which allows for the NT system to boot more than one operating system/NT installation.
  3. The main files involved with the NT boot process that a dual boot is concerned with are: NTLDR & boot.ini
    1. These files are the hidden system files in the C:\ directory. You will need to change the read-only permissions before you will be able to save the boot.ini file
  4. Use Notepad (or your favorite editor) to edit the boot.ini file. Typically, a boot.ini file looks somewhat like:

    [boot loader]
    timeout=1
    default=multi(0)disk(0)rdisk(0)partition(1)\WINNT
    [operating systems]
    multi(0)disk(0)rdisk(0)partition(1)\WINNT="Windows NT Workstation Version 4.00"
    multi(0)disk(0)rdisk(0)partition(1)\WINNT="Windows NT Workstation Version 4.00 [VGA mode]" /basevideo /sos

  5. timeout=1 tells ntldr to wait 1 second (in this case) before selecting the default configuration to load.
  6. default=multi(0)disk(0)rdisk(0)partition(1)\WINNT tells ntldr the default boot program. In the case of only IDE systems, multi and disk should always be 0. rdisk is the physical drive and will be 0 or 1 on the first IDE controller, or 2 and 3 on the second IDE controller.
    1. On SCSI system, this would look something like: scsi(x)multi(x)disk(x)rdisk(x)partition(x)\WINNT,
    2. scsi(x) is the SCSI controller number (if you happen to have more than one SCSI controller).
    3. multi(x) tells the SCSI controller to use INT 13 calls for the first two drives on the first SCSI controller (the first SCSI controller...aka...the first BIOS you see when the system first begins to boot up).
      1. multi(x), in SCSI systems, only applies to systems which use ONLY SCSI controllers.
      2. rdisk(x) in a SCSI system refers to the LUN - Logical Unit Number, usually 0, of the SCSI controller.
      3. If the system uses SCSI and IDE, multi(x) will only work with the first IDE controller's drives.
    4. On a system which only uses IDE, multi(x) will work for any of the 4 IDE drives on the 2 controllers.
  7. multi(0)disk(0)rdisk(0)partition(1)\WINNT="Windows NT Workstation Version 4.00" tells ntldr that the first menu item is on multi(0) (or IDE controller 1), disk(0) (disk 1 of the two disks available on IDE controller 1), partition(1) (the first partition on the disk, this can be checked with either fdsik or NT's Disk Manager), and to label the Selection: Windows NT Workstation.
  8. multi(0)disk(0)rdisk(0)partition(1)\WIN="Windows NT Workstation Version 4.00 [VGA mode]" /basevideo /sos tells ntldr what to label the second menu item, where it is located in the system, and on the partition.
    1. /basevideo tells WINNT to boot in 256VGA modeusing the default VGA driver that comes with NT. This option is usually used if you are having problems with the video driver you set.
    2. /sos tells WINNT to display the driver names as they load.
    1. In a windows 9x system, for example, dual-booting with a Windows NT system, you would replace \WINNT with \WINDOWS, or whatever system you want to load.
More information regarding available command switches for use in boot.ini

IF WINDOZE NT IS INSTALLED FIRST...
This applies to Other Operating Systems as well, not just to Windoze NT. This is just the example OS because it is the most troublesome. DOS, OS/2, Win 9x, and Win2K should all work the same way.

  1. Install Linux.
  2. Once Linux has been installed, boot to Linux and login as root
  3. vi /etc/lilo.conf
  4. Add the following lines:
  5. other = /dev/hdax

    1. where x = the partition number (usually 1) which was displayed during installation.
                 table = /dev/hda
                 label = windoze_nt

  6. Lastly, type lilo. This should return something similar to (if all goes well):
     
                  Added linux *
                  Added windoze_nt

    1. Added indicates that lilo has updated the version on the MBR successfully
    2. with an entry labeled linux & windoze_nt in this case.
    3. If there is an *, this indicates the default partition to boot (in this case, its the default Operating System, but Linux could have several kernel files here as well, useful to remember when attempting to do a kernel upgrade).

That's all there is to it. Now, run shutdown -r now or init 6 or shutdown -Fr or shutdown -r now; or whatever your favorite reboot command is, and reboot the system. If all goes well, when you see the lilo: prompt and press tab, your new operating system's label will appear.
  1. If this is not the case, boot back into Linux, login as root and check the /etc/lilo.conf file for typos.
  2. If no typos exist, then the Operating System that you are trying to boot may be on a different partition or disk.
    1. Don't worry, we can check to see which partitions and disks are available by listing the contents of the device directory using: ls /dev/hd*.
    2. You should see a list of all of the hard-drives on the system. Usually, the Operating System you have installed will be located on hda1, drive c:; however, if you happened to install the operating system's root directory (WINNT, Windows, dos, etc.) on an alternate drive letter, you will need to change /etc/lilo.conf to reflect the alternate location.
    3. The order the drive letters follow are such: hda1 = c:, hda2 = d:, hda3 = e:, hda4 = f:, hda5 = g:, etc.
    4. If the operating system is on a different disk (which is quite possible, but highly unlikely), simply change the a in hda1 to the letter & number corresponding to the IDE or SCSI position (aka...hda1=hdb1, etc) & change the partition number if applicable.
IF LINUX IS INSTALLED FIRST...
  1. Install Windoze NT or Win2K.
  2. Boot Windoze NT or Win2K and login with an Administrative Account
  3. Once you are logged in, start Windoze explorer and open the c: directory.
  4. Ensure that system files are not hidden (because they are by default, unless you are an NT Guru and turn that option off when you first install it). To do so, click on View --> Folder Options --> View (tab) --> Click the Show All Files radio button, under the Hidden Files folder. Click OK and you should see more files appear in Explorer.
  5. Look for boot.ini on the C: drive. Right click on boot.ini and select Edit.
  6. Now that you are in boot.ini, simply copy and paste one of the Windoze NT entries to the bottom of the file. Edit it to look something like this:
    multi(0)disk(0)rdisk(0)partition(1)\boot="Linux - a REAL Operating System"
    1. What this does is tell Winnt where to look for Linux on the first partition, and run the \boot directory. This is where you will have stored Lilo when you first installed Linux, on the partition, rather than the MBR.
    2. I haven't experimented with this yet, however, I am going to be getting a much needed hard-drive upgrade soon, so I may experiment with this using VMWARE. If VMWARE doesn't work, I will do it manually with my other NT system and put the results here.



The Master Boot Record is a small program that is executed when a computer boots up. Typically, the MBR resides on the first sector of the hard disk. The program begins the boot process by looking up the partition table to determine which partition to use for booting. It then transfers program control to the boot sector of that partition, which continues the boot process. In DOS and Windows systems, you can create the MBR with the FDISK /MBR command.



lilo.conf boot options (taken from lilo.conf's man pages):
GLOBAL OPTIONS
backup=backup-file
Copy the original boot sector to backup-file (which may also be a device, e.g. /dev/null) instead of /boot/boot.NNNN.

boot=boot-device
Sets the name of the device (e.g. a hard disk par tition) that contains the boot sector. If this key word is omitted, the boot sector is read from (and possibly written to) the device that is currently mounted as root.

change-rules
Defines boot-time changes to partition type numbers (`hiding'). See section "Partition type change rules" of user.tex for details.

compact
Tries to merge read requests for adjacent sectors into a single read request. This drastically reduces load time and keeps the map smaller. Using `compact' is especially recommended when booting from a floppy disk.

default=name
Uses the specified image as the default boot image. If `default' is omitted, the image appearing first in the configuration file is used.

delay=tsecs
Specifies the number of tenths of a second the boot loader should wait before booting the first image. This is useful on systems that immediately boot from the hard disk after enabling the keyboard. The boot loader doesn't wait if `delay' is omitted or is set to zero.

disk=device-name
Defines non-standard parameters for the specified disk. See section "Disk geometry" of user.tex for details. Especially useful is the `bios=' parame ter. The BIOS numbers your disks 0x80, 0x81, etc. and it is impossible to decide which Linux disk corresponds to which BIOS disk (since this depends on the BIOS setup, and on the type of BIOS), so if you have an unusual setup you need to state the correspondence between Linux disks and BIOS disks.
For example,

      disk=/dev/sda
      bios=0x80
      disk=/dev/hda
      bios=0x81

would say that your SCSI disk is the first BIOS disk, and your (primary master) IDE disk is the second BIOS disk.

disktab=disktab-file
Specifies the name of the disk parameter table. The map installer looks for /etc/disktab if `disk tab' is omitted. The use of disktabs is discour aged.

fix-table
This allows lilo to adjust 3D addresses in parti tion tables. Each partition entry contains a 3D (sector/head/cylinder) and a linear address of the first and the last sector of the partition. If a partition is not track-aligned and if certain other operating systems (e.g. PC/MS-DOS or OS/2) are using the same disk, they may change the 3D address. lilo can store its boot sector only on partitions where both address types correspond. lilo re-adjusts incorrect 3D start addresses if `fix-table' is set.

WARNING: This does not guarantee that other operat ing systems may not attempt to reset the address later. It is also possible that this change has other, unexpected side-effects. The correct fix is to re-partition the drive with a program that does align partitions to tracks. Also, with some disks (e.g. some large EIDE disks with address transla tion enabled), under some circumstances, it may even be unavoidable to have conflicting partition table entries.

force-backup=backup-file
Like `backup', but overwrite an old backup copy if it exists.

ignore-table
tells lilo to ignore corrupt partition tables.

install=boot-sector
Install the specified file as the new boot sector. If `install' is omitted, /boot/boot.b is used as the default.

linear Generate linear sector addresses instead of sec tor/head/cylinder addresses. Linear addresses are translated at run time and do not depend on disk geometry. Note that boot disks may not be portable if `linear' is used, because the BIOS service to determine the disk geometry does not work reliably for floppy disks. When using `linear' with large disks, /sbin/lilo may generate references to inac cessible disk areas, because 3D sector addresses are not known before boot time.

lock Enables automatic recording of boot command lines as the defaults for the following boots. This way, lilo "locks" on a choice until it is manually over ridden.

map=map-file
Specifies the location of the map file. If `map' is omitted, the file /boot/map is used.

message=message-file
specifies a file containing a message that is dis played before the boot prompt. No message is dis played while waiting for a shifting key after printing "LILO ". In the message, the FF character ([Ctrl L]) clears the local screen. The size of the message file is limited to 65535 bytes. The map file has to be rebuilt if the message file is changed or moved.

      nowarn Disables warnings about possible future dangers.

      optional
The per-image option `optional' (see below) applies to all images.

password=password
The per-image option `password=...' (see below) applies to all images.

      prompt forces entering the boot prompt without expecting any prior key-presses. Unattended reboots are impossible if `prompt' is set and `timeout' isn't.

      restricted
The per-image option `restricted' (see below) applies to all images.

serial=parameters
enables control from a serial line. The specified serial port is initialized and the boot loader is accepting input from it and from the PC's keyboard. Sending a break on the serial line corresponds to pressing a shift key on the console in order to get the boot loader's attention. All boot images should be password-protected if the serial access is less secure than access to the console, e.g. if the line is connected to a modem. The parameter string has the following syntax:

       <port>[,<bps>[<parity>[<bits>]]]

      <port>: the number of the serial port, zero-based. 0 corresponds to COM1 alias /dev/ttyS0, etc. All four ports can be used (if present).

      <bps>: the baud rate of the serial port. The fol lowing baud rates are supported: 110, 150, 300, 600, 1200, 2400, 4800 and 9600 bps. Default is 2400 bps.

      <parity>: the parity used on the serial line. The boot loader ignores input parity and strips the 8th bit. The following (upper or lower case) characters are used to describe the parity: n for no parity, e for even parity and o for odd parity.

      <bits>: the number of bits in a character. Only 7 and 8 bits are supported. Default is 8 if parity is "none", 7 if parity is "even" or "odd".

If `serial' is set, the value of `delay' is auto matically raised to 20.

Example: serial=0,2400n8 initializes COM1 with the default parameters.

timeout=tsecs
sets a timeout (in tenths of a second) for keyboard input. If no key is pressed for the specified time, the first image is automatically booted. Similarly, password input is aborted if the user is idle for too long. The default timeout is infinite.

verbose=level
Turns on lots of progress reporting. Higher numbers give more verbose output. If -v is additionally specified on the lilo command line, the level is increased accordingly. The maximum verbosity level is 5.

Additionally, the kernel configuration parameters append, ramdisk, read-only, read-write, root and vga can be set in the global options section. They are used as defaults if they aren't specified in the configuration sections of the respective kernel images.

PER-IMAGE OPTIONS
A per-image section starts with either a line

image=pathname

(to indicate a file or device containing the boot image of a Linux kernel), or a line

other=pathname

to indicate an arbitrary system to boot.

In the former case, if an image line specifies booting from a device, then one has to indicate the range of sec tors to be mapped using

range=start-end

In the latter case (booting another system) there are the three options

loader=chain-loader
This specifies the chain loader that should be used. By default /boot/chain.b is used. The chain loader must be specified if booting from a device other than the first hard or floppy disk.

table=device
This specifies the device that contains the parti tion table. The boot loader will not pass parti tion information to the booted operating system if this variable is omitted. (Some operating systems have other means to determine from which partition they have been booted. E.g., MS-DOS usually stores the geometry of the boot disk or partition in its boot sector.) Note that /sbin/lilo must be re-run if a partition table mapped referenced with `table' is modified.

unsafe Do not access the boot sector at map creation time.
This disables some sanity checks, including a par tition table check. If the boot sector is on a fixed-format floppy disk device, using UNSAFE avoids the need to put a readable disk into the drive when running the map installer. `unsafe' and `table' are mutually incompatible.

In both cases the following options apply.

label=name
The boot loader uses the main file name (without its path) of each image specification to identify that image. A different name can be used by set ting the variable `label'.

alias=name
A second name for the same entry can be used by specifying an alias.
lock (See above.)

optional
Omit the image if it is not available at map cre ation time. This is useful to specify test kernels that are not always present.
password=password
Protect the image by a password.
restricted
A password is only required to boot the image if parameters are specified on the command line (e.g. single).

KERNEL OPTIONS
If the booted image is a Linux kernel, then one may pass command line parameters to this kernel.
append=string
Appends the options specified to the parameter line passed to the kernel. This is typically used to specify parameters of hardware that can't be entirely auto-detected or for which probing may be dangerous. Example:
       append = "hd=64,32,202"

literal=string
Like `append', but removes all other options (e.g. setting of the root device). Because vital options can be removed unintentionally with `literal', this option cannot be set in the global options section.

ramdisk=size
This specifies the size of the optional RAM disk. A value of zero indicates that no RAM disk should be created. If this variable is omitted, the RAM disk size configured into the boot image is used.

read-only
This specifies that the root file system should be mounted read-only. Typically, the system startup procedure re-mounts the root file system read-write later (e.g. after fsck'ing it).

read-write
This specifies that the root file system should be mounted read-write.

root=root-device
This specifies the device that should be mounted as root. If the special name current is used, the root device is set to the device on which the root file system is currently mounted. If the root has been changed with -r , the respective device is used. If the variable `root' is omitted, the root device setting contained in the kernel image is used. (And that is set at compile time using the ROOT_DEV variable in the kernel Makefile, and can later be changed with the rdev(8) program.)

vga=mode
This specifies the VGA text mode that should be selected when booting. The following values are recognized (case is ignored):
normal: select normal 80x25 text mode.

extended (or ext): select 80x50 text mode.

ask: stop and ask for user input (at boot time).

<number>: use the corresponding text mode. A list of available modes can be obtained by booting with vga=ask and pressing [Enter].

If this variable is omitted, the VGA mode setting contained in the kernel image is used. (And that is set at compile time using the SVGA_MODE variable in the kernel Makefile, and can later be changed with the rdev(8) program.)
Back to Lilo.conf Back to Linux First Back to NT First



boot.ini switches:
/3GB New to Service Pack 3. This causes the split between user and system portions of the Windows NT map to become 3GB for user applications, 1GB for System.
To take advantage of this the system must be part of the NT Enterprise suite and the application must be flagged as a 3GB aware application.

/BASEVIDEO The computer starts up using the standard VGA video driver. Use this if you have installed a graphics driver that is not working.

/BAUDRATE Specifies the baud rate to be used for debugging. If you do not set the baud rate, the default baud rate is 9600 if a modem is attached, and 19200 for a null-modem cable.

/BOOTLOG Makes WIN 2000 write a log of the boot to the file %SystemRoot%\NTBTLOG.TXT
WINDOWS 2000 ONLY

/BURNMEMORY= Makes NT forget about the given amount of memory in MB. If /burnmemory=64 was given then 64MB of memory would be unavailable

/CRASHDEBUG The debugger is loaded when you start Windows NT, but remains inactive unless a Kernel error occurs. This mode is useful if you are experiencing random, unpredictable Kernel errors.

/DEBUG The debugger is loaded when you start Windows NT, and can be activated at any time by a host debugger connected to the computer. This is the mode to use when you are debugging problems that are regularly reproducible.

/DEBUGPORT=comx Specifies the com port to use for debugging, where x is the communications port that you want to use.

/FASTDETECT Specifying FASTDETECT causes NTDETECT to skip parallel and serial device enumeration for a boot into Win2K, whereas ommitting the switch has NTDETECT perform enumeration for a boot into NT 4.0. Win2K setup automatically recognizes dual-boot configurations and sets this switch for BOOT.INI lines that specify a Win2K boot.
WINDOWS 2000 ONLY

/HAL= Allows you to override the HAL used, for example using a checked version

/INTAFFINITY Sets the multiprocessor HAL (HALMPS.DLL) to set interrupt affinities such that only the highest numbered processor in an SMP will receive interrupts. Without the switch the HAL defaults to its normal behavior of letting all processors receive interrupts.
WINDOWS 2000 ONLY

/KERNEL= Same as above but for the kernel
/MAXMEM:n Specifies the maximum amount of RAM that Windows NT can use. This switch is useful if you suspect a memory chip is bad.

/NODEBUG No debugging information is being used.

/NOGUIBOOT When this option is specified the VGA video driver responsible for presenting bit mapped graphics during Win2K's boot process is not initialized. The driver is used to display boot progress information, as well as to print the Blue Screen crash screen, so disabling it will disable Win2K's ability to do those things as well.
WINDOWS 2000 ONLY

/NOSERIALMICE=[COMx | COM,x,y,z...] Disables serial mouse detection of the specified COM port(s). Use this switch if you have a component other than a mouse attached to a serial port during the startup sequence. If you use /NOSERIALMICE without specifying a COM port, serial mouse detection is disabled on all COM ports.

/NUMPROC=n Only enables the first n processors on a multiple processor system

/ONECPU Only use the first CPU in a multiple processor system

/PCILOCK Stops Windows NT from dynamically assigning IO/IRQ resources to PCI devices and leaves the devices configured by the BIOS.

/SAFEBOOT This is an automatic switch which NTLDR should complete for you when you use the F8 menu to perform a safe boot. Following the colon in the option you must specify one of three additional switches: MINIMAL, NETWORK, or DSREPAIR. The MINIMAL and NETWORK flags correspond to safe boot with no network and safe boot with network support. The safe boot is a boot where Windows 2000 only loads drivers and services that are specified by name or group in the Minimal or Network Registry keys under HKLM\System\CurrentControlSet\Control\SafeBoot. The DSREPAIR (Directory Services Repair) switch causes NT to boot into a mode where it restores the Active Directory from a backup medium you present.

An additional option that you can append is "(ALTERNATESHELL)." This tells NT to use the program specified by HKLM\System\CurrentControlSet\SafeBoot\AlternateShell as the graphical shell, rather than to use the default which is Explorer.
WINDOWS 2000 ONLY

/SOS Displays the driver names while they are being loaded. Use this switch if Windows NT won’t start up and you think a driver is missing. This option is configured by default on the [VGA] option on the boot menu.

/WIN95 This switch is only pertinent on a triple-boot system that has DOS, Win9x and Windows NT installed. Specifying the /WIN95 switch directs NTLDR to boot the Win9x boot sector stored in BOOTSECT.W40. See Microsoft KB Article Q157992 for more information.

/WIN95DOS This switch is only pertinent on a triple-boot system that has DOS, Win9x and Windows NT installed. Specifying the /WIN95DOS switch directs NTLDR to boot the DOS boot sector stored in BOOTSECT.DOS. See Microsoft KB Article Q157992 for more information.

/YEAR= Specifying this value causes NT/Windows 2000 core time function to ignore the year that the computer's real-time clock reports and instead use the one indicated. Thus, the year used in the switch affects every piece of software on the system, including the NT kernel. Example: /YEAR=2005. Note: this option is only available on NT 4.0 Service Pack 4 and Windows 2000.