使用image文件作为根分区--ubuntu系统

对标题的说明:
使用image文件作为rootfs的含义是什么?
大家知道一般正常的情况都是使用一个分区作为rootfs,来启动系统;
指定分区的方式是在grub里面配置内核的启动参数:root=/dev/sda2
sda2是第二个分区。

那么使用image文件作为rootfs 是什么意思呢?
就是我们先在linux下制作一个类似如下的文件:
文件名:rootfs.img
分区格式:rootfs被格式化成了ext3;里面copy了一个rootfs(怎么cp?怎么格式化?请参考ramdisk的做法)。
大小:8G
存放路径:/dev/sda2(第二分区) /home/sose/rootfs.img
好对,这个image的解释就是这些。
再使用这个文件来作为rootfs启动系统。rootfs里面copy有系统启动文件。

我想让我的rootfs.img能够作为rootfs启动起来,如何实现这个目标?
我现在的/dev/sda2是能够启动的ubuntu系统。
也就是说我的/dev/sda2 下的/boot/目录完整,有vmlinux, initrd, grub等。
现在的难题就是 修改grub,增加rootfs.img选项

首先我们参考正常的grub配置的主要选项:
1.内核参数
linux    /boot/vmlinuz-2.6.32-22-generic root=UUID=82ba8208-48b8-410c-94f
5-24eeb568408b ro   quiet splash
 
2.ramdisk
initrd    /boot/initrd.img-2.6.32-22-generic

我们要改的是内核参数;一般思路都是更改root=/xxx/rootfs.img;
但这个有问题是就是/dev/sda2/xxx/ linux的mount命令不认识;这件事情肯定要分2次完成。
第一步 mount /dev/sda2 第二次mount rootfs.img
这如何是好?

我找到了iso文件作为rootfs的启动配置(grub.cfg);
发现有 boot=  find_iso/file= ? 这样的命令行,这是什么?
我没有见过Linux kernel支持这样的参数,搜索代码也没有发现阿。。。。。

经过网友eric miao 提示说,这是initrd ramdisk的参数。。。
我思考了很久认为 initrd肯定通过读取/proc/cmdline 来获取参数。
我在网络上搜索了很多,没有发现更好的配置方法。。。。
后来干脆看initrd;
将initrd 用gzip解开,再用cpio复出出来;
发现有个init文件;里面有读取cmdline的地方,
有root,boot,loop等参数;
渐渐搜索到了loop参数可以用

vmlinux root=/dev/sda2 loop=/home/sose/rootfs.img
启动成功!!!!

猜你喜欢

转载自blog.csdn.net/mxcai2005/article/details/6448392
今日推荐