首页 > 开发 > 综合 > 正文

开机流程与关机、档案系统

2024-07-21 02:37:13
字体:
来源:转载
供稿:网友

  开机流程
  重要性:
  开机不是只要按一下电源钮而关机只要关掉电源钮就可以了吗?有何大学问? 话是这样没错啦,但是由于 linux 是一套多人多工的作业系统,你难保你在关机时没有人在线上,假如你关机的时候碰巧一大群人在线上工作,那会让当时在线上工作的人马上断线的!那不是害死人了!一些资料可以无价之宝哩!另外,与 DOS 环境不同的是, Linux 在执行的时候,虽然你在画面上只会看到黑压压的一片,完全没有任何画面,但其实他是有很多的程式在背景底下执行的,例如邮件程式、浏览器主机程式等,你假如随便关机的话,是很轻易伤害硬碟及资料传输的动作的!所以在 Linux 下关机可是一门大学问喔!
  流程分析:
  既然开机是很严厉的一件事,呵呵,那我们来了解一下整个开机的过程吧!好让大家比较轻易发现开机过程里面发生错误的地方,与解决之道!不过,由于开机的过程中,那个 Boot Loader 使用的软体可能不一样,例如 Red Hat 7.2 以后已经同时提供 Lilo 与 Grub 这两个开机驱动软体,所以过程或许有点不太相同。在这个网页当中,由于 VBird 比较熟悉 Lilo ,所以未来提到的 Boot Loader 都以 Lilo 为主要依据。那么 Lilo 是什么?!简单的说,他是 LInux LOader 的缩写,就是 Linux 开机时候载入的咚咚就对了!这东西可是控制了你的多重开机的命脉!不过,这一篇先不跟你讲怎么作好多重开机,你应该先将前面这几篇文章看完,对于 Linux 的指令有点概念之后,然后再来设定你的多重开机,会比较轻易一些!并且,当你重新编译核心完毕之后,一定得需要重新安装一次 Lilo 的,那个时候在跟你说说吧 ^_^!因此,这里先不跟你说明啦!底下开始来谈谈 Linux 是如何开机的呢?基本的流程为:
  1. 载入 BIOS 的硬体资讯;
  2. 读取 MBR 的 Kernel Loader (亦即是 lilo, grub, spfdisk 等等)开机资讯;
  3. 载入 Kernel 的作业系统核心资讯;
  4. Kernel 执行 init 程式并取得 run-level 资讯;
  5. init 执行 /etc/rc.d/rc.sysinit 档案;
  6. 启动核心的外挂式模组 (/etc/modules.conf);
  7. init 执行 run-level 的各个批次档( Scripts );
  8. init 执行 /etc/rc.d/rc.local 档案;
  9. 执行 /bin/login 程式;
  10. 登入之后开始以 Shell 控管主机。
  大概的流程就是上面写的那个样子啦,而每一个程序的内容主要是在干嘛呢?底下就分别来谈一谈吧!
  1. 寻找 BIOS 载入硬体资讯:稍微有 PC 硬体经验的人们大概都知道 BIOS ( Basic Input/Output Setup ) 的作用!他是第一个被载入电脑的资料!你主机的 CPU 资料、开机顺序、硬碟大小、晶片组工作状态、PnP 的开启与否、记忆体的时脉等等等...这都记录在 BIOS 当中!所以啦,开机之后,系统会先去找这个东西;
  
  2. 可开机硬碟的 MBR 读取 Kernel loader:再来呢?呵呵!当然就是硬碟的开机资料啰!由于个人电脑的系统在读完 BIOS 之后,会先去读取第一个开机硬碟的第一个磁区(就是 master boot record, MBR 啰!),而这个磁区主要就是在记录开机的资讯!还记得上面提到的 Lilo 吧?他的纪录就是在这里啰!所以啰,这个时候 Lilo 纪录的资讯就会被读出来,系统并依 Lilo 的资讯去不同的系统开机,这也就是多重开机设定的地方啦;
  
  VBird 观点通常我们知道的多重开机软体都是将他们的多重开机资讯写在这里( MBR ),然后在开机时,系统会先找到这个地方,然后再去找相关的开机的设定档啦!例如 Linux 就会去找 /boot 的档案, Windows 就会去找 /boot.ini 等等的!而假如要将这个地方杀掉的话,由于 DOS 的 format 也没有办法将这个资料杀掉的!因此,假如你要将 MBR 的资料去除的话,那么就需要使用 DOS 系统的『 fdisk /mbr 』才行啰!基本上是不建议将 Linux 杀掉啦!因为他的功能很不错耶!为何需要有 loader ?我想,我们得先来探讨一下这个话题才行!要探讨之前先来了解一下,晓不晓得 Windows 与 Linux 的档案格式一不一样?!呵呵!当然不一样对不对,好了,那么再来说一说,请问,你的电脑怎么知道你的硬碟的资料是什么系统?哈哈!那就是 loader 的主要功能啰!在你能使用系统之前,一定需要载入核心对吧!?但是怎样让你的硬体熟悉核心呢?那就是 kernel loader 的主要功能了!所以这里需要提出的是, Linux 的 loader 是可以熟悉 windows 的核心档案的,但是 Windows 却不熟悉 Linux 的核心档案,因此,作为一个多重开机的设定 loader ,就无法使用 Windows 所提供的 loader 啰!由于需要让系统熟悉你的 kernel ,因此,就需要 kernel loader 啦!这样想就对啦!
  3.  
  4. 载入核心( Kernel ):好了,既然知道要使用哪一个作业系统开机了,那么主机就会到该作业系统的磁区之下,将他的核心载入。在 Linux 的系统下,通常开机的核心都摆在 /boot 底下,因此,这个时候的系统就会到 /boot 去寻找相关的核心啰(未来还会再提到这一个地方地!)我们的 kernel 名称通常就是 /boot/vmlinuz-xxxx 的格式!;
  
  5. 核心执行 init 并由 /etc/inittab 取得系统登入状态:核心载入之后,由核心执行的第一个程式就是 /sbin/init 啰!而这个程式第一个目标当然就是确定主机是要以怎样的情况登入!这个时候就必须要以 /sbin/init 来载入 /etc/inittab 的资讯啦!而 Linux 共有几种登入模式呢?嗯!这里似乎有需要说明一下 Linux 有哪些登入的状态!假如你进入 Red Hat 的 /etc/inittab 档案的话( 可以使用 vi 啦 ),你应该会看到如下的资讯:
   开机流程与关机、档案系统
  1. 上面显示的就是目前可以登入的状态了(就是 run-level 啦!),共有 0~6 的登入状态,其中,我们比较常使用的是 3 与 5 , 因为我们需要 Linux 是多人多工的情况,而较常登入的状态就是文字与图形界面啦!所以这里需要设定成 3 或者是 5 ,千万不要设定成 0 或者是 6 喔!不然系统会一直直接重新开机或者是直接关机....预设的系统登入在上面这个表格的最底下一行纪录着!就是『id:3:initdefault 』那一行!注重喔!因为 VBird 预设是以文字界面来登入,所以才会是 3 ,假如你要改成图形界面登入的话(请确定你的 X-windows 没有问题),那么就将 /etc/inittab 里面的上面那一行,将 3 改成 5 即可啰!
  
  VBird 观点假如你有玩过 Windows 的话,那么你在开机的时候假如按下 F8 时,不是会出现一些什么『安全模式』啦、『正常开机』啦或『 MS-DOS 模式』等等的进入 Windows 的状态吗?尤其是当你不正常关机的时候, Windows 预设就会以『安全模式』来启动 Windows 啰!Windows 的『安全模式』几乎不载入一些复杂的模组,让你的 Windows 一定可以开机成功!那么 Linux 的维护模式状态即是使用单人模式( 就是 run_level 为 1 啦!)所以说, Linux 的登入情况是如何呢?呵呵!没错,就是在这里载入的啦!
  2.  
  3. init 的第一个执行内容 /etc/rc.d/rc.sysinit :确定了登入状态之后,再来当然就是需要将主机的资讯给他读进去 Linux 系统啰!而 Linux 系统的第一个资料内容就是 /etc/rc.d/sysinit 这个档案啦!假如你有空进入这个档案去看看的话,会发现这个档案的内容包括了==>设定预设路径( PATH )、设定主机名称、执行 /etc/sysconfig/network 所记录的网路资讯、挂载 /PRoc 这个保存在记忆体当中的主机基本讯息、以及其他几个 Linux 作业系统最基本的几个资讯!他的基本工作是:
  
  o 设定预设路径:( PATH )
  o 设定网路状态:系统会再去读取 /etc/sysconfig/network,并将该档案内的资料,如 NETWORKING, FORWARD_IPV4, HOSTNAME, DOMAINNAME, GATEWARY, GATEWAYDEV 等等的设定读入系统中。

  o 启动系统的置换空间(简单的可以想成是虚拟记忆体): swapping
  o 检查档案系统:这个时候系统会去检查一些可能会存在的目录,例如 /fsckoptions 与 /forcfsck 及 /fastboot 等等的目录,当你的系统有不正常关机的现象时(例如忽然的断电等等),那么 Linux 将会自动的强制去检查 root 的档案系统 ( checking root filesystems )。简单的想一想,就好象是 Windows 系统下,当你不正常关机时,在开机的过程中就会出现扫瞄硬碟的情况相同啦!
  o 周边设定与系统设定的参数 ( /proc ):在 Linux 或者是 Unix 系统中,你会在根目录中发现一个很希奇的磁区,那就是 /proc 啰!其实这个目录是记录在记忆体当中的,每次开机的时候就会被建置起来。他的主要功能是记录主机的一些周边设备的最新资料状况!例如网路周边啦、输入输出周边啦等等的。这个目录下的东西蛮好玩的!不过 VBird 也不是很熟悉就是了!没事的话,不要到里面乱砍喔!会有问题
  o 设定 Plug and Play ( PNP )的一些参数资料;
  o 清除 /etc/mtab ;
  o mount root 及 /proc 档案系统 :好了,将一些资料都设定好之后,当然就是需要将资料写下来啰!这个时候就会将 root 与 /proc 资料给他 mount 上档案系统啦!
  o 决定是否使用模组, 载入模组
  o 检查档案系统 :与前面相同的,当前面的 /fastboot 检查的旗标开启之后,就会以 fsck 检查你的其他磁区啰! ( 使用 fsck )
  o 挂上其它档案系统
  o 设定 console 字型
  o 打开 quota
  o 清除不必要的档案, 如 lock, pid
  o 设定 clock
  o serial port 初始化
  o 将开机讯息经由 dmesg 放入 /var/log/dmesg 中
  
  如此一来,在 /etc/rc.d/rc.sysinit 就已经将基本的系统设定资料都写好了,也将系统的资料设定完整!而假如你想要知道到底开机的过程中发生了什么事情呢?那么就使用 dmesg 就可以知道啰!
  
  4. 启动

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表