40秒内启动Linux

来自http://tunps.com/booting-linux-in-40-seconds

By Alessandro Franci |原文地址|翻译:tunpishuang

你是否曾经梦想在一分钟内启动linux呢? 现在梦想可以实现了:在按开启电源的40秒内,你将会拥有个完美的功能齐全的操作系统,和你上次一个登陆登陆系统是一模一样的。
甚至比你你想象中还好,难道不是吗?那么你会说:“疯子~我才不相信你呢”好吧 自己检查一下吧.

是不是很惊讶呢?我打赌你也想要的。很简单,一个词:休眠。

休眠是什么东西?

休眠进程在休眠前把RAM的内容写入swap分区。以后系统会被还原到休眠以前的状态,程序可以继续的执行就好像什么事情都没有发生一样。如上面的视频这样,从休眠中恢复比真正的启动快多了。

开始

首 先你需要一个swap分区:如果你还没有,那就创建一个吧。至少应该和你内存的大小一样大-如果太小,可以增大。你可以使用诸如 parted,fdisk,cfdisk(shell类程序),或者gparted(一个GUI程序)。一旦你创建或者修改完成,你必须激活它:

# mkswap /dev/devX  # swapon /dev/devX

这里的devX是swap分区(比如hda8,sda1等等)。

给内核打补丁

现在该给内核打补丁的时候:这个补丁会给系统加入休眠功能。根据你的内核版本从这个地方下载补丁:

http://www.tuxonice.net/downloads/.

如 果你没有发现针对你内核的补丁,那么该是时候升级一下你的内核了;-).可以忽略子版本,比如:如果你的内核版本是2.6.23.13(我是这个版本), 你可以找到最接近的版本是2.6.23.9。千万别想着给你的内核降级哦!下载2.6.23.9的休眠补丁应用到2.6.23.13的版本上同样会正常的 工作的。

下载完了后添加补丁:

cd /usr/src/linux-2.6.xx.xx  bzcat /path/to/patch | patch -p1

这里的2.6.xx.xx是要补的内核版本。
然后在配置中加入休眠功能:

Power management options  --->
		[*] Power Management support
		[*] Hibernation (aka 'suspend to disk')
		<*>   Enhanced Hibernation (TuxOnIce) (NEW)  --->
    			<*>   File Allocator
    			<*>   Swap Allocator
    			<*>   Compression support
    			<*>   Userspace User Interface support
    			[ ]   Allow Keep Image Mode
    			[*]   Replace swsusp by default
    			< >   Cluster support  --->

    			[*]   Checksum pageset2
    			(25)  Default waiting time for emergency boot messages
    			< >   Test pageflags

请确认加入了DMA引擎的支持:他将极大的提高休眠的速度:

Device Drivers  --->

		DMA Engine support  --->
				[*] Support for DMA engines

同样的开启LZF压缩算法:他将压缩数据使休眠更快:

Cryptographic API  --->
		<*>   LZF compression algorithm

现在像平常一样编译安装它。

升级启动加载器

下一步是修改启动加载器。 你需要增加 "resume=swap:/dev/devX resume2=swap:/dev/devX" (这里的devX是swap分区) .如果你使用的是lilo, 像这样修改 /etc/lilo.conf:

image = /boot/vmlinuz
  root = /dev/hda6
  label = Slackware
  append = "fb=no resume=swap:/dev/hda8 resume2=swap:/dev/hda8"

现在升级启动扇区:

# lilo -v

如果用的是grub,像下面这样修改/etc/boot/meun.lst

title Slackware
root (hd0,5)
kernel /boot/vmlinuz root=/dev/hda6 fb=no resume=swap:/dev/hda8 resume2=swap:/dev/hda8
ro quiet splash
boot

重启动

现在重启动到新的内核,如果一切正常,在启动的时候或者在dmesg的输出中你可以看见一下几行:

TuxOnIce 3.0-rc3, with support for checksumming, usm, compression, swap storage, file storage, userui.
TuxOnIce: Normal swapspace found.

如果没有,检查swap分区是否被设置启用:

$ free|grep Swap
Swap:       497972     115020     382952

如果结果是一串数字0,你肯定是忘记了设立swap分区,创建激活一个swap,重新启动并检查看看。

安装休眠脚本s

现在你需要重下面地址下载并安装休眠脚本:

http://www.tuxonice.net/downloads/,

解压并安装之:

$ tar -xzvf hibernate-script-x.xx.tar.gz
$ cd hibernate-script-x.xx
# ./install.sh

更改休眠文件

安装完成了,你需要修改些文件。像以下下这样修改 /etc/hibernate/hibernate.conf

TryMethod suspend2.conf
TryMethod disk.conf
TryMethod ram.conf

修改 /etc/hibernate/suspend2.conf:

UseSuspend2 yes
Reboot no
EnableEscape yes
DefaultConsoleLevel 1
Compressor lzf
Encryptor none
ImageSizeLimit 0
SuspendDevice swap:/dev/devX
PowerdownMethod 5
FullSpeedCPU yes
Include common.conf

以上的devX是你的swap分区.

查看DMA引擎

查看DMA引擎是否启动

# hdparm /dev/hda|grep dma
 using_dma     =  1 (on)

'hda', 是你的硬盘.如果没有看见,启用它:

# hdparm -d1 /dev/hda

开机自动启动,在 rc.local (/etc/rc.d/rc.local or /etc/rc.local)一下几行:

# Enabling DMA Engine
echo "Enabling DMA Engine on /dev/hda"
hdparm -d1 /dev/hda

开始尝试!

尝试休眠进程:

# hibernate -n

加入的-n的参数知识为了模拟休眠进程,如果执行成功,可以真正测试了:

# hibernate

我建议你使用-r1参数,这样让你系统关机 只是重启动而已,所以:

# hibernate -r1

如果休眠工作正常,系统应该和你最后一个离开后的状态是一样的,如果不正常(比如 声音系统,以太网连接),

你应该加入模块名字到 /etc/hibernate/blacklisted-modules, 如果是音频模块,图形卡模块,和以太网卡模块:

ipw2100
nvidia
snd_maestro3

这个例子你将会把nvdia图形卡驱动,ipw2100无线网卡,Maestro声卡加入“黑名单”。
如果你有其他的问题,你应该访问这个项目主页:

http://www.tuxonice.net/

总结

总的来说,根据你CPU和硬盘的性能,一分钟以内把一个电源关闭的机子转换到一个启动的Linux系统还是挺值得期待的,Enjoy!


[BIO]

 

作者简介:

生于1988,意大利,博洛尼亚。是博洛尼亚大学计算机科学学生,在2007年赢得意大利研究机构第四届“研究语言比赛”第一名。他是个Linux 上瘾者,特别爱好服务和网络世界方面:现在管理它自己创建的网站the-root.org的web和mail服务。2005年在一个数据库软件公司当程序 员;2006年它在他的高中上一节Linux操作系统的课程。从2007年开始,是某私有公司顾问.

 

About tunpishuang

just 4 fun·····
This entry was posted in 未分类 and tagged . Bookmark the permalink.

发表评论

电子邮件地址不会被公开。 必填项已用 * 标注

*

您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>