完全在内存上运行linux系统

Ubuntu各种衍生版本
头像
yaska
帖子: 1169
注册时间: 2007-10-28 21:35

完全在内存上运行linux系统

#1

帖子 yaska » 2008-08-19 18:05

这几天研究如何把整个linux系统放到内存上运行,和大家分享一些心得,基础不好,有些概念可能说不清楚。

内存的速度大家都知道,在内存上运行的系统不仅速度快,还可以脱离存储介质,例如光盘启动时,可以把光盘拿出来; u盘启动时,则可以拔下u盘。当然,如果运行的是只读的文件系统,要支持存储数据的话,就需要存储介质了,可以把数据保存到硬盘/u盘上。

经过摸索,有2个办法可以达到目的 :

1 是把整个系统做成initrd. initrd本来就是小文件系统
用cpio把整个系统做成initrd,系统只要2个文件就可以启动了,一个内核vmlinuz,二是initrd.gz。
普通的initrd的主要用途是用来加载一些驱动,并找到真实的文件系统,最后切换根,起到一个中介的作用。而这里的initrd则不切换根了,直接运行/sbin/init。
发行版SliTaz, pudlinux也有一个版本xpud 就是这种方式。
但是initrd太大的话,loader(grub/syslinux)加载要花很长时间,还有个问题就是cpio不是设备,保存数据很麻烦,反正我没想到办法。 :( 那位高手指点指点吧。

2 是在initrd中使用tmpfs技术把压缩的文件系统复制到内存中运行。
tmpfs 是一个文件系统,而它又是使用RAM,可以很好解决在内存中运行,而又支持保存数据。
看下面几行脚本就可以大概了解:

代码: 全选

mkdir /store
mount -t tmpfs -o size=200M  none /store
mkdir /store/iso
 cp -a /iso_dir/*.iso   /store/iso
 /sbin/losetup /dev/loop6  /store/iso/*.iso 
我用第二种方法实现在内存上运行prayaya 精简版,感兴趣的朋友可以到这里下载iso文件:
http://ftp.ubuntu.org.cn/home/yaska/prayaya-804-hack/

用户名:ubuntu
密码:ubuntuftp

qemu/kvm运行看这里:
在启动项按f6, 把quiet splash去掉,加上boot2ram,还可以加上verbose,可以看到整个启动过程。由于iso文件120多M,所以必须最少分配300m内存。

代码: 全选

sudo  kvm -cdrom boot2ram.iso  -m  300
安装到U盘看这里:
http://www.inlsd.org/forum/viewtopic.php?t=313
启动参数加上boot2ram, 把quiet splash去掉,加上verbose可以看到整个启动过程。 同样,在内存大于300m以上机器测试。

保存数据就根据帖子做就可以了。


一些链接:
有关initrd的: http://blog.linux.org.tw/~jserv/archives/001954.html
xpud的站点:http://xpud.org
SliTaz: google吧,很牛的linux系统。
上次由 yaska 在 2008-08-26 22:58,总共编辑 7 次。
头像
adagio
论坛版主
帖子: 22110
注册时间: 2008-02-17 23:47
来自: 美丽富饶的那啥星球

#2

帖子 adagio » 2008-08-19 18:58

关注 :shock:
明天就换大三八!
——8核CPU、8G内存、8T硬盘……
8卡交火,80寸大屏放8个……
IPv8的光纤要8条……

---------------------------------------------------------------------------------
[图片版]新手当自强(续)FAQ
[新手进阶]挂载、fstab、调整linux分区
[图片版]E17桌面环境配置手把手
头像
sinyadvan
帖子: 724
注册时间: 2008-04-02 15:36
来自: O_O

#3

帖子 sinyadvan » 2008-08-19 19:19

子曰:硬盘没发明之前,系统运行在内存里。
方法很有创意,小弟有几点不明白,还望指点。
1. CPU与内存的I/O存取速度最快,系统运行程序时是先从硬盘读取并写入内存执行的。所以拖速度的主要是系统对硬盘的读写。所谓在内存中运行的系统 是不是将文件系统和所有程序先加载到内存?那引导启不很慢?
2.内存掉电数据消失,该写入硬盘的还是要写入。

有一个软件(名字忘了)会跟据用户的使用习惯预加载常用软件和文件到内存,效果应该一样吧。
^o^ && O_O && ^_^
One World|One Dream|One Piece
愛 ^_^ 這個 美麗的世界O_O

本公司专治各种不服、不爽、谩骂、挑衅。
头像
yaska
帖子: 1169
注册时间: 2007-10-28 21:35

#4

帖子 yaska » 2008-08-19 19:27

sinyadvan 写了:子曰:硬盘没发明之前,系统运行在内存里。
方法很有创意,小弟有几点不明白,还望指点。
1. CPU与内存的I/O存取速度最快,系统运行程序时是先从硬盘读取并写入内存执行的。所以拖速度的主要是系统对硬盘的读写。所谓在内存中运行的系统 是不是将文件系统和所有程序先加载到内存?那引导启不很慢?
2.内存掉电数据消失,该写入硬盘的还是要写入。

有一个软件(名字忘了)会跟据用户的使用习惯预加载常用软件和文件到内存,效果应该一样吧。
对,是先把文件系统先加载到内存。 所以引导的时间大多耗在把系统加载到内存这个环节。 启动之后,速度就飞快了。

内存掉电消失,但我用aufs联合了一个可写的空间(文件),这样可以存储数据,重启之后数据还在,当然这个空间(文件)要放到可写的存储设备(硬盘/u盘)上。

试想:在没有硬盘的机器,用一个U盘就可以一台一台打开。
头像
sinyadvan
帖子: 724
注册时间: 2008-04-02 15:36
来自: O_O

#5

帖子 sinyadvan » 2008-08-19 19:34

加油,把它做出来。
这个方案在很少关机、重启的环境下是非常厉害的,效果会很显著。
^o^ && O_O && ^_^
One World|One Dream|One Piece
愛 ^_^ 這個 美麗的世界O_O

本公司专治各种不服、不爽、谩骂、挑衅。
头像
冲浪板
论坛版主
帖子: 7513
注册时间: 2007-05-06 8:19

#6

帖子 冲浪板 » 2008-08-19 19:51

你有那么大内存么?
头像
xiooli
帖子: 6956
注册时间: 2007-11-19 21:51
来自: 成都
联系:

#7

帖子 xiooli » 2008-08-19 19:58

slax就可以好像。
头像
ptptptptptpt
帖子: 3711
注册时间: 2006-09-19 18:16

#8

帖子 ptptptptptpt » 2008-08-19 22:09

yaska 写了:
试想:在没有硬盘的机器,用一个U盘就可以一台一台打开。
我仿佛看见一个人拿一U盘,走过一排排电脑,一个挨一个,都亮了。。。
头像
ptptptptptpt
帖子: 3711
注册时间: 2006-09-19 18:16

#9

帖子 ptptptptptpt » 2008-08-19 22:15

就是重启有点麻烦。

现在的机子 2G以上内存很常见,有搞头!

要是这么用的话,可以对系统结构做些调整,应该会提高些效率
头像
ptptptptptpt
帖子: 3711
注册时间: 2006-09-19 18:16

#10

帖子 ptptptptptpt » 2008-08-19 22:18

希捷会不大高兴 :lol: :lol:
头像
muzuiget
帖子: 1097
注册时间: 2007-12-31 14:57

#11

帖子 muzuiget » 2008-08-19 23:40

SliTaz这个超牛,有搞头。
Parted Magic也是可以运行在内存中,但方法好像不是楼主说的2个方法。楼主去研究研究。
头像
yaska
帖子: 1169
注册时间: 2007-10-28 21:35

#12

帖子 yaska » 2008-08-20 15:42

muzuiget 写了:SliTaz这个超牛,有搞头。
Parted Magic也是可以运行在内存中,但方法好像不是楼主说的2个方法。楼主去研究研究。
Parted Magic以前用过。。哈,这个用来分区和维护电脑的。的确很适合在内存上运行。
头像
ptptptptptpt
帖子: 3711
注册时间: 2006-09-19 18:16

#13

帖子 ptptptptptpt » 2008-08-20 17:13

可以设一台 pxe 服务器,存放系统映像,其它机子通过网络,拷贝映像到内存,启动 —— 新式无盘工作站
头像
lll9p
帖子: 1806
注册时间: 2007-07-18 18:56
联系:

#14

帖子 lll9p » 2008-08-20 22:50

很多小linux发行版都可以这样啊,装在u盘里,启动就整个系统在内存里了,然后拔掉u盘都可以。
lz可以参考以下puppy,slax之类的发行版
头像
yaska
帖子: 1169
注册时间: 2007-10-28 21:35

#15

帖子 yaska » 2008-08-20 22:58

很多小linux发行版都可以这样啊,装在u盘里,启动就整个系统在内存里了,然后拔掉u盘都可以。
lz可以参考以下puppy,slax之类的发行版
谢谢,prayaya 已经实现了。
上次由 yaska 在 2008-08-31 12:36,总共编辑 1 次。
回复