系列文章: http://www.ibm.com/developerworks/cn/views/linux/libraryview.jsp?search_by=%E5%AD%A6%E4%B9%A0+linux+101
从 BIOS 到运行 Linux 系统html
引导顺序linux
在咱们深刻了解启动加载程序(好比 LILO 和 GRUB)以前,先来重温一下 PC 是如何启动或引导 的。名为 BIOS(表示 Basic Input Output Service)的代码存 储在 ROM、EEPROM 或闪存等非易变 (non-volatile) 内存中。当启动或重启 PC 时,会执行该代码,并执行开机自检 (Power-On Self Test, POST) 来检查机器。它还会肯定可用移动存储设备或固定存储设备中的引导驱动器,而后从该驱动器上的 Master Boot Record (MBR) 加载第一扇区。引导驱动器能够是传统硬盘驱动器、固态驱动器、USB 记忆棒 (stick) 或驱动器、或者带有可移动媒介(好比磁盘、CD 或 DVD)的驱动器。本文主要关注硬盘驱动器,但其余类型的存储设备的引导进程均与硬盘驱动器类似。算法
正如文章 “学习 Linux,101:硬盘布局” 所描述的,由于 MBR 还包含分区表,因此 MBR 中的可执行代码小于 512 字节,这个代码量不算大。注意,每一个磁盘(即便是软盘、CD、DVD 或者 USB 记忆棒之类的固态设备) 的 MBR 中均包含一个可执行代码,即便这个代码只能用于显示一条消息,好比 "Non-bootable disk in drive A:(驱动器 A 中没有可引导磁盘:)"。这个由 BIOS 从第一扇区加载的代码称为第一阶段启动加载程序 或阶段 1 启动加载程序。 shell
MS DOS、PC DOS 和 Windows® 操做系统所使用的标准硬盘驱动器 MBR 会检查分区表,以查找主分区上标记为 active 的引导驱动器,加载该分区的第一扇区,而后将控制权交给已加载的代码。这个新代码也称为分区引导记录。分区引导记录其实是阶段 1 的另外一个启动加载程序,但它只能从分区加载一组块。该新组块中的代码称为阶段 2 启动加载程序。MS-DOS 和 PC-DOS 使用的阶段 2 加载程序直接继续加载操做系统其他部分。以上就是操做系统启动并运行的引导进程。安全
这个引导进程对于单操做系统很适用。可是,若是您想要使用多个操做系统,好比 OS/二、Windows XP 和 3 个不一样的 Linux 发行版,那么会出现什么样的状况呢?您能够 使用一个程序(好比 DOS FDISK 程序)来更改活动分区并从新启动,但这种方法比较笨拙。此外,一个磁盘只能拥有 4 个主分区,而标准 MBR 只能拥有一个主分区;系统不能从逻辑分区引导。但咱们假设的示例提到了 5 种操做系统,每一个系统都须要一个分区。bash
该问题的解决方案是使用一些特殊代码,容许用户选择引导哪一个操做系统。此类程序包括:服务器
很明显,若是可以将系统控制权交给某个包含 512 字节以上代码的程序来完成其任务,那么支持从逻辑分区引导或从位于引导驱动器以外的分区引导应该不太难。上述解决方案都支持这些可能性,这是由于它们都能 从任意分区加载引导记录,或者是由于它们都对启动引导过程须要加载哪一个或哪些文件有所理解。网络
链式加载jsp
当一个引导管理器得到控制权时,它能作的一件事就是加载另外一个引导管理器。这种现象称为链式加载 (chain loading), 一般发生在位于主引导记录 (MBR) 中的引导管理器加载一个分区引导记录中的启动加载程序的时候。当一个 Linux 启动加载程序被请求引导一个 Windows 或 DOS 分区时,或者当一个系统的 Linux 启动加载程序被请求加载另外一个系统的启动加载程序时,几乎老是须要进行链式加载。例如,您可能须要使用一个分区中的 LILO 链式加载另外一个分区中的 GRUB,以便访问该分区中的 GRUB 菜单。ide
接下来咱们要关注的是 LILO 和 GRUB,由于它们是大多数 Linux 发行版包含的启动加载程序。LILO 的历史长一些,而 GRUB 比较新。原始 GRUB 如今已成为 GRUB Legacy,GRUB2 正处于开发中,它是由 Free Software Foundation 赞助(请参见 参考资料 了解相关的详细信息)。咱们将简要讨论 GRUB2,阐述 GRUB 和 GRUB2 之间的主要区别,以及两者如何可以共存。对于本文余下部分,咱们假设 GRUB 是指 GRUB Legacy,除非上下文明确表示为 GRUB2。LILO 也有一个新版本,称为 ELILO(其设计意图是用于引导使用 Intel 而非使用 BIOS 的 Extensible Firmware Interface (EFI)。请参见 参考资料 了解关于 GRUB2 和 ELILO 的其余相关信息。
您的发行版的安装过程可能支持选择设置哪一个启动加载程序。GRUB 和 LILO 都支持大多数小于 2TB 的现代磁盘,但有些发行版(最著名的是 Fedora)再也不包含 LILO。别忘了,磁盘技术已经飞速发展,所以您应该老是确保所选的启动加载程序、Linux 发行版(或其余操做系统)以及您的系统 BIOS 适用于您的新磁盘。不然,就有可能致使数据丢失。一样,向现有系统添加新发行版时,可能须要确保您的 MBR 中拥有最新的 LILO 或 GRUB。若是您打算从 LVM 或 RAID 磁盘引导,也须要拥有比较新的 GRUB 或 LILO 版本。
LILO 和 GRUB 中使用的阶段 2 加载程序容许从几个操做系统或版本中选择其中之一。可是,LILO 和 GRUB 差异很大:只要升级内核或对系统进行其余更改,就须要使用一条命令从新建立 LILO 引导设置;而 GRUB 支持经过一个可编辑配置文本文件来完成这个任务。GRUB2 也须要从一个一般存储在 /etc 中的配置文件进行一个重构。
下面小结 PCs 的引导过程:
您的系统应该可以安装两个流行启动加载程序的其中一个:LILO (LInux LOader) 或 GRUB (GRand Unified Boot loader)。您应该可以使用所选的启动加载程序按前面描述的方式执行引导。若是您想回顾启动加载程序安装或基本引导过程,请参阅配套文章 “学习 Linux,101:引导程序”。
能够采用如下方法影响您的系统引导过程:
GRUB 配置文件默认为 /boot/grub/grub.conf 或 /boot/grub/menu.lst。若是两者同时存在,那么一个一般是另外一个的符号连接。清单 5 展现了上面用于 LILO 的系统的一个示例。注意,为了便于阅读,咱们已将三个内核定义语句分割为多个行。
# grub.conf generated by anaconda # # Note that you do not have to rerun grub after making changes to this file # NOTICE: You do not have a /boot partition. This means that # all kernel and initrd paths are relative to /, eg. # root (hd1,12) # kernel /boot/vmlinuz-version ro root=/dev/sdb13 # initrd /boot/initrd-[generic-]version.img #boot=/dev/sdb13 default=0 timeout=5 splashimage=(hd1,12)/boot/grub/splash.xpm.gz hiddenmenu title Fedora (2.6.35.14-95.fc14.x86_64) root (hd1,12) kernel /boot/vmlinuz-2.6.35.14-95.fc14.x86_64 ro root=UUID=5e22a2e0-5ac2-47d5-b98a-d5b25eff585a rd_NO_LUKS rd_NO_LVM rd_NO_MD rd_NO_DM LANG=en_US.UTF-8 SYSFONT=latarcyrheb-sun16 KEYTABLE=us rhgb quiet initrd /boot/initramfs-2.6.35.14-95.fc14.x86_64.img title Fedora (2.6.35.13-92.fc14.x86_64) root (hd1,12) kernel /boot/vmlinuz-2.6.35.13-92.fc14.x86_64 ro root=UUID=5e22a2e0-5ac2-47d5-b98a-d5b25eff585a rd_NO_LUKS rd_NO_LVM rd_NO_MD rd_NO_DM LANG=en_US.UTF-8 SYSFONT=latarcyrheb-sun16 KEYTABLE=us rhgb quiet initrd /boot/initramfs-2.6.35.13-92.fc14.x86_64.img title Fedora (2.6.35.13-91.fc14.x86_64) root (hd1,12) kernel /boot/vmlinuz-2.6.35.13-91.fc14.x86_64 ro root=UUID=5e22a2e0-5ac2-47d5-b98a-d5b25eff585a rd_NO_LUKS rd_NO_LVM rd_NO_MD rd_NO_DM LANG=en_US.UTF-8 SYSFONT=latarcyrheb-sun16 KEYTABLE=us rhgb quiet initrd /boot/initramfs-2.6.35.13-91.fc14.x86_64.img title GRUB rootnoverify (hd0,1) chainloader +1 title Slackware 13 rootnoverify (hd0,9) chainloader +1 title Windows rootnoverify (hd0,0) chainloader +1 |
GRUB 提供一个菜单界面。它还使用一个经过 MD5 算法加密的密码,而不是 LILO 的纯文本密码。并且,也许最重要的是,对 GRUB 配置文件进行的更改不须要在 MBR 中安装 GRUB。注意,许多发行版均能在更新到一个新的内核级别时自动更新 GRUB(或 LILO)配置文件,可是,若是您安装一个新内核或建立一个新的初始 RAM 磁盘,那么可能须要编辑配置文件。
要为分区配置一个启动条目,GRUB 不须要装载该分区。您将看到 root (hd0,9)
和 splashimage=(hd1,12)/boot/grub/splash.xpm.gz
这样的条目。GRUB 将您的硬盘引用为 hdn,其中 n 是一个整数,从 0 开始。相似地,磁盘上的分区从 0 开始编号。注意:GRUB2 已经更改了磁盘命名方式,所以在 GRUB 和 GRUB2 之间切换时要当心。
所以,在这个系统上,(hd0,0) 表明 Windows 主分区 /dev/sda1,而 (hd0,9) 表明 Slackware 逻辑分区 /dev/sda10。软盘驱动器一般是 (fd0)。若是使用这些参数从一个 bash shell 调用 GRUB,例如,在软盘、USB 密匙或您的 MBR 上安装 GRUB 时,别忘了使用引号将参数引发来。
新版 GRUB 容许使用一个标签 或一个 UUID 来指定 root
元素。要详细了解标签和 UUIDs,请参阅配套文章 学习 Linux,101:控制文件系统的安装和卸载 中的 “标签、UUID 和连接” 小节。
使用 GRUB 引导系统时,常常会看到一个默认选项,如 图 5 所示。若是您不作任何操做,会在配置超时后启动这个选项。这里的超时值单位为秒,所以清单 5 中的 timeout=5
表示一个 5 秒的超时。
若是您按任意键中断默认启动,将会看到一个相似于 图 6 的选项菜单。
GRUB 菜单显示时,可使用光标移动键在列表中上下移动,选择一个引导映像。
若是您想对 GRUB 使用不一样的启动图像,那么您只能使用 14 色 X Window pixmap (.xpm) 文件,并且文件必须被 gzip 压缩。您钟爱的 JPEG 图像将会减小到 14 色时看起来可能有些不一样,所以您须要试验试验,看看效果。可使用诸如 GIMP 的图形程序将图像减小到 14 色,这时应该使用 Image->Mode->Indexed... 菜单动做并将 Maximum number of colors 字段设置为 14。也可使用命令行工具,好比 ImageMagick。清单 6 显示将一个 800x531 原始图像减少到须要的 640x480 像素的一种方法:首先将其缩小到 640 像素高,而后裁剪部分图像,减少画布以匹配图像。而后,咱们将颜色数量减小到 14,将图像格式从 .jpg 转换为 .xpm。最后咱们 gzip 压缩图像。
$ identify woodenbong.jpg woodenbong.jpg JPEG 800x531 800x531+0+0 8-bit DirectClass 210KB 0.000u 0:00.000 $ convert -resize "800x640" woodenbong.jpg woodenbong2.jpg $ convert -crop "640x480+40+0" +repage woodenbong2.jpg grub-in.jpg $ convert -colors 14 grub-in.jpg grub-menu.xpm $ gzip grub-menu.xpm |
与 LILO 不一样,GRUB 的表现形式是一个小 shell。它包含几个命令,容许执行相似操做:在命令执行以前编辑命令、查找并加载配置文件、或者使用 cat
命令显示文件。在菜单中的条目上按 e 键将编辑条目,按 c 键切换到 GRUB 命令行,按 b 键引导系统,按 p 键输入密码,按 Esc 键返回菜单或上一步。还有一个 grub
命令,用于建立一个模拟 shell,能够在其中测试 GRUB 配置或您的 GRUB 命令技能。普通用户模式提供一些基本组件,但许多命令都须要根权限。清单 7 展现如何做为根用户启动 grub shell。这个 grub 命令一般位于 /sbin 或 /usr/sbin 中。
# grub GNU GRUB version 0.97 (640K lower / 3072K upper memory) [ Minimal BASH-like line editing is supported. For the first word, TAB lists possible command completions. Anywhere else TAB lists the possible completions of a device/filename. ] grub> |
在 GRUB shell 中,help
命令提供一列表的命令。help commandname
提供 commandname 命令帮助。清单 8 显示了可用命令和 rootnoverify
命令帮助。
grub> help blocklist FILE boot cat FILE chainloader [--force] FILE color NORMAL [HIGHLIGHT] configfile FILE device DRIVE DEVICE displayapm displaymem find FILENAME geometry DRIVE [CYLINDER HEAD SECTOR [ halt [--no-apm] help [--all] [PATTERN ...] hide PARTITION initrd FILE [ARG ...] kernel [--no-mem-option] [--type=TYPE] makeactive map TO_DRIVE FROM_DRIVE md5crypt module FILE [ARG ...] modulenounzip FILE [ARG ...] pager [FLAG] partnew PART TYPE START LEN parttype PART TYPE quit reboot root [DEVICE [HDBIAS]] rootnoverify [DEVICE [HDBIAS]] serial [--unit=UNIT] [--port=PORT] [-- setkey [TO_KEY FROM_KEY] setup [--prefix=DIR] [--stage2=STAGE2_ terminal [--dumb] [--no-echo] [--no-ed terminfo [--name=NAME --cursor-address testvbe MODE unhide PARTITION uppermem KBYTES vbeprobe [MODE] grub> help rootnoverify rootnoverify: rootnoverify [DEVICE [HDBIAS]] Similar to `root', but don't attempt to mount the partition. This is useful for when an OS is outside of the area of the disk that GRUB can read, but setting the correct root device is still desired. Note that the items mentioned in `root' which derived from attempting the mount will NOT work correctly. grub> |
做为一个实践示例,您能够继续前面的示例,使用 GRUB 的 find
命令查找配置文件。下面,您能够从 (hd1,12)(即 /dev/sdb13) 加载配置文件,如 清单 9 所示。
grub> find /boot/grub/menu.lst (hd0,1) (hd0,5) (hd1,6) (hd1,8) (hd1,9) (hd1,10) (hd1,11) (hd1,12) grub> configfile (hd1,12)/boot/grub/menu.lst Press `ESC' to enter the menu... 24 |
加载配置文件时,可能会看到一个相似于 清单 10 的菜单。记住,这已在 GRUB shell 下完成了,该 shell 模拟真实的 GRUB 环境,不显示启动图像。可是,这很是相似于真正使用 GRUB 启动系统时启动图像上叠加的图像。
注意:若是您的菜单看起来不是这样,并且您的方向键回显为 ^[[A 这样的符号,那么您的 grub 命令版本可能不包含正确的菜单显示所需的 curses 支持。听说,这个问题影响了一些最新 Fedora 发布。在这种状况下,使用 grub shell 进行测试会受到限制。
GNU GRUB version 0.97 (640K lower / 3072K upper memory) +-------------------------------------------------------------------------+ | Fedora (2.6.35.14-95.fc14.x86_64) | | Fedora (2.6.35.13-92.fc14.x86_64) | | Fedora (2.6.35.13-91.fc14.x86_64) | | GRUB | | Slackware 13 | | Windows | | | | | +-------------------------------------------------------------------------+ Use the ^ and v keys to select which entry is highlighted. Press enter to boot the selected OS, 'e' to edit the commands before booting, or 'c' for a command-line. |
假设您突出显示了第三个条目 Fedora (2.6.35.13-91.fc14.x86_64)
,而后按 e 编辑该条目。您将看到相似于 清单 11 的内容。
GNU GRUB version 0.97 (640K lower / 3072K upper memory) +-------------------------------------------------------------------------+ | root (hd1,13) | | kernel /boot/vmlinuz-2.6.35.13-91.fc14.x86_64 ro root=UUID=5e22a2e0-5> | | initrd /boot/initramfs-2.6.35.13-91.fc14.x86_64.img | | | | | +-------------------------------------------------------------------------+ Use the ^ and v keys to select which entry is highlighted. Press 'b' to boot, 'e' to edit the selected command in the boot sequence, 'c' for a command-line, 'o' to open a new line after ('O' for before) the selected line, 'd' to remove the selected line, or escape to go back to the main menu. |
一样,可使用方向键选择要编辑的行,而后按 e 键编辑它。在本例中,咱们假设您在 /dev/sdb14 上安装了 Fedora,而后删除一个较低的分区,好比 /dev/sdb8。这将把 Fedoro 分区下放到 GRUB 标记中的 /dev/sdb13(或 hd1,12)。使用光标键移过 '(hd1,13)' 中的 '3',而后返回去删除 '3',插入 '2' 代替。完成后,按 Enter 键接受更改,或者按 Esc 键取消更改。最后,若是您的确在引导系统,而不是运行 GRUB shell,按 b 键引导系统。
启动到一个 GRUB shell 时,它有足够的能力显示您的文件系统上的文件,它好像做为根用户运行,所以您确实须要使用 GRUB 密码保护您的系统。可是,请记住,若是用户可以从可移动介质启动,就能提供他或她本身的 GRUB 配置。请参阅 GRUB 手册的安全性部分(参见 参考资料),了解关于 GRUB 安全性和其余方面的更多信息。您也能够经过使用 info grub
命令在您的系统上查看它。
内核参数(有时称为启动参数)为内核提供其可能没法独自肯定的硬件参数信息,其目的是覆盖内核以其余方式可能检测到的值,或者避免检测到不适当的值。例 如,您可能想启动到单用户模式来修复系统,以单核模式启动一个 SMP 系统,或者指定一个替代根文件系统。有些内核级别可能须要一个参数来启用 RAM 大于必定量的系统上的大内存支持。
有时须要向引导进程添加参数。例如,您可能想以 \single-user 模式启动系统,这时,您须要添加 S
参数。或者,您可能须要指定一个此前工做的内核,以便可以查明您新构建的自定义内核没法工做的缘由。按 Tab 键查看要引导的映像列表和原始简略 LILO 文本提示 boot:。此时,您能够键入映像名称,或者按 Enter 选择第一个条目。若是须要添加参数,能够在映像名称后面键入参数。清单 12 和 图 7 显示执行下面的操做将看到的画面:按 Tab 键,键入 Slackware13
选择 Slackware 13 映像,添加参数 S 以单用户模式启动,而后按 Enter 键启动引导进程。
Slackware 13 Windows Fedora 14 boot: Slackware13 S |
使用 GRUB,您能够键入另外一组内核命令和 initrd
语句;或者,最好使用前面介绍的编辑功能编辑一个现有条目。例如,添加参数 S 启动到单用户模式。
内核加载完成后,一般会启动 /sbin/init
。这个程序在系统关闭以前将一直运行。它老是被分配进程 ID 1,如 清单 13 所示。
[root@echidna ~]# ps --pid 1 PID TTY TIME CMD 1 ? 00:00:00 init |
init
程序经过运行一系列脚本引导系统的其他部分。这些脚本一般位于 /etc/rc.d/init.d 或 /etc/init.d 中,它们执行一些服务,好比设置系统的主机名、检查文件系统错误、装载其余文件系统、启用网络、启动打印服务,等等。这些脚本执行完后,init
启动一个名为 getty
的程序,在控制台上显示登陆提示。图形登陆屏幕经过一个图形显示管理器处理,好比 GDM for Gnome。
若是您的系统可以加载内核,但没法成功运行 init
,您能够经过指定一个替代初始化程序来尝试修复。例如,指定 init=/bin/sh
将把您的系统引导到一个拥有根权限的 shell 提示,您能够在那里修复系统。
要详细了解可用的启动参数,能够参阅 bootparam
的手册页,也能够浏览 /usr/src/linux/Documentation/ramdisk.txt,这个文件在有些系统上也称为 /usr/src/linux-$(uname -r)/Documentation/kernel-parameters.txt。
显然,若是您每次引导时都必须应用同一组额外参数,那么应该将它们添加到配置文件中。若是使用 LILO,别忘了从新运行 lilo
。
在 Linux 引导进程中,大量消息将被发送到控制台,描述正在引导的内核、系统硬件、以及其余内核相关事项。这些消息一般一闪而过,您可能来不及阅读它们,除非引导进 程因等待处理而出现延迟,好比没法访问某个时间服务器,或者必须检查一个文件系统。随着 Linux Bootsplash 项目(参见 参考资料)的出现,这些消息可能会重叠在一个图形背景上,或者被一个简单的状态栏隐藏或替换。若是您的发行版支持隐藏模式,那么您一般能够经过按一个键(好比 F2)切换为显示引导消息。
若是可以返回并查看内核消息,那么应该感受不错。因为标准输出与进程相关,而内核没有进程标识符,所以系统会将内核(或模块)输出消息保存到内核环缓冲区 中。可使用 dmesg
命令显示内核环缓冲区,会在标准输出上显示这些消息。固然,您能够将这个输出重定向到一个文件以便未来分析,或者将其转发给一个内核开发人员进行调试。清单 14 展现了一些您可能会看到的输出。
[root@echidna ~]# dmesg | head -n 30 [ 0.000000] Initializing cgroup subsys cpuset [ 0.000000] Initializing cgroup subsys cpu [ 0.000000] Linux version 2.6.35.14-95.fc14.x86_64 (mockbuild@x86-07.phx2.fedoraprojec t.org) (gcc version 4.5.1 20100924 (Red Hat 4.5.1-4) (GCC) ) #1 SMP Tue Aug 16 21:01:58 U TC 2011 [ 0.000000] Command line: ro root=UUID=5e22a2e0-5ac2-47d5-b98a-d5b25eff585a rd_NO_LUKS rd_NO_LVM rd_NO_MD rd_NO_DM LANG=en_US.UTF-8 SYSFONT=latarcyrheb-sun16 KEYTABLE=us rhgb quiet [ 0.000000] BIOS-provided physical RAM map: [ 0.000000] BIOS-e820: 0000000000000000 - 000000000009dc00 (usable) [ 0.000000] BIOS-e820: 000000000009dc00 - 00000000000a0000 (reserved) [ 0.000000] BIOS-e820: 00000000000e0000 - 0000000000100000 (reserved) [ 0.000000] BIOS-e820: 0000000000100000 - 00000000bf6b0000 (usable) [ 0.000000] BIOS-e820: 00000000bf6b0000 - 00000000bf6c8000 (ACPI data) [ 0.000000] BIOS-e820: 00000000bf6c8000 - 00000000bf6cb000 (ACPI NVS) [ 0.000000] BIOS-e820: 00000000bf6cb000 - 00000000c0000000 (reserved) [ 0.000000] BIOS-e820: 00000000e0000000 - 00000000f0000000 (reserved) [ 0.000000] BIOS-e820: 00000000fec00000 - 00000000fec10000 (reserved) [ 0.000000] BIOS-e820: 00000000fed1c000 - 00000000fed20000 (reserved) [ 0.000000] BIOS-e820: 00000000fee00000 - 00000000fee01000 (reserved) [ 0.000000] BIOS-e820: 00000000ff000000 - 0000000100000000 (reserved) [ 0.000000] BIOS-e820: 0000000100000000 - 0000000134000000 (usable) [ 0.000000] NX (Execute Disable) protection: active [ 0.000000] DMI present. [ 0.000000] e820 update range: 0000000000000000 - 0000000000001000 (usable) ==> (reserv ed) [ 0.000000] e820 remove range: 00000000000a0000 - 0000000000100000 (usable) [ 0.000000] No AGP bridge found [ 0.000000] last_pfn = 0x134000 max_arch_pfn = 0x400000000 [ 0.000000] MTRR default type: uncachable [ 0.000000] MTRR fixed ranges enabled: [ 0.000000] 00000-9FFFF write-back [ 0.000000] A0000-BFFFF uncachable [ 0.000000] C0000-C7FFF write-protect [ 0.000000] C8000-E3FFF uncachable |
在系统启动后,内核环缓冲区也能够用于一些事件,其中包括某些程序失败和热插拔事件。清单 15 展现了几个与插入一个 USB 内存密匙相关的事件。
[root@echidna ~]# dmesg | tail -n 19 [70259.964953] usb 1-4: New USB device strings: Mfr=1, Product=2, SerialNumber=3 [70259.964957] usb 1-4: Product: Storage Media [70259.964960] usb 1-4: Manufacturer: Sony [70259.964963] usb 1-4: SerialNumber: 0205093006441 [70260.228187] Initializing USB Mass Storage driver... [70260.229608] scsi4 : usb-storage 1-4:1.0 [70260.229749] usbcore: registered new interface driver usb-storage [70260.229752] USB Mass Storage support registered. [70261.232195] scsi 4:0:0:0: Direct-Access Sony Storage Media 0100 PQ: 0 ANSI: 0 CCS [70261.233159] sd 4:0:0:0: Attached scsi generic sg3 type 0 [70261.237931] sd 4:0:0:0: [sdc] 1014784 512-byte logical blocks: (519 MB/495 MiB) [70261.238809] sd 4:0:0:0: [sdc] Write Protect is off [70261.238814] sd 4:0:0:0: [sdc] Mode Sense: 43 00 00 00 [70261.238818] sd 4:0:0:0: [sdc] Assuming drive cache: write through [70261.243554] sd 4:0:0:0: [sdc] Assuming drive cache: write through [70261.243566] sdc: [70261.317555] sd 4:0:0:0: [sdc] Assuming drive cache: write through [70261.317561] sd 4:0:0:0: [sdc] Attached SCSI removable disk [70261.616396] SELinux: initialized (dev sdc, type vfat), uses genfs_contexts |
您的系统启动到运行 /sbin/init
的时点后,如您所见,内核仍然在内核环缓冲区中记录事件,但进程使用 syslog 守护进程来记录消息,日志文件一般位于 /var/log/messages 中。与内核环缓冲区不一样,每一个 syslog 行都有一个时间戳,日志文件在系统可以重启之间持久化。若是引导进程中的 init 脚本阶段出现错误,那么您应该首先检查这个文件。
大多数守护进程的名称都以字母 'd' 结尾。清单 16 展现如何在重启后查看最后几条守护进程状态消息。
[root@echidna ~]# grep "^Sep.*d\:" /var/log/messages|tail -n 14 Sep 7 18:21:08 echidna acpid: waiting for events: event logging is off Sep 7 18:21:12 echidna abrtd: Registered Analyzer plugin 'Kerneloops' Sep 7 18:21:12 echidna abrtd: Registered Analyzer plugin 'Python' Sep 7 18:21:12 echidna abrtd: Registered Reporter plugin 'Logger' Sep 7 18:21:13 echidna abrtd: Registered Analyzer plugin 'CCpp' Sep 7 18:21:13 echidna abrtd: Registered Action plugin 'KerneloopsScanner' Sep 7 18:21:13 echidna abrtd: Registered Reporter plugin 'Bugzilla' Sep 7 18:21:13 echidna abrtd: Registered Reporter plugin 'KerneloopsReporter' Sep 7 18:21:13 echidna abrtd: Checking for unsaved crashes (dirs to check:5) Sep 7 18:21:13 echidna abrtd: Registered Database plugin 'SQLite3' Sep 7 18:21:13 echidna abrtd: Done checking for unsaved crashes Sep 7 18:21:13 echidna abrtd: Init complete, entering main loop Sep 7 18:21:26 echidna auditd[2032]: Started dispatcher: /sbin/audispd pid: 2034 Sep 7 18:21:26 echidna audispd: audispd initialized with q_depth=120 and 1 active plugins |
您还能在 /var/log 中找到更多其余系统程序的日志。例如,您能看到您的 X Window 系统的启动日志。
咱们对经过引导进程引导 Linux 系统的介绍就到此结束了。