求助:关于U盘引导安装ubuntu系统
我用U盘安装系统时,引导成功了,但是会报错:
error:invalib file name 'vmlinuz'
error:you need to load the kernel first
我的iso文件在U盘的iso目录中,grub.cfg的内容如下:
menuentry 'Ubuntu 10.10' --class ubuntu --class gnu-linux --class gnu --class os {
loopback loop (hd0,1)/iso/ubuntu-10.10-dvd-amd64.iso
linux vmlinuz boot=casper iso-scan/filename=/iso/ubuntu-10.10-dvd-amd64.iso
initrd (loop)/casper/initrd.lz
}
请各位大虾不吝赐教!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(7)
本帖最后由 kunkka_lu 于 2011-03-08 21:14 编辑
如果想用 u 盘作 Fedora 启动盘, 那必须把 u 盘格式化为 ext4 格式. 我之前把 u 盘格式化成 ntfs 格式, 老是启动失败, 后面把 u 盘的格式改成 ext4, 就可以了.
首先, mount Fedora 的 iso 文件到一个目录:
$ sudo mount /xxx/fedora-14-i386-dvd.iso /mnt -o loop
然后从挂载 iso 文件的根目录的 isolinux 目录下提取 vmlinuz 和 initrd.img 文件拷贝到 u 盘;
制作 Fedora 启动盘要比制作 ubuntu 启动盘的区别在于, 这里要多出一个步骤, 就是把 Fedora iso 根目录下的 images/install.img 也复制到 u 盘里(当然, iso 文件别忘了拷贝到 u 盘里- -).
u 盘启动 Fedora 的 grub.cfg 如下:
set timeout=20
menuentry "Fedora-14-i386-dvd Install" {
insmod ext2
root (hd0,1)
linux /iso/fedora-14-i386-dvd/vmlinuz
initrd /iso/fedora-14-i386-dvd/initrd.img
}
Fedora 启动的时候会自动搜索 iso 文件, 所以不用在 grub.cfg 里写 iso 的路径.
以上的准备工作都作完之后, 重启机器, 选择 Fedora 对应的启动项, 等待一会儿之后会出现一个菜单让你选择要安装哪个语言版本的 Fedora;
选择完语言之后, 继续弹出一个菜单, 让你选择 u 盘所对应的设备节点;
选完节点后别急着敲回车键, 下面还有一个输入框, 提示输入"Directory holding image", 在这个框里输入刚才我们提取的 install.img 放在 u 盘的路径就可以了;
敲下回车键, Fedora 华丽的安装界面就出来了.
本帖最后由 kunkka_lu 于 2011-03-08 21:08 编辑
如果把 vmlinuz 和 initrd.lz 从 iso 文件里提取出来的话, grub.cfg 可以写成这样子:
set timeout=20
menuentry "Ubuntu-10.10-amd64-dvd Install" {
insmod ext2
root (hd0,1)
linux /iso/ubuntu-1010-amd64-dvd/vmlinuz boot=casper iso-scan/filename=/iso/ubuntu-1010-amd64-dvd/ubuntu-1010-amd64-dvd.iso ro
initrd /iso/ubuntu-1010-amd64-dvd/initrd.lz
}
本帖最后由 kunkka_lu 于 2011-03-14 21:59 编辑
$ sudo grub-install --root-directory=/mnt /dev/sdb
这里的 /mnt 指的是将要安装 grub 的 rootfs 的绝对路径, 即是本例 u 盘所 mount 到 pc 的目录; 如果 u 盘有多个分区也不要紧, --root-directory=/要安装的分区目录 就可以了;
/dev/sdb 对应的是 u 盘的设备节点, 而不要写成 /dev/sdb1, 那是 u 盘第一个分区所对应的设备节点;
上面的例子写的 grub.cfg 有点复杂了, 下面这个稍微简单一点:
set timeout=20
menuentry "Ubuntu-10.10-amd64-dvd Install" {
insmod ext2
loopback loop (hd0,1)/iso/ubuntu-1010-amd64-dvd.iso
linux (loop)/casper/vmlinuz boot=casper iso-scan/filename=/iso/ubuntu-1010-amd64-dvd.iso ro
initrd (loop)/casper/initrd.lz
}
"set timeout=20"的意思是设置 grub 在启动的时候所显示的时间为 20 秒;
"insmod ext2" 意思是加载 ext2 模块, 在后面挂载 ramfs 时需要到这个模块;
"loopback loop (hd0,1)/iso/ubuntu-1010-amd64-dvd.iso" 意思是通过 loopback 方式, 相当于设置一个虚拟光驱, 读取第一块硬盘(此时的 u 盘就相当于第一块硬盘)的第一个分区( index 是从1开始的)的根目录下的iso/ubuntu-1010-amd64-dvd.iso, 并把这个 iso 的路径赋给 loop 变量;
"linux (loop)/casper/vmlinuz boot=casper iso-scan/filename=/iso/ubuntu-1010-amd64-dvd.iso ro" 中的 "linux (loop)/capser/vmlinuz" 的中 (loop) 相当于 iso 文件里面的 rootfs , 意思是设置加载 kernel images 的路径为 iso 文件内部的根目录中的 casper/vmlinuz, "boot=casper" 意思是设置 boot 启动方式为 casper, ro 的意思是设置打开这个 iso 文件的方式为 Read Only;
"initrd (loop)/casper/initrd.lz" 和上面的vmlinuz一样, 指明 initrd 的路径.
以下是鄙人制作U盘引导安装ubuntu10.10的过程,有些粗略,还望老鸟指教。
第一步:将grub2安装到U盘
1.apt-get install grub2 //下载grub2到电脑
2.mount /dev/sdb1 /mnt //将u盘挂载到电脑
3.grub-install --recheck --root-directory=/mnt /dev/sdb //将grub2安装到U盘
显示 no error则安装成功
第二步:编辑grub.cfg
1.进入U盘中的/boot/grub/
2.新建一个名为grub.cfg的文件
3.添加以下内容到grub.cfg
set default="2"
set timeout=5
set gfxmode=1024*768
insmod gfxterm
insmod vbe
terminal gfxterm
menuentry 'Ubuntu 10.10' --class ubuntu --class gnu-linux --class gnu --class os
{
loopback loop (hd0,1)/iso/ubuntu-10.10-desktop-i386.iso
linux (loop)/casper/vmlinuz boot=casper iso-scan/filename=/iso/ubuntu-10.10-desktop-i386.iso
initrd (loop)/casper/initrd.lz
}
注:其中linux 后面跟光盘中的kernel路径,initrd后面跟光盘中initrd.gz文件的绝对路劲(一般包含于iso中)
第三步:重启电脑就可以看见grub界面了,选择ubuntu10.10进入ubuntu系统的安
本帖最后由 0602_hua 于 2011-01-06 14:16 编辑
回复 3# taoxie17
囧{:2_163:} ,grub配置错了!修改成这样就可以了 :
menuentry 'Ubuntu 10.10' --class ubuntu --class gnu-linux --class gnu --class os {
loopback loop (hd0,7)/iso/ubuntu-10.10-dvd-amd64.iso
linux (loop)/casper/vmlinuz boot=casper iso-scan/filename=/iso/ubuntu-10.10-dvd-amd64.iso
initrd (loop)/casper/initrd.lz
}
你怎么解决的,跟大家说说!Share一下!
問題已解决,謝謝!