.\" $NetBSD: boot.8,v 1.2 2004/01/07 12:55:42 wiz Exp $ .\" .\" Copyright (c) 1991, 1993 .\" The Regents of the University of California. All rights reserved. .\" .\" This code is derived from software written and contributed .\" to Berkeley by William Jolitz. .\" .\" Redistribution and use in source and binary forms, with or without .\" modification, are permitted provided that the following conditions .\" are met: .\" 1. Redistributions of source code must retain the above copyright .\" notice, this list of conditions and the following disclaimer. .\" 2. Redistributions in binary form must reproduce the above copyright .\" notice, this list of conditions and the following disclaimer in the .\" documentation and/or other materials provided with the distribution. .\" 3. Neither the name of the University nor the names of its contributors .\" may be used to endorse or promote products derived from this software .\" without specific prior written permission. .\" .\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE .\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF .\" SUCH DAMAGE. .\" .\" @(#)boot_i386.8 8.2 (Berkeley) 4/19/94 .\" .Dd January 7, 2004 .Dt BOOT 8 cobalt .Os .Sh NAME .Nm boot .Nd system bootstrapping procedures .Sh DESCRIPTION .Tn Cobalt Networks' MIPS-based Microservers .Po now known as .Tn Sun Server Appliances .Pc that can run .Nx Ns /cobalt can use any of the following boot procedures: .Pp .Bl -bullet .It bootstrap .Nx from disk using the standard .Tn Cobalt .Tn Firmware boot sequence .It bootstrap .Nx from disk using the .Nx boot loader .It network bootstrap .Nx using the standard .Tn Cobalt .Tn Firmware means from a .Tn TCP/IP .Tn LAN with .Tn DHCP and .Tn NFS . .El .Ss Power fail and crash recovery Normally, the system will reboot itself at power-up or after crashes. An automatic consistency check of the file systems will be performed, and unless this fails, the system will resume multi-user operations. .Ss Cobalt Boot Sequence The first program to take a control after reboot or at power-on is the .Tn Cobalt .Tn Firmware . The .Tn Firmware can load a compressed kernel from disk, subject to a few limitations. The .Tn Firmware expects the disk to contain DOS-style partition information with the first partition being a boot one which is special in that it should reside close to the beginning of the disk and must contain an .Tn ext2 file system with a .Pa boot directory which is treated specially by the .Tn Firmware . The default sequence is pretty straightforward, the .Tn Firmware finds the boot partition, mounts the ext2 file system from it and tries to load a compressed kernel image from the .Pa boot directory. The name of the kernel image differs from machine to machine and this is the reason for having multiple copies of .Nx kernel installed under different names. The following kernel image names are known to be in use by certain .Tn Cobalt flavors: .Bd -unfilled -offset indent .Pa /boot/vmlinuz.gz .Pa /boot/vmlinux.gz .Pa /boot/vmlinux-nfsroot.gz .Pa /boot/vmlinux_RAQ.gz .Pa /boot/vmlinux_raq-2800.gz .Ed .Pp where .Pa /boot is the directory on the boot partition. .Pp The .Tn Firmware console provides the means to alter the default boot sequence and/or to specify boot parameters. Pressing .Sq Aq space right after the .Tn Firmware printed its greeting brings the .Tn Firmware console prompt and pressing .Sq \&? at the prompt prints a help screen with all commands supported by the .Tn Firmware . For example, the .Sq bfd command can be used to boot a kernel image: .Bd -unfilled -offset indent Cobalt: bfd /boot/\*[Lt]kernel image\*[Gt] [options] .Ed .Pp where .Dq options are the kernel options. .Ss Bootstrap from disk using the standard Firmware sequence The .Tn Firmware enters the standard boot sequence after reboot or at power-on when no front-panel buttons are pressed and the .Tn Firmware console is not used to change the boot procedure. At boot time, the .Tn Firmware checks the hardware, prints the banner and performs the standard .Tn Cobalt boot sequence. There are a few culprits tightly connected to this boot method. First of all, the kernel must be compressed. Second, the .Tn Firmware enforces a hard restriction on the kernel size .Po it cannot exceed approximately 1000000/2500000 bytes compressed/uncompressed .Pc resulting in a lock-up should this requirement not be fulfilled. For .Nx , another pitfall is that the uncompressed kernel should be copied to the root directory to make certain system binaries .Po such as e.g. netstat .Pc work, and the kernel images in the .Pa boot directory should always be in sync with the ones installed in the root directory. .Ss Bootstrap from disk using the NetBSD boot loader The .Nx boot loader is an attempt to break through the limitations enforced by the .Tn Firmware loader. The main idea is to make the .Tn Firmware load the .Nx boot loader and let the latter take care of loading the kernel. To achieve this goal, multiple copies of the boot loader are installed in the .Pa boot directory on the boot partition, one copy per each kernel image name the .Tn Cobalt .Tn Firmware might look for. The .Nx kernel is located in the root directory .Po usually .Pa /dev/wd0a .Pc like it is on other platforms. Once running, the boot loader prints a banner similar to the following: .Bd -unfilled -offset indent \*[Gt]\*[Gt] NetBSD/cobalt 1.6ZG Bootloader, Revision 0.1 [@0x81000000] \*[Gt]\*[Gt] (user@buildhost, builddate) \*[Gt]\*[Gt] Memory: 32768 k \*[Gt]\*[Gt] Firmware boot string: root=/dev/hda1 ro Loading: wd0a:netbsd 2249104+195856 [81872+73284]=0x27af90 Starting at 0x80001000 .Ed .Pp by default, the boot loader uses .Dq Li wd0a:netbsd as kernel specification which corresponds to the file .Nm netbsd on partition .Dq a of the .Nx .Tn MBR partition of the first hard disk known to the .Tn Firmware .Po which is an .Tn IDE or similar device - see the .Sx BUGS section .Pc . In case this fails, the boot loader will try a few alternative kernel image names and if this also fails the loader will repeat the whole procedure for all other .Nx slices .Pq if any and will load the first kernel image found. .Ss Boot loader Options It is possible to specify some options to the boot loader by breaking into the .Tn Firmware and using the .Dq bfd command: .Bd -unfilled -offset indent Cobalt: bfd /boot/boot.gz [options] .Ed .Pp The boot loader allows the following options: .Bl -tag -width 04n -offset 04n .It Xo Ic nbsd= .Op Va device : Ns .Op Va filename .Op Fl acdqsv .Xc The default .Va device will be set to .Va wd0a which is the first .Nx partition on the first drive, as numbered by the .Tn Firmware . To boot from an alternate disk, the full name of the device should be given at the prompt. .Va device is of the form .Va xdNx where .Va xd is the device from which to boot, .Va N is the unit number, and .Va x is the partition letter. .Pp The following list of supported devices may vary from installation to installation: .Pp .Bl -hang -compact .It wd Hard disks as numbered by the BIOS. This includes ST506, IDE, ESDI, RLL disks on a WD100[2367] or lookalike controller(s), and SCSI disks on SCSI controllers recognized by the .Tn Firmware . .El .Pp The default .Va filename is .Pa netbsd ; if the boot loader fails to successfully open that image, it then tries .Pa netbsd.gz (expected to be a kernel image compressed by .Xr gzip 1 ) , followed by .Pa netbsd , .Pa netbsd.gz , .Pa onetbsd , .Pa onetbsd.gz , .Pa netbsd.bak , .Pa netbsd.bak.gz , .Pa netbsd.old , .Pa netbsd.old.gz , .Pa netbsd.cobalt , .Pa netbsd.cobalt.gz , .Pa netbsd.elf , and finally .Pa netbsd.elf.gz . Alternate system images can be loaded by just specifying the name of the image. .Pp Options are: .Bl -tag -width xxx .It Fl a Prompt for the root file system device, the system crash dump device, and the path to .Xr init 8 . .It Fl c Bring the system up into the device configuration manager. From here the device locators can be tuned to the hardware; see .Xr userconf 4 . .It Fl d Bring the system up in debug mode. Here it waits for a kernel debugger connect; see .Xr ddb 4 . .It Fl q Boot the system in quiet mode. .It Fl s Bring the system up in single-user mode. .It Fl v Boot the system in verbose mode. .El .El .Pp It is always a good idea to have a small rescue kernel in the .Pa boot directory. In an emergency case, this will allow you to use the .Tn Firmware .Sq bfd command to boot the rescue image: .Bd -unfilled -offset indent Cobalt: bfd /boot/netbsd.gz .Ed .Ss Network bootstrap using the standard Firmware sequence The .Tn Cobalt .Tn Firmware allows to boot a kernel over the network, with all the limitations of the .Tn Firmware loader described above. The simplest method is to break into the .Tn Firmware prompt and use .Dq bfd command to specify where to boot from: .Bd -unfilled -offset indent Cobalt: bfd /netbsd.gz nfsroot=/home/raq/root .Ed .Pp The .Tn Firmware is picky about syntax and in general, so if things fail mysteriously, try to conform to the conventions described above. For netbooting, you need to NFS-export the directory given to .Dq nfsroot= , and the named kernel .Pq Pa netbsd.gz needs to be executable and in that directory. You will also need to setup .Xr rarpd 8 and .Xr dhcpd 8 . Once the kernel is loaded with the command line values, the data given via DHCP is used to mount the root filesystem. Here is a known working DHCP entry: .Bd -unfilled -offset indent host raq { hardware ethernet 0:10:e0:0:52:62; # raq MAC fixed-address 10.0.0.15; # raq address filename "/netbsd.gz"; # kernel name in root-path option root-path "/home/raq/root"; # absolute dir on nfs server server-name="10.0.0.3"; # IP of nfs server } .Ed .Pp Another option is to hold down the left and right cursor buttons during power-on which executes the command .Bd -unfilled -offset indent bfd /boot/vmlinux.gz root=/dev/nfs nfsroot=/nfsroot, .Ed .Pp resulting in a netboot. On RaQ 1's, the default kernel name is .Pa vmlinux_RAQ.gz and on RaQ 2's, it is .Pa vmlinux_raq-2800.gz . .Sh FILES .Bl -tag -width /usr/mdec/bootxx_fstype -compact .It Pa /boot/boot.gz boot program code loaded by the .Tn Firmware loader .It Pa /boot/netbsd.gz .Xr gzip 1 Ns -compressed rescue system code .It Pa /netbsd system code .It Pa /netbsd.gz .Xr gzip 1 Ns -compressed system code .El .Sh SEE ALSO .Xr ddb 4 , .Xr userconf 4 , .Xr fdisk 8 , .Xr halt 8 , .Xr reboot 8 , .Xr shutdown 8 .Sh BUGS The .Nx boot loader supports booting off IDE hard drives only. This is less a bug of the boot loader code than a shortcoming of the .Tn Cobalt .Tn Firmare and shall be considered as such.