Linux的引导过程及原理
1.1:Linux计算机的启动顺序
打开电脑并使其操作系统被加载的过程叫引导。当PC引导后,BIOS做一些测试保证一切正常,然后开始真正的引导。
  启动过程中电脑首先加载了一小段叫 bootstrap loader 的程序,它依次加载和启动操作系统。bootstrap loader 通常存储在硬盘或软盘的固定位置。这两步过程的理由是操作系统大而复
杂,而电脑加载的第一段代码很小(几百字节),以免使固件不必要地复杂化。
  不同电脑的bootstrap也不同,对于PC电脑(它
的BIOS)读软盘或硬盘的第一个扇区(叫引导扇
区),bootstrap loader包含在这个扇区中,它加载位于(和其他磁盘)其他地方的操作系统。
  它选择一个磁盘(通常是第一个软驱,如果无软盘的话,就是第一个硬盘,顺序是可设置的)。然后读第一个扇区,这叫引导扇区;对于硬盘,也叫主引导记录,因为硬盘可以包含多个分区,每个分区都有自己的引导扇区。
引导扇区包含一个小程序(小到可以存入一个扇区),它的责任是从磁盘读入真正的操作系统并启动它。
1.2:Linux启动方式
  可以从软盘或硬盘引导Linux。从软盘启动Linux时,引导扇区包含的代码只读前数百个数据块(当然,依赖于内核的大小)到预定的内存位置。Linux引导软盘上,没有系统,内核存在连续的扇区中,因为这样简化了引导过程。
  Linux加载后,它初始化硬件和设备驱动程序,然后运行
init。init可启动其他进程以允许用户登录并做其他事情。这部分的细节在下面讨论。
  为了关闭一个Linux系统,首先所有进程被告知结束(这使他们关闭所有文件,完成必要的其他事情,使之整齐地结束),然
后unmount 文件系统和交换分区,最后打印可以关掉电源的信息到控制台。如果没有遵循正确的过程,可怕的事情可能发生。最重要的文件系统缓冲Cache可能没有回写,这意味着其中的所有资料将丢失,磁盘文件系统不完整,并可能不可用。
  从硬盘引导时,主引导记录的代码检查分区表(也在主引导记录区中),确认活动分区(标记为可引导的分区),从该分区读引导扇区,然后启动该引导扇区的代码。该分区的引导扇区的代码与软盘所做的相同:从该分区读入内核并启动。但细节不同,因为一般只给内核映像做一个单独的分区是没什么用的,所以分区引导扇区中的代码不能只顺序地读磁盘,它必须到文件系统并把它们放在哪些扇区中。有几个方法可解决这个问题,但最通常的方法是使用GRUB。
  用GRUB引导时,它读入并引导默认内核。也可以设
置GRUB,使之能引导若干个内核之一,甚至其他操作系统。也可以在引导时让用户选择引导哪个内核或操作系统。
  从软盘和硬盘启动各有优势,但通常从硬盘启动较好,因为这避免了关于软盘的冲突,而且快速。然而,安装相同从硬盘启动可能有更多的麻烦,因此很多人先用软盘引导,然后当系统工作很好后,再安装GRUB从硬盘引导。
  Linux内核被读入内存后,才代表真正启动了Linux,概述如下:
  Linux内核是被压缩安装的,所以它首先得解压自己。内核映像开头包括一个解压的小程序。
  然后,内核检查还有什么其他硬件(硬盘、软盘、网卡……),并配置适当的设备驱动程序。同时,
输出查结果的资料。例如,我引导时得到类似如下的资料。
  Loading Linux.
  Console: colour EGA+ 80x25, 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:linux教程第五版pdf下载
  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:
  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】无效。
1.3:GRUB的使用
GRUB是一个多重启动管理器。GRUB是GRand Unified Bootloader 的缩写,它可以在多个操作系统共存时选择启动哪个系统。它可以启动的操作系统包括Linux, FreeBSD, Solaris, NetBSD, BeOS, OS/2, Windows 95/98 /NT /2000。它可以载入操作系统的内核和初始化操作系统(如Linux, FreeBSD),或者把启动权交给操作系统(如Windows 98)来完成启动。Thiz Server默认安
装GRUB,并用它来启动机器。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。