本节说明当Linux系统引导和关机时发生了什么,应该任何正确完成. 若是没有遵循正确的过程, 文件可能损坏或丢失. 引导和关机概述 开启计算机并致使其操做系统被加载的过程 叫引导. The name comes from an p_w_picpath of the computer pulling itself up from its bootstraps, but the act itself slightly more realistic. 启动过程当中,计算机首先加载了一小段叫 bootstrap loader的程序,它依次加载和启动操做系统, bootstrap loader一般存储在硬盘或软盘的固定的位置. 这2步过程的理由是操做系统大而复杂,而计算机加载的第一段代码很小(几百字节),以避免使固件没必要要地复杂化. 不一样的计算机的bootstrap不一样. 对于PC, 计算机(它的BIOS)读软盘或硬盘的第一个扇区(叫 引导扇). bootstrap loader包含在这个扇区中. 它加载位于磁盘(和其余)的其余地方的操做系统. Linux加载后, 它创始化硬件和设备驱动, 而后运行 init . init 启动其余进程以容许用户登陆和作其余事情. 这部分的细节在下面讨论. 为了关闭一个Linux系统, 首先全部进程被告知结束(这使他们关闭全部文件, 完成必要的其余事情, 使之整齐地结束), 而后unmount文件系统和对换区, 最后打印能够关掉电源的信息到控制台. 若是没有遵循正确的过程, 可怕的事情可能发生. 最重要的, 文件系统缓冲cache可能没有回写, 这意味着其中的全部数据将丢失, 磁盘上的文件系统不完整, 并可能不可用. 近观引导过程 能够从软盘或硬盘引导Linux. 安装和开始指南的安装一节 ([Wel]) 告诉你如何安装Linux, 并按你但愿的方式引导. 当PC引导后, BIOS作一些测试保证一切正常, 而后开始真正的引导. 它选择一个磁盘(一般是第一个软驱, 若是有软盘的话, 不然就是第一个硬盘, 若是安装了的话; 顺序是可设置的). 而后读第一个扇区, 这叫引导扇; 对于硬盘, 也叫主引导记录, 由于硬盘能够包含多个分区, 每一个分区都有本身的引导扇. 引导扇包含一个小程序(小到能够存入一个扇区), 它的责任是从磁盘读入真正的操做系统并启动之. 从软盘启动Linux时, 引导扇包含的代码只读前数百个数据块(固然, 依赖于核心的大小)到预约的内存位置. Linux引导软盘上, 没有文件系统, 核心存在连续的扇区中, 由于这样简化了引导过程. 固然, 使用LILO(LInux LOader)能够从文件系统引导. 从硬盘引导, 主引导记录的代码检查分区表(也在主引导记录扇区中), 确认活动分区(标记为可引导的分区), 从该分区读引导扇区, 而后启动该引导扇区的代码. 该分区的引导扇区的代码作与软盘所作的相同: 从该分区读入核心并启动. 但细节不一样, 由于通常只给核心映象作一个单独的分区是没什么用的, 因此分区引导扇中的代码不能只顺序地读磁盘, 它必须找到文件系统把它们放在哪些扇区中. 有几个方法解决这个问题, 但最一般的方法是使用LILO. (关于如何作的细节与这里的讨论无关; 更多的信息请看LILO文档, 它很全面) 用LILO引导时, 它读入并引导缺省核心. 也能够设置LILO, 使之能引导若干个核心之一, 甚至其余操做系统, 也能够在引导时让用户选择引导哪一个核心或操做系统. LILO能够设置为若是有人在引导时按住 alt, shift, or ctrl键 (LILO启动时), LILO将不当即引导缺省的而问用户引导哪一个. LILO能够设置为带一个timeout选项并询问, 当超时时, 就引导缺省核心. META: 除了LILO还有其余的引导载入程序, 如loadlin, 它们的信息将在下一版本中给出. 从软盘和硬盘启动各有优点, 但一般从硬盘启动更好, 由于这避免了关于软盘的争论. 并且快. 然而, 安装相同从硬盘启动可能有更多的麻烦, 所以不少人先用软盘引导, 而后当相同工做很好后, 再安装LILO从硬盘引导. Linux核心被读入内存后, 才真正启动了, 概述以下: Linux核心是被压缩安装的, 因此它首先得解压本身. 核心映象开头包括一个解压的小程序. 若是你有Linux可识别的super-VGA卡, 且支持一些特殊的文本模式(如100列40行), Linux会问你要用哪一个模式. 编译核心时, 可能预约了一个视频模式, 就不会问了. 这也能够用LILO或 rdev 完成. 而后, 核心检查还有什么其余硬件(硬盘, 软盘, 网卡...), 并配置适当的设备驱动; 同时, 输出查找结果的信息. 例如, 我引导时, 获得相似以下信息: LILO boot: 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: hda: hda1 hda2 hda3 VFS: Mounted root (ext filesystem). Linux version 0.99.pl9-1 (root@haven) 05/01/93 14:12:20 精确的文本在不一样系统上不一样, 依赖硬件, Linux版本, 及其配置. 而后核心试图mount根文件系统. 位置可在编译时设置, 或在任什么时候候使用 rdev 或LILO. 文件系统类型自动检测. 若是根文件系统mount 失败, 例如由于你忘了在核心中包含相关的文件系统驱动, 核心将失败, 系统中止(此时没什么可作了). 根文件系统一般被只读mount(这可用与位置相同的方法). 这可以使文件系统在mount上时检查; 检查一个可读写的已mount的文件系统可不是个好主意. 而后, 核心在后台启动程序 init (位于/sbin/init ) (它的进程号是1). init 作许多启动工做. 确切的事依赖于设置; 参见章了解更多信息. 它至少要启动一些必要的后台守候程序. init 而后切换到多用户模式并启动getty ,提供虚拟控制台和串行线. getty 是一个让用户经过虚拟控制台和串行终端登陆的程序. init 还可能启动一些其余程序, 基于设置. 至此, 引导完成, 系统启动并正常运行. 关于关机的更多信息 关闭Linux系统时,遵循正确的过程是很重要的。不然,文件系统可能成为废物,文件可能变成杂乱的。这是由于Linux使用磁盘缓存,并不当即将数据写到磁盘,而是间歇地回写。这极大地改善了性能,但同时也意味着若是你只是关闭电源,cache可能保留着大量数据,而磁盘上的数据可能不是一个所有的正在工做的文件系统(由于有些数据已经回写到硬盘,而有些没有)。 另外一个不能直接关闭电源的缘由是:在多任务系统中,后台可能运行着不少东西,关闭电源可能损失惨重。使用正确的关机顺序,能够保证全部的后台进程得以保存他们的数据。 正常关闭Linux系统的命令是shutdown 。它一般使用2种方法之一。 若是系统只有你一个用户,使用shutdown 的一般方法是退出全部运行程序,从全部虚拟控制台注销,用root登陆(若是你已是root,固然没必要再注销、登陆,但应该换到根目录,以避免因为unmount出现问题),而后运行命令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 1995... 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 !! 警告在系统关闭前将自动重复数遍,随着时间流逝,间隔愈来愈短。 当延时以后关闭系统真正开始时,全部文件系统(除了根)被unmount,全部用户进程(若是有人还未注销)被终止,守侯进程被关闭,全部东西都停下来。此后,init 打印出一条信息告知你能够关掉电源了。此时,也只有在此时,你才能够关闭电源。 有时(虽然在任何好的系统上极少),系统可能不能正常关闭。例如,核心紊乱、崩溃等不正常状况,可能没法键入任何命令,所以正常关机可能有些困难,这是只能直接关机。问题可能没那么严重,好比,有人误动了你的键盘,核心和update 程序还在正常运行,等待一些时间多是个好建议,这能使update 有机会将缓冲cache 中的数据回存硬盘,而后再直接关机。 有人喜欢用sync 三遍来关闭系统,等到磁盘I/O中止,而后在关闭电源。若是没有什么程序运行着,这和用shutdown 等效。然而,它不unmount任何文件系统,可能致使ext2fs的"干净文件系统"标志出问题。这种3遍sync的方法是不推荐使用的。 (In case you're wondering: the reason for three syncs is that in the early days of UNIX, when the commands were typed separately, that usually gave sufficient time for most disk I/O to be finished.) 重启动 重启动就是彻底关闭系统,关掉电源,而后再打开。简单方法是用shutdown 重启动系统而不是仅中止系统。这要使用shutdown的 -r选项,例如命令shutdown -r now。 许多Linux系统在按ctrl-alt-del键时运行shutdown -r now。这是可设置的,好比在多用户系统中设置必定的延时也许更好。若是是谁都能接触到的系统,那么最好设置为按ctrl-alt-del什么也不干。 单用户模式 shutdown命令也可用于切换到单用户模式,这种模式谁也不能登陆,只有root可使用控制台。这对系统通常运行时不能作的系统管理任务颇有用。单用户模式将在章详细讨论。 紧急引导(软)盘 并不是总能够从硬盘引导。例如,LILO设错了,系统可能就没法引导。这时,须要另外一个总能引导的方法。对于典型的PC,多是软驱。 许多Linux distributions容许在安装时产生一张紧急引导盘emergency boot floppy。应该作。然而,有些这样的引导盘只包含核心,and assume you will be using the programs on the distribution's installation disks to fix whatever problem you have。有时这些程序是不够的:例如你可能须要回存你的备份,而备份/回存软件在Linux安装盘里没有。 所以,可能须要本身产生root盘。 Graham Chapman写的Bootdisk HOWTO([Cha]) 包含关于此的指导。固然,你必须记得使你的紧急引导盘和root盘最新。 root盘被mount上时,不能用软驱干其余任何事,所以若是你只有一个软驱可能不太方便。然而,若是你有足够的内存,能够设置引导盘将root盘加载到RAM盘上(为此,引导盘的核心须要特殊设置)。一旦root盘被加载到RAM盘中,软驱就能够用于mount其余盘了。