See this page as a slide show
Administration
Chapter 3: Booting And Shutting Down
Colorado State University
Computer Science Department
Original slides from Dr. James Walden at Northern Kentucky University.
Topics
- Booting
- Bootstrap loaders
- Run levels
- Startup scripts
- Shutdown and reboot
Booting
- ROM boot code (BIOS in PCs)
- Master Boot Record (MBR)
- Bootloader
- Kernel
- Hardware detection and configuration
- Creation of system processes
- Multiuser operation
BIOS
- BIOS actions:
- Load CMOS settings.
- Initialize registers and power management.
- POST (Power On Self Test.)
- Display system settings (if key pressed.)
- Activate other BIOSes
- Disk interfaces
- Graphics cards
- Network interfaces
- Find bootable device.
- Load MBR.
- Run MBR program.
MBR
- Up to four primary partitions in MBR:
- Has CHS (Cyl/Head/Sector) addresses or partition
- LBA (Logical Block Addressing) for newer disk drives
- One can be used as an extended partition
- Links to an Extended Boot Record (EBR) on first sector
- Each logical partition is described by its own EBR
- Includes link to the next EBR, to allow any # of partitions
Bootloader: GRUB
- Stage 1 (stored in MBR or boot sector)
- Initialize the system briefly.
- Detect the geometry and access mode of the loading drive.
- Load the first sector of Stage 2.
- Jump to the starting address of the Stage 2.
- Stage 1.5 (stored in sectors of MBR track)
- One version for each filesystem.
- Loads stage 2 from filesystem.
- Stage 2 (stored in filesystem)
- Displays menu of OS choices.
- Often displays boot splash screen.
- Loads selected OS kernel.
GRUB Installation
- At OS Install Time: Most distributions install GRUB by default.
- Install via command-line:
grub-install /dev/hda
- Native install: Boot with CD and run grub.
#>> root (hd0,0)
#>> setup (hd0)
#>> quit
GRUB Boot
- Automatically boots default OS after timeout.
- Key sequences bring up
- Menu of boot options (described in menu.lst)
- Edit kernel options (runlevel, other features)
- GRUB command shell
- A boot prompt password may be required before
edit privileges or shell access granted.
- Can bypass OS security by specifying kernel options or
accessing files from GRUB shell.
Booting with GRUB
Direct Boot
- Specify OS kernel image to load.
Chainloading
- Specify another bootloader to load.
- Chainload NTLDR to boot MS Windows.
Config: /boot/grub/menu.lst
# timeout (sec) before booting default
timeout 10
# Ubuntu entry
title Ubuntu, kernel 2.6.10-5-386
root (hd1,0)
kernel /boot/vmlinuz-2.6.10-5-386 root=/dev/hde1 ro quiet splash
initrd /boot/initrd.img-2.6.10-5-386
boot
# Windows entry
title Windows 2000
root (hd0,0)
makeactive
chainloader +1
GRUB Naming Convention
- GRUB uses BIOS hard disk numbers
- OS may not number disks identically to BIOS.
- Examples
(hd0,0)
First partition of first hard disk
(hd1,2)
Third partition of second hard disk.
Kernel
- GRUB loads kernel file into memory:
/boot/vmlinuz-VERSION
- Kernel uncompresses self and begins running.
- Sets up interrupts and virtual memory.
- Loads initial RAMdisk into memory:
/boot/initrd.img-VERSION
- Kernel uncompresses
initrd
and mounts as /sysroot
.
- Kernel loads drivers and modules from
/sysroot
.
- SCSI and RAID drivers, ext3 filesystem module, etc.
- Switches from real mode to protected mode.
- Creates kernel threads (ksoftirq, khelper, kblockd)
- Starts
init
or systemd
process.
Kernel Arguments
Numeric arguments
- Specify runlevel.
single
also specifies single user mode
Root device options
root=
specifies which root device to use
ro
, rw
specify access type
Kernel Arguments (continued)
Console options
console=ttyS1,9600
will use serial console
Hardware options
- Enable, disable specific hardware devices/features.
Run Levels
- 0 – Shutdown
- 1 – Single user
- 2 – Multi-user, no networking
- 3 – Multi-user, with networking
- 4 – Unused
- 5 – Multi-user, networking, and GUI
- 6 – Reboot
/etc/inittab
# The default runlevel.
id:2:initdefault:
# Boot-time system config/initialization script.
si::sysinit:/etc/init.d/rcS
# What to do in single-user mode.
~~:S:wait:/sbin/sulogin
# /etc/init.d executes the start and kill scripts
l0:0:wait:/etc/init.d/rc 0
l1:1:wait:/etc/init.d/rc 1
l2:2:wait:/etc/init.d/rc 2
l3:3:wait:/etc/init.d/rc 3
l4:4:wait:/etc/init.d/rc 4
l5:5:wait:/etc/init.d/rc 5
l6:6:wait:/etc/init.d/rc 6
# What to do when CTRL-ALT-DEL is pressed.
ca:12345:ctrlaltdel:/sbin/shutdown -t1 -a -r now
rc
- Executed by init with runlevel as argument.
- Starts and stops services for each runlevel.
/etc/rc#.d
scripts
- Symlinks to actual scripts in
/etc/init.d
- Kills services beginning with
K
- Starts services beginning with
S
- Executes in ASCII order.
Scripts in runlevel 2
$ ls /etc/rc2.d
S05vbesave S13gdm S20openntpd S89cron
S08iptables S18hplip S20postfix S91apache2
S10acpid S18portmap S20powernowd S98usplash
S10powernowd.early S19cupsys S20rsync S99acpi-support
S10sysklogd S20apmd S20ssh S99rc.local
S10syslog-ng S20argus-server S20xinetd S99rmnologin
S11klogd S20hotkey-setup S21nfs-common S99stop-readahead
S12dbus S20makedev S89anacron
Example init.d script
#! /bin/sh
case "$1" in
'start')
if [ -f /usr/local/sbin/sshd ]; then
echo "starting SSHD daemon"
/usr/local/sbin/sshd &
fi
;;
'stop')
PID=`ps -e -u 0 | fgrep sshd | awk '{print $1}'`
if [ ! -z "$PID" ] ; then
kill ${PID} >/dev/null 2>&1
fi
;;
*) echo "usage: /etc/init.d/sshd {start|stop}";;
esac
Turning Services On/Off
- Add a new service
- Install startup script in
/etc/init.d
- Create
S
symlinks in appropriate runlevels
- Create
K
symlinks in appropriate runlevels
- Prevent a service from starting on boot
- Remove
S
links from /etc/rc?.d/*
- Remove
K
links from /etc/rc?.d/*
Red Hat Service Commands
Starting or stopping a service
service NAME [start,restart,stop]
is equivalent to
/etc/init.d/NAME [start,restart,stop]
Enabling or disabling a service at boot time
chkconfig NAME on –level <runlevels>
is equivalent to
ln –s /etc/init.d/NAME /etc/init.d/rc.d/rc#.d/S??name
Single User Mode
- Kernel boots (arg 1 or “single”)
- System asks for root password
- Root shell starts
- No system processes
- No networking
- Only root filesystem mounted (read-only).
- Remount for RW:
mount –o remount,rw /
- Why?
- Fix without user interference
- For example: disks, backups, security
What if single user mode doesn’t work?
- Bypass init by booting into shell
- Pass
init=/bin/bash
argument to kernel.
- Probably want to specify rw option as well.
- No need for root password.
- No housekeeping performed.
- Boot from CD
- RedHat CD with linux rescue
Shutdown
shutdown
, init 0
, halt
- Offers time-delay option
- Runs server/daemon stop scripts
- Kill remaining processes
- Flushes writes to disk (sync)
- reboot, init 6
- Ctrl-Alt-Del
- as defined in
/etc/inittab
ca:ctrlaltdel:/sbin/shutdown -t1 -a -r now
What's wrong with init?
- Performance
- Starts services sequentially.
- Shell scripts spawn lots of processes.
- Manual configuration
- Order to start services determined manually.
- Network before authorization before NFS.
- Reliability
- Init does NOT monitor or restart services after boot.
- Hotplug hardware
- Drives mounted at boot.
- What about USB or network drives?
Init Alternatives
systemd
- Full replacement for
init
, used by Fedora Core
- Parallel starting of services, reduce shell overhead
launchd
- Mac replacement for
init
, rc
, cron
, inetd
- Monitors services, starts on demand
initng
- Service configuration specifies dependencies
- Starts services in parallel, once dependencies met
Systemd
Systemd
is the system and service manager for Fedora releases
- More information can be found at http://fedoraproject.org/wiki/Systemd
- Uses units to encapsulate services, sockets,
devices, mounts, automounts, and targets
- Has advanced capabilities that make it better than
previous
initd
mechanism:
- Aggressive parallelization when launching processes
- Bus activation starts services only when accessed
- Supports save and rollback of service states
- Automatically maintains mount and automount points
Systemd (cont’d)
systemadm
is a graphical front-end for systemd that
allows inspection and control of services
systemctl
is a command front-end for systemd
, same as systemadm
- Default in Fedora 15, replacing
upstart
, init
unused since at least Fedora 9
- Still supports
chkconfig
described previously in these slides
- Files reside in
/etc/systemd/system
, for example
multi-user.target.wants for run level 5.
- Links set of service files, for example
sshd.service
:
ExecStart=/usr/bin/sshd –D $OPTIONS
ExecReload=/bin/kill –HUP $MAINPID
WantedBy=multi-user.target
Upstart
- Event-based
init
replacement.
- Supports wider range of events than
launchd
.
- Hardware device has been added.
- Filesystem has been mounted.
- Time-based (can replace
cron
as well as init
.)
- File has been modified.
- Another job has begun or finished running.
- Backwards compatible with
/etc/init.d
scripts.
- Respawns services that are down.
- Used in Ubuntu since version 6.10.
References
- M. Tim Jones, “Inside the Linux boot process,”
http://www.ibm.com/developerworks/library/l-linuxboot/index.html, 2006.
- M. Tim Jones, “Parallelize applications for faster Linux booting,”
http://www.ibm.com/developerworks/linux/library/l-bootfaster/index.html,
2007.
- Scott James Remnant, “Upstart in Universe,”
http://www.netsplit.com/2006/08/26/upstart-in-universe/, 2006.
- Starman, “Boot records revealed: MBR details,”
http://mirror.href.com/thestarman/asm/mbr/index.html
- “Extended boot record,”
http://en.wikipedia.org/wiki/Extended_Boot_Record.
- GRUB manual
http://www.gnu.org/software/grub/manual/grub.html
- “How it works: Master Boot Record (MBR),”
http://www.ata-atapi.com/hiwmbr.htm