当前位置: 技术问答>linux和unix
如何挂载一个压缩的映像文件?
来源: 互联网 发布时间:2016-09-25
本文导语: 我打算弄一个100MB以内的linux,使用的是slitaz linux为原版进行修改。。。 其grub引导为: kernel (hd0,0)/boot/bzImage initrd (hd0,0)/boot/rootfs.gz 整个系统压缩成rootfs.gz,大小就30MB 我们都知道,这些微型linux 例如puppy等linux...
我打算弄一个100MB以内的linux,使用的是slitaz linux为原版进行修改。。。
其grub引导为:
kernel (hd0,0)/boot/bzImage
initrd (hd0,0)/boot/rootfs.gz
整个系统压缩成rootfs.gz,大小就30MB
我们都知道,这些微型linux 例如puppy等linux,都是通过initrd模式启动的。。。他吧整个系统都弄成一个镜像(rootfs.gz),然后通过initrd启动。。这样子不单可以节约空间(镜像可以是压缩的),而且,启动解压是存放在内存里面。。。。可以说是一个内存上运行的系统。。
问题出现了,在这些内存运行上的系统里面,你所修改的文件,编写的文件,修改过后的etc里面的配置文件,一旦重启,你所修改的东西会无效,因为,重启,依然会解压rootf.gz。。。。
/////////////////////这样子是不行的///////////////////////////////
当然,我们可以讲这个系统完全解压到一个硬盘分区来运行。。不通过initrd,直接启动内核就可以了。。
也就是直接kernel (hd0,0)/boot/bzImage rw root=/dev/hda1 就可以启动了。。
而且,一切的修改,都基于硬盘,也得以保存。。
但是,这样子的系统,却用上了300MB以上的空间。。非常大!!比起原来的30MB大得多了。。。
//////////////////////////////////////
所以,只能继续采用压缩的方式但是,又要解决文件保存。
为了解决自己修改后的文件,或者自己编写的文件得以保存。我修改过rootf.gz里面的etc里面的fstab,把/home。挂载到硬盘上的某个分区里面,那么,当运行这个rootfs.gz系统,在普通用户目录下的文件得以保存,因为是记录在硬盘的分区,,同理,其他一些目录一样可以挂载到其他分区。。。
这个倒是实现了。。。也很简单。。虽然,可以解决普通用户的文件得到保存,其实,同理,root用户也可以。。但是,那些etc目录就应该不能这样子了。。
对于rootfs.gz。。。里面,就/usr这个目录占用了95%的空间,ok
下面我打算采取如下的思路:
除/usr目录采用压缩方式外,其他的目录直接存放在硬盘上:::这样子用的空间很少的。。。。不到10MB,而压缩的/usr也就25MB
接着,由于/usr目录很大,讲之压缩成一个镜像文件。空间不用30MB。。。这样子,整一个系统不到50MB 比300MB的少多了。
然后,系统启动的时候,mount这个镜像文件
这样子,就方案来说应该可以的。。但是,可行性是一个问题。。。
我试着将/usr目录弄成压缩的镜像,通过initrd启动,但是失败了(个人认为,这个方法应该可以,也许是我弄少某些地方)(ps:我看别人的xpud Linux通过这种方式成功挂载opt目录,但是,具体的实现方式找不到。。。)
为了测试可行性,我不弄成一个压缩文件 ,先弄成一个iso镜像文件
在机器启动的时候,自动mount这个iso镜像。。。可是,提示error while loading share library :file too short
如果我不让之mount这个iso镜像的话,可就提示can 't not find ***file
自动mount这个iso镜像后,就提示files too short
我在想,是不是iso不能写的缘故呢??上网找了资料,好像也不管用。
ps:我个人认为,mount这种方式应该可行的。。
因为,我将mount命令是添加在initial里面的,也就是,内核加载完后,就读取这个ini了。。那么,我这个mount是添加第一行。一开始就直接mount了。所以,当系统需要调用/usr里面的文件的时候,不会提示找不到文件的。。。上面的iso加载实践也应该说明这一点。
但是,弄到现在,我的问题还在起步。好像没什么进展。。。郁闷。
其grub引导为:
kernel (hd0,0)/boot/bzImage
initrd (hd0,0)/boot/rootfs.gz
整个系统压缩成rootfs.gz,大小就30MB
我们都知道,这些微型linux 例如puppy等linux,都是通过initrd模式启动的。。。他吧整个系统都弄成一个镜像(rootfs.gz),然后通过initrd启动。。这样子不单可以节约空间(镜像可以是压缩的),而且,启动解压是存放在内存里面。。。。可以说是一个内存上运行的系统。。
问题出现了,在这些内存运行上的系统里面,你所修改的文件,编写的文件,修改过后的etc里面的配置文件,一旦重启,你所修改的东西会无效,因为,重启,依然会解压rootf.gz。。。。
/////////////////////这样子是不行的///////////////////////////////
当然,我们可以讲这个系统完全解压到一个硬盘分区来运行。。不通过initrd,直接启动内核就可以了。。
也就是直接kernel (hd0,0)/boot/bzImage rw root=/dev/hda1 就可以启动了。。
而且,一切的修改,都基于硬盘,也得以保存。。
但是,这样子的系统,却用上了300MB以上的空间。。非常大!!比起原来的30MB大得多了。。。
//////////////////////////////////////
所以,只能继续采用压缩的方式但是,又要解决文件保存。
为了解决自己修改后的文件,或者自己编写的文件得以保存。我修改过rootf.gz里面的etc里面的fstab,把/home。挂载到硬盘上的某个分区里面,那么,当运行这个rootfs.gz系统,在普通用户目录下的文件得以保存,因为是记录在硬盘的分区,,同理,其他一些目录一样可以挂载到其他分区。。。
这个倒是实现了。。。也很简单。。虽然,可以解决普通用户的文件得到保存,其实,同理,root用户也可以。。但是,那些etc目录就应该不能这样子了。。
对于rootfs.gz。。。里面,就/usr这个目录占用了95%的空间,ok
下面我打算采取如下的思路:
除/usr目录采用压缩方式外,其他的目录直接存放在硬盘上:::这样子用的空间很少的。。。。不到10MB,而压缩的/usr也就25MB
接着,由于/usr目录很大,讲之压缩成一个镜像文件。空间不用30MB。。。这样子,整一个系统不到50MB 比300MB的少多了。
然后,系统启动的时候,mount这个镜像文件
这样子,就方案来说应该可以的。。但是,可行性是一个问题。。。
我试着将/usr目录弄成压缩的镜像,通过initrd启动,但是失败了(个人认为,这个方法应该可以,也许是我弄少某些地方)(ps:我看别人的xpud Linux通过这种方式成功挂载opt目录,但是,具体的实现方式找不到。。。)
为了测试可行性,我不弄成一个压缩文件 ,先弄成一个iso镜像文件
在机器启动的时候,自动mount这个iso镜像。。。可是,提示error while loading share library :file too short
如果我不让之mount这个iso镜像的话,可就提示can 't not find ***file
自动mount这个iso镜像后,就提示files too short
我在想,是不是iso不能写的缘故呢??上网找了资料,好像也不管用。
ps:我个人认为,mount这种方式应该可行的。。
因为,我将mount命令是添加在initial里面的,也就是,内核加载完后,就读取这个ini了。。那么,我这个mount是添加第一行。一开始就直接mount了。所以,当系统需要调用/usr里面的文件的时候,不会提示找不到文件的。。。上面的iso加载实践也应该说明这一点。
但是,弄到现在,我的问题还在起步。好像没什么进展。。。郁闷。
|
lz的需求是既要压缩,又要可读写
还不如从减少文件体统本身的体积做起
你这300M迟早都要占地方的,要么占内存,要么占硬盘,最后总是要占好大一片空间的
还不如从减少文件体统本身的体积做起
你这300M迟早都要占地方的,要么占内存,要么占硬盘,最后总是要占好大一片空间的