来自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声卡加入“黑名单”。
如果你有其他的问题,你应该访问这个项目主页:
总结
总的来说,根据你CPU和硬盘的性能,一分钟以内把一个电源关闭的机子转换到一个启动的Linux系统还是挺值得期待的,Enjoy!
![[BIO]](http://tunps.com/wp-content/uploads/2011/02/fb47_franci.jpg)
作者简介:
生于1988,意大利,博洛尼亚。是博洛尼亚大学计算机科学学生,在2007年赢得意大利研究机构第四届“研究语言比赛”第一名。他是个Linux 上瘾者,特别爱好服务和网络世界方面:现在管理它自己创建的网站the-root.org的web和mail服务。2005年在一个数据库软件公司当程序 员;2006年它在他的高中上一节Linux操作系统的课程。从2007年开始,是某私有公司顾问.