免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4466 | 回复: 8

关于initramfs的疑问 [复制链接]

论坛徽章:
0
发表于 2010-02-04 12:22 |显示全部楼层
我现在的硬盘分区1(sda1)上有一个文件 这个文件是一个完整的硬盘镜像文件 里面有装好的linux系统 这个文件的格式其实是
虚拟机生成的vmdk文件。现在需要修改initramfs 来达到系统启动的时候把我的这个文件当做根文件系统来启动。我已经写了一个
块驱动把这个文件模拟为一个硬盘 但是前提是sda1首先被mount上,我的驱动才能读取和写入vmdk文件。谁能给点思路么
如何编写我的initramfs中的init脚本 才能达到把这个文件当做根文件系统呢 还是我需要做别的工作

论坛徽章:
0
发表于 2010-02-04 12:38 |显示全部楼层
贴上我的initramfs中的init脚本 initramfs是用busybox做的
#!/bin/sh
mount -t proc proc /proc
mount -t sysfs sysfs /sys
mdev -s
mount /dev/sda1 /mnt
insmod /mnt/vmdk_1.ko name="/mnt/a.vmdk"
mdev -s
mount /dev/sda1 /pengpeng/mnt
mount /dev/vmdka1 /pengpeng   这里的vmdka1是加载上面的驱动之后读取a.vmdk里面的硬盘信息产生的一个虚拟的硬盘分区
exec switch_root /pengpeng /bin/sh
请大侠们指点

论坛徽章:
0
发表于 2010-02-04 12:46 |显示全部楼层
你的 /pengpeng 里面是什么结构? 你的命令报错了? chroot?

BTW: 为什么需要挂vmdk(你这里需要一个vmdk_1驱动)?而不把vmdk转成一个image直接挂。

论坛徽章:
0
发表于 2010-02-04 13:02 |显示全部楼层
回复 3# C.J


    /pengpeng 是一个空的目录
因为我要把这个硬盘上的vmdk文件当做根文件系统,所以我需要写一个驱动来把来解析这个文件,把这个文件模拟为一个硬盘
你说的把vmdk转为image是什么意思 我不大明白 thanks

论坛徽章:
0
发表于 2010-02-04 13:05 |显示全部楼层
回复 3# C.J


    switch_root的时候出段错误 执行sh出错  我觉得这样做也挺玄 可是我想不出别的办法 把硬盘上的一个文件当做根文件系统来启动

论坛徽章:
0
发表于 2010-02-04 13:27 |显示全部楼层
我刚做过一个类似的系统,通过 一个普通 image文件,生成 vmdk文件,然后用vmware启动运行。
所以奇怪,你为什么不直接用Image就好了,为什么你是在硬盘上,又不需要跑虚拟机。为什么要vmdk。可能是你们的需求。

出段错误的话,你可以在本机上,修改好了,再做成镜像。在本机上可以通过 chroot 看文件系统目录结构并进行修改。

论坛徽章:
0
发表于 2010-02-04 13:46 |显示全部楼层
回复 6# C.J


    呵呵 我们可能相反吧 我有一个使用虚拟机生成的vmdk文件 开始的时候主管让写一个内核模块来解析它 最后能mount到一个目录下,查看vmdk文件里面的东西,然后我写了一个块驱动,来解析这个文件。驱动的功能就是读取这个vmdk文件,然后创建一个/dev下的磁盘设备,同时可以看到vmdk里面的各个硬盘分区。比如我现在有a.vmdk  它里面有两个分区一个主分区和一个扩展,我们一般在装虚拟机的时候这样设了。然后我加载我的驱动,指定文件名和文件路径为a.vmdk   这时候就可以再/dev下看到 vmdka vmdka1 vmdka2   这时我mount /dev/vmdka1  /mnt下  就可以再mnt下看到vmdk文件里面的东西了,也就是我们在使用虚拟机装系统时所产生的文件。
而现在呢 主管又提要求让我实现在系统启动时把这个vmdk文件当做根文件系统来启动  我想的是通过initramfs能否实现 所以首先我要把这个文件里面的东西mount到initramfs中的一个目录下, 而我要mount 就需要我的那个驱动能工作,而我要那个驱动工作,就需要找到这个文件,而我要找到这个文件就需要把硬盘mount到一个目录下,所以就产生了前面我写的init脚本 我总有种不祥的预感 呵呵 不大好实现

论坛徽章:
0
发表于 2010-02-04 14:10 |显示全部楼层
也就是说,你已经到了最后一步了:已经挂载成功vmdk虚拟硬盘(/mnt 下面已经出现你希望的文件目录),只是切换进去出错而已,这里就是你要解决的了。那已经没啥问题了吧。这个同 initramfs 没什么关系。

switch_root 你没有指定 init ? 而是指定 sh。 这个对吗? 我不知道。我记得 chroot 是像你这样用的。

论坛徽章:
0
发表于 2010-02-04 14:27 |显示全部楼层
回复 8# C.J


    前面说的挂载上是在一个正常运行的系统当中加载驱动 mount vmdk文件
而现在要做的是在系统启动的时候把vmdk当做根文件系统  你说这个initramfs没关系?请指教,或者我们的理解不同
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP