Linux的启动方式可以从软盘或硬盘引导Linux。从软盘启动Linux时,引导扇区包含的代码只读前数百个数据块(当然,依赖于内核的大小)到预定的内存位置。Linux引导软盘上,没有系统,内核存在连续的扇区中,因为这样简化了引导过程。
软盘引导Linux
Linux加载后,它初始化硬件和设备驱动程序,然后运行 init。init可启动其他进程以允许用户登录并做其他事情。这部分的细节在下面讨论。
为了关闭一个Linux系统,首先所有进程被告知结束(这使他们关闭所有文件,完成必要的其他事情,使之整齐地结束),然后unmount 文件系统和交换分区,最后打印可以关掉电源的信息到控制台。如果没有遵循正确的过程,可怕的事情可能发生。最重要的文件系统缓冲Cache可能没有回写,这意味着其中的所有资料将丢失,磁盘文件系统不完整,并可能不可用。
硬盘引导
从硬盘引导时,主引导记录的代码检查分区表(也在主引导记录区中),确认活动分区(标记为可引导的分区),从该分区读引导扇区,然后启动该引导扇区的代码。该分区的引导扇区的代码与软盘所做的相同:从该分区读入内核并启动。但细节不同,因为一般只给内核映像做一个单独的分区是没什么用的,所以分区引导扇区中的代码不能只顺序地读磁盘,它必须找到文件系统并把它们放在哪些扇区中。有几个方法可解决这个问题,但最通常的方法是使用GRUB。
用GRUB引导时,它读入并引导默认内核。也可以设置GRUB,使之能引导若干个内核之一,甚至其他操作系统。也可以在引导时让用户选择引导哪个内核或操作系统。
对比
从软盘和硬盘启动各有优势,但通常从硬盘启动较好,因为这避免了关于软盘的冲突 ,而且快速。然而,安装相同从硬盘启动可能有更多的麻烦,因此很多人先用软盘引导,然后当系统工作很好后,再安装GRUB从硬盘引导。
Linux内核被读入内存后,才代表真正启动了Linux,概述如下:
Linux内核是被压缩安装的,所以它首先得解压自己。内核映像开头包括一个解压的小程序。
然后,内核检查还有什么其他硬件(硬盘、软盘、网卡……),并配置适当的设备驱动程序。同时,输出查找结果的资料。例如,我引导时得到类似如下的资料。
Loading Linux.
Console: colour EGA+ 80×25, 8 Virtual consoles
Serial driver version 3.94 with no serial options enabled
tty00 at 0x03f8 (irq = 4) is a 16450
tty01 at 0x02f8 (irq = 3) is a 16450
lp_init: lp1 exists (0), using polling driver
Memory: 7332k/8192k available (300k kernel code, 384k reserved, 176k data)
Floppy drive(s): fd0 is 1.44M, fd1 is 1.2M
Loopback deVice init
Warning WD8013 board not found at i/o = 280.
Math coprocessor using irq13 error reporting.
Partition check:
hda: hda1 hda2 hda3
VFS: Mounted root (ext filesystem).
Linux version 2.4.18-12Thiz (root@haven) 05/01/2002 14:12:20
精确的文字输出在不同系统上有所不同,这依赖于硬件、Linux版本及其配置。然后内核试图装载根文件系统。如果根系统装载失败,例如因为你忘了在内核中包含相关的系统驱动程序,内核将失败,系统停止。根文件系统通常被只读模式装载(这可用与位置相同的方法)。这可使文件系统在装载时被检查。然后,内核在后台启动程序 init(位于/sbin/init),它的进程号是1。init可以做许多启动工作,它至少要启动一些必要的后台守护程序。
init切换到多用户模式并启动getty,提供虚拟控制台和链表线。getty 是一个让用户通过虚拟控制台和链表终端登录的程序。init还可能启动一些其他程序。至此引导完成,系统启动并正常运行。
关闭Linux系统时,遵循正确的过程是很重要的。否则,文件系统可能损坏,文件可能变得杂乱。这是因为Linux使用磁盘缓存,并不立即将资料写到磁盘,而是间歇地回写。这极大地改善了性能,但同时也意味着如果你只是关闭电源,Cache可能保留着大量资料,而磁盘上的数据可能不是一个全部的正在工作的文件系统(因为有些数据已经回写到硬盘,而有些没有)。
另一个不能直接关闭电源的原因是:在多任务系统中,后台可能运行着很多东西,关闭电源可能损失惨重。使用正确的关机顺序,可以保证所有的后台进程得以保存它们的数据。
正常关闭Linux系统的命令是shutdown 。它通常使用两种方法之一:
如果系统只有你一个用户,使用shutdown 的通常方法是退出所有运行程序,从所有虚拟控制台注销,用root登录(如果你已经是root,当然不必再注销、登录,但应该换到根目录,以免由于卸载出现问题),然后运行命令shutdown -h now(虽然单用户时一般不必要,但如果需要一个延时,用一个加号加一个表示分钟的数目代替now)。
如果系统是多用户,使用命令shutdown -h +time message。time是到系统停止的分钟数,message是告知所有用户系统关机原因的短信息。
# shutdown -h +10 ‘We will install a new disk. System should
> be back on-line in three hours.’
上面的命令警告所有用户,系统将在10分钟后关闭,他们最好保存资料,否则将丢失数据。警告将显示在所有登录的终端上,包括所有的xterm上:
Broadcast message from root (ttyp0) Wed Aug 2 01:03:25 2002…
We will install a new disk. System should
be back on-line in three hours.
The system is going DOWN for system halt in 10 minutes !!
警告在系统关闭前将自动重复数遍,随着时间的流逝,间隔越来越短。当关闭系统真正开始时,所有文件系统(除了根)被卸载,所有用户进程(如果有人还未注销)被终止,守侯进程被关闭,所有东西都停下来。此后,init显示一条资料告知你可以关掉电源了。有时(虽然在任何好的系统上极少出现),系统可能不能正常关闭。例如,内核紊乱、崩溃等不正常情况,可能无法键入任何命令,因此正常关机可能有些困难,这时只能直接关机。问题可能没那么严重,比如,有人误动了你的键盘,内核和update程序还在正常运行,等待一些时间可能使update有机会将缓冲Cache中的资料回存硬盘,然后再直接关机。
重新启动就是完全关闭系统,关掉电源,然后再打开。简单方法是用shutdown重新启动系统而不是仅停止系统。这要使用shutdown的-r选项,例如命令shutdown -r now。许多Linux系统在按【Ctrl+Alt+Del】键时运行shutdown -r now。这是可设置的,比如在多用户系统中设置一定的延时也许更好。如果是谁都能接触到的系统,那么最好设置为【Ctrl+Alt+Del】无效。