经过摸索,有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
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
==============================