怎样快速启动Linux系统?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了怎样快速启动Linux系统?相关的知识,希望对你有一定的参考价值。

是红帽版本的

Linux需要重新启动是少有的。可是一旦需要,Linux启动常常是缓慢的。幸好有一些加速的办法。其中一些方法不太难。咱们瞧一瞧吧。

  #1: 撤消多余的服务

  根据机器的用途,很多服务是不需要的。要是Linux只用作桌面,就不需要sendmail、httpd和另外许多服务。如果你的服务器只是Web服务器,也可以关掉许多服务。为此,可转到管理菜单,检查服务项目。只需撤消所有不想启动的服务选项。

  #2: 撤消多余的内核模块

  假如你的桌面连接到以太网,就不需要装载无线内核模块。这是较为困难的任务,可能需要重新编译内核,而编译内核不是可以轻松担当的工作。为此,你大概需要内核源代码。接着,按照编译内核的标准步骤进行。不同在于你要搜查系统,撤除所有不需要的模块。

  查明系统中当前安装和运行的内核模块的最好方法是安装Bootchart。它不仅会给你一个适宜的模块清单,而且还会说明系统启动过程中发生的事情。还可以发出命令:chkconfig –list | grep 3:on,弄清楚正在运行什么服务。一旦知道装载了什么不需要的模块,就可以在内核重新编译期间将其移除。只要这样处理,编译的内核就完全适合你的体系结构。

  #3: 使用轻型窗口管理器代替GNOME或KDE

  我插入小脚印窗口管理器的原因是——它们大幅度减少图形(界面)启动时间。代替不得不额外等待启动GNOME或KDE的30到60秒,为什么不等待用于启动Enlightenment或者XFCE的2到10秒呢?它们不仅节省启动时间,还会节省内存并解救处理臃肿软体(bloatware)这种令人头痛的事。

  #4: 使用基于文本的登录而不是图形登录

  我的大多数Linux机器启动run level 3而非run level 5。这个运行级别将停在文本登录模式,我就在这个地方登录并发出startx命令,开始选择桌面。图形登录模式做两件事:增加装入时间并引起头痛的问题即试图从拙劣的X windows挣脱出来。

  #5: 使用轻型发行版

  不要装载重型的Fedora,为什么不试一下Gentoo、Arch或Puppy Linux呢?这些较小的发行版的启动时间比更加臃肿的Fedora(甚至Ubuntu)要快很多。在较大的发行版中,OpenSuSE声称启动最快,但我还没有亲自试验。在最新的Fedora和Ubuntu之间,Ubuntu击败Fedora的启动时间(而且是即开即用)。

#6: 使用Open Bios

  要是你相当聪明能干,准备升级PC固件,可以考虑迁移到开源BIOS。一个附加说明,使用开放固件允许Linux启动时真正初始化硬件(而不依赖BIOS)。最重要的是,许多开放BIOS可以设置满足机器的特殊需要。如果不走开放BIOS之路,至少也可以设置BIOS不寻找不存在的软盘驱动器,即直接启动第一个硬盘驱动器(首先不是CD驱动器)。

  #7: 回避DHCP

  如果你工作在地址租约不是问题的家庭网络(或者小型企业网络)上,那么,机器就用静态IP地址。这将使机器不必出外访问DHCP服务器来获得IP地址。如果采取这种途径,就要确保配置文件/etc/resolve.conf也表达你的DNS服务器地址。

  #8: 热插拔可免就免

  热插拔是指允许把新设备插上电源并立即使用的系统。如果你知道你的服务器不需要这种系统,就删除它。这将减少启动时间。在许多系统上,热插拔消耗大量启动时间。排除热插拔将发生的变化取决于你所用的发行版。注意:就绝大部分而言,udev已经取代热插拔。但如果你还在运行老一点的发行版,这样做还是适合的。

  #9: 要是真的大胆无畏,可尝试一下initng

  initng系统充当sysvinit系统的替换物,并承诺彻底减少类UNIX操作系统的启动时间。如果你愿意了解运行中的initng系统,可以试一试Pingwinek LiveCD。

  #10: 利用Debian具有的代码

  要是正在使用Debian,就有一行可用来将你的启动脚本转换成并行运行的简单代码。如果检查一下/etc/init.d/rc脚本,就会看到:大约在24行有CONCURRENCY=none。把这一行改为CONCURRENCY=shell,你有可能目睹启动时间的减少。
参考技术A 在DOS下,有一种简单快速启动Linux的方法,那就是load Linux。loadlin.exe是DOS下的可执行程序,它可以在纯DOS环境下迅速启动Linux,而且无需重启计算机,通常我们可以在光盘的“/kernels”目录下找到这个程序。如果不知这个程序被放置于安装盘的何处,可以使用“find -name loadlin*”命令来寻找。找到之后将其复制到DOS分区中,同时还需要复制一份你所使用的Linux内核文件。可以通过Windows直接从光盘复制,也可在Linux环境下使用“mcopy”命令将文件复制到DOS分区;接着再编写一个名为“Linux.bat”的批处理文件,文件内容如下:c:loadlin c:vmlinuz root=/dev/hda1 ro(我们假设loadlin.exe和vmlinuz这两个内核文件都在c盘根目录下,“root”为Linux的根设备,而且Linux处于硬盘第一分区,所以设备名为“/dev/hda1”,“ro”意为readonly)。以后在DOS下要启动Linux时,运行“Linux.bat”就可以了。 参考技术B 使用基于文本的登录而不是图形登录不使用图形窗口直接输代码速度杆杆的几秒钟搞定

Linux系统快速启动方案

=========================        基本常识       =========================

Linux系统基本启动流程:

1、 CPUROM(如果有的话)的0x0地址开始读取代码,执行loader

2、 Loader初始化ram,从rom中拷贝ubootkernel的镜像到ram的指定地址并执行;

3、 Uboot(如果有)拷贝kernel镜像和dtb文件到ram的指定地址,并运行kernel

4、 设置bootargs会被覆盖,kernel启动;

5、 Kernel自解压;

6、 Kernel初始化;

7、 Kernel加载内置驱动程序,启动硬件设备;

8、 加载文件系统,读取并执行/etc/inittab.

 

 

=========================      快速启动原理     =========================

一、 基本原理

1、 硬件IO时间;

2、 流程精简;

3、 内核精简;

 

二、 启动流程分析

1、 0x0,一级loader,配置ram à必须;

2、 拷贝ubootkerneldtbram à必须,从ROM读值,IO时间;

3、 Uboot(如果有)拷贝kerneldtb à可去除,直接跳过;

4、 设置bootargskernel启动; à非必须,不占IO时间;

5、 Kernel自解压; à可精简,但会加长2IO时间;

6、 Kernel初始化; à必须;

7、 Kernel加载内置驱动程序,启动硬件设备; à可精简,占大量IO时间;

8、 扫描ROM à可去除;

9、 挂载文件系统; à必须,但为了8,可调整到2

10、 读取并执行/etc/inittab. à必须;

 

三、 基本思路

1、 Loader

  1. Loader存在的目的就是为了引导系统;
  2. 除非必要,不需要loader来驱动硬件,否则linux就没有存在的必要;

2、 Kernel

  1. 必要的常识:Kernel的启动只与CPUram有关;
  2. Kernel内嵌驱动,是为了应对固件挂载前必须要做的硬件IO操作;

3、 文件系统

  1. Kernel启动时,文件系统不一定要从rom中读取,也可以在ram中读取;
  2. Romloader中已经能够使用,可以趁这个时候把需要的东西一次性读出,没有必要占用kernel启动的宝贵时间;
  3. 为了加速loader加载文件系统的速度,文件系统又可分为通用部分(<3mb)、固件部分,由kernel中的cramfs驱动加载启动文件系统,先完成启动任务,再从启动文件系统中加载rom设备的驱动,再加载固件文件系统;

 

四、 调整后的启动流程

1、 0x0,一级loader,配置ram 

2、 拷贝kernel(精简),dtb,文件系统镜像(精简)到ram

3、 设置bootargskernel启动; 

4、 Kernel自解压;

5、 Kernel初始化;

6、 Kernel加载必须的驱动程序备;

7、 挂载通用文件系统;

8、 读取并执行/etc/inittab

9、 挂载固件,包括驱动程序、额外的应用软件及LIB

 

 

=========================      快速启动配置     =========================

一、 精简loader

思路:

1、 Loader的目的是为内核准备启动的条件;

2、 Loader跳过准备运行环境的步骤,直接加载内核即可;

方法:

注:各大厂商的bootloader千差万别,只能介绍大概的办法

1、 如果官方工程有跳过uboot的方法,那么直接采用这种方法;

2、 1不可取,则删改uboot代码,在进入uboot,硬件初始化结束后,不进行uboot用户环境的初始化,直接使用源代码加载和启动镜像;

效果:bootloader过程耗时减少;bootloader体积缩小;

 

二、 精简kernel

思路:只保留启动所必须的驱动程序即可,如cramfs的读写驱动,音频驱动(开机音乐),其余驱动做成ko文件,放到文件系统中;

方法:

1、 make ARCH=arm menuconfig,砍掉不会用到的驱动;

2、 启动时不需要的,但应用程序需要的驱动程序,设置为module,从内核剥离,;

3、 Busybox必须提供insmod功能;

效果:内核体积缩小,loadder加载kernel的时间缩短,kernel解压缩时间缩短,kernel启动到挂载文件系统的时间缩短;

 

三、 精简rootfs(即制作通用部分)

思路:

只保留:1busybox2、通用的/etc配置文件;3、加载固件所需的驱动程序(rom相关);4、启动任务所需要的文件(比如音频播放器);5、相关运行库;使用cramfs打包,体积约2.4mb

效果:该文件系统可以直接在ram中运行,可以延迟加载rom驱动;

 

四、 制作固件

1、 剩余的所有文件全部封装到固件系统中(ext4格式或ubi格式);

2、 但需要注意的是固件的/etc中需要有一个rc.local文件,当rootfs中定制的任务完成后,调用该文件启动固件的任务;

3、 为了保持系统的正常运行,原/etc中的rcS文件在挂载固件后,要添加额外操作:

# 挂载固件

Mount /dev/*** /mnt

# 用固件的etc覆盖通用的etc,应用固件的配置及恢复写权限

Mount /mnt/etc /etc

# 用固件的var覆盖通用的var,恢复读写权限

Mount /mnt/var /var

# 扩展lib搜索范围到固件的/lib/usr/lib,保证程序正常运行

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/mnt/lib:/mnt/usr/lib

# 执行固件的启动配置脚本

/etc/init.d/rc.local

以上是关于怎样快速启动Linux系统?的主要内容,如果未能解决你的问题,请参考以下文章

Linux系统快速启动方案

linux如何添加服务为系统服务快速启动或关闭

基于ARM嵌入式 Linux 快速启动

嵌入式linux系统快速启动优化的方法

嵌入式linux系统快速启动优化的方法

Ubuntu 14.04 LTS中怎样快速显示桌面