首页 > 代码库 > grub2引导硬盘安装ubuntu14.04 iso镜像(不需要解压iso)
grub2引导硬盘安装ubuntu14.04 iso镜像(不需要解压iso)
一、写在前面
个人使用的是win7+ubuntu多系统的环境。因为目前正在学习linux环境下的C语言编程,安装了两个版本的ubuntu(12.04和14.04今天还按了一个kylin也不知道好用不)。这篇博文就和大家唠一下如何用grub2安装ubuntu14.04的iso镜像盘。有两点跟大家声明下:一、我是菜鸟,谬误难免,本文只是简单介绍下安装过程,理论的东西大家可以参考我后面给出的参考文献;二、本文不是介绍win7下安装ubuntu的,也不是介绍如何直接在硬盘(需要解压缩iso文件)下安装ubuntu的。本文的方法是利用grub2引导iso镜像盘(有点类似光盘上那个livecd)启动,启动之后想要安装ubuntu或者只是体验下那就可以由你自己决定了。
二、个人对于grub2的一点儿认识
只是想尽快把iso装起的话,可以跳过本部分,直接阅读第三部分”安装过程“。如果你的系统上已经安装了grub2的话,就可以跟我一起来试验引导iso镜像盘启动了。直奔主题,grub工作的流程如下:
编辑grub.d文件夹下脚本和"/etc/default/grub"文件===》运行grub-mkconfig命令,生成grub.cfg配置文件===》update-grub完成设置工作===》重新启动计算机进入启动界面。
首先把今天涉及到的三个重要的文件及文件夹列出来,最重要的当属设置系统启动方式的配置文件“/boot/grub/grub.cfg”,grub正是读取它来控制系统启动方式的。grub2以后可能出于安全性的考虑,不建议直接编辑这个配置文件了(直接编辑的话,一旦运行 sudo update-grub ,对grub.cfg所做的修改将完全丢失),而是通过脚本和另外一个配置文件"/etc/default/grub"间接的生成"grub.cfg"。脚本就位于"/etc/grub.d"这个文件夹,这些脚本最终决定了grub引导哪个系统,到什么地方找到系统内核、镜像文件等(前提是你的系统内核文件、镜像存在),和如何加载操作系统;"/etc/default/grub"这个文件主要控制启动界面的默认启动时间,默认启动哪个系统,和启动界面的显示方式等。总结一下,需要用到的grub配置文件如下:
- /boot/grub/grub.cfg
- /etc/default/grub
- /etc/grub.d
- /etc/grub.d/10_linux
- /etc/grub.d/20_linux_xen
- /etc/grub.d/30_os-prober
- /etc/grub.d/40_custom
- ...
三、安装过程:
- 下载ubuntu的iso镜像,并将其放置到E盘下的download文件夹中(可以放到其他文件夹下,grub2可以允许自由放置,但最好不要放到/boot中。此外linux系统如果"/home"单独分区的话,设置也有区别)。windows下文件的位置就是"E:\download\ubuntukylin-14.04-desktop-amd64.iso"
- 备份脚本"40_custom" 备份脚本40_custom
1 mv /etc/grub.d/40_custom /etc/grub.d/40_custom_bak 2 chmod u-x /etc/grub.d/40_custom_bak
注释:grub会按脚本名字的起首数字,从小到大依次执行"/etc/grub.d/"文件夹下的全部可执行脚本,最终将决定系统在启动界面的排列顺序。因此定制个人脚本可以将脚本命名为06xxx(06-09都可以,只要不合系统脚本名冲突),这样在启动界面定制的系统就会排在第一位。chmod u-x 是为了避免40_custom_bak脚本被执行。
- 编辑脚本40_custom
1 sudo gedit /etc/grub.d/40_custom
我的"/etc/grub.d/40_custom"文件
1 #!/bin/sh 2 exec tail -n +3 $0 3 # This file provides an easy way to add custom menu entries. Simp ly type the 4 # menu entries you want to add after this comment. Be careful not to change 5 # the ‘exec tail‘ line above. 6 menuentry "Ubuntukylin 14.04 ISO" { 7 insmod ntfs 8 insmod iso9660 9 set isofile="/download/ubuntukylin-14.04-desktop-amd64.iso" 10 loopback loop (hd0,msdos6)$isofile 11 linux (loop)/casper/vmlinuz.efi boot=casper iso-scan/file name=$isofile noprompt noeject 12 initrd (loop)/casper/initrd.lz 13 }
注释:前两行必须要有,第一行告诉系统这是shell脚本,至于第二行,目前我只知道是两条系统命令。从第三行开始,带“#”号的表示该行是注释内容,可以删除。重点说一下第6-12行。第六行是启动界面显示的内容。第7和第8行,加载ntfs格式分区的驱动和支持iso文件的驱动,这两行是为了以防万一。我的iso镜像文件存放在用ntfs格式化的E盘下,如果你的iso文件在linux分区下请删除第7行。对于iso文件存放在linux系统分区下的情况,请注意,如果home是单独分区的话,而iso又存放在了比如"/home/username/download/ubuntu-14.04.iso",请用下面这行替换第9行
set isofile="/username/download/ubuntu-14.04.iso"
注意:去掉"/home"的文件夹名,包含位置。
grub2好像已经能支持ntfs格式了,所以第7行可以不加。但有时候系统还是会出现莫名其妙的问题(主要是个人道行浅啊),因此还是加上为好。第9行,给变量"isofile"赋值,把"/download/ubuntukylin-14.04-desktop-amd64.iso"换成你的iso镜像文件的位置,注意这里是linux下分割文件夹的方式,"/"而不是windows的"\"。这个变量将用于第10行,查找iso文件的位置。第10行,加载iso镜像文件。这里要详细的说下(hd0,msdos6),hd0表示第一块硬盘(我只有一块硬盘),如果你的镜像文件在第二块硬盘,请用hd1,依次类推。msdos6表示分区,我的电脑是联想B470,有一个隐藏的200m分区,然后还有主分区,逻辑分区。这样隐藏分区就是msdos1(grub2之前是从0开始计数的,现在从1开始),C就是msdos2,D就是msdos3。可能你要说了,“那么E就是msdos4了”,先别着急,这个还真不是,可能由于多出来的那个隐藏oem分区的原因再加上我的E盘是逻辑分区我的E盘对应的是msdos6。目前详细的原因我还不知道,有知道的给我解释下啊,在此谢过了。但是你不用害怕这部影响我们安装系统,输入那个我们已经熟悉的命令 sudo fdisk -l 查找出存放你的iso文件的分区就可以了,下面是该命令在我的系统下的运行结果
1 Disk /dev/sda: 500.1 GB, 500107862016 bytes 2 255 heads, 63 sectors/track, 60801 cylinders, total 976773168 sectors 3 Units = 扇区 of 1 * 512 = 512 bytes 4 Sector size (logical/physical): 512 bytes / 4096 bytes 5 I/O size (minimum/optimal): 4096 bytes / 4096 bytes 6 Disk identifier: 0xccdfadbb 7 8 设备 启动 起点 终点 块数 Id 系统 9 /dev/sda1 * 2048 411647 204800 7 HPFS/NTFS/exFAT 10 /dev/sda2 411648 102811647 51200000 7 HPFS/NTFS/exFAT 11 /dev/sda3 102813694 976771071 436978689 f W95 扩展 (LBA) 12 Partition 3 does not start on physical sector boundary. 13 /dev/sda5 102813696 518807551 207996928 7 HPFS/NTFS/exFAT 14 /dev/sda6 518809600 744089599 112640000 7 HPFS/NTFS/exFAT 15 /dev/sda7 800993280 808804351 3905536 82 Linux 交换 / Solaris 16 /dev/sda8 808806400 867397631 29295616 83 Linux 17 /dev/sda9 867399680 976771071 54685696 83 Linux 18 /dev/sda10 744091648 800985087 28446720 83 Linux 19 20 Partition table entries are not in disk order
sda6就对应着msdos6,两块硬盘的话可能是sdb。第11,12行,加载linux内核。(loop)表示镜像位置"(hd0,msdos6)/download/ubuntukylin-14.04-desktop-amd64.iso",至于"/casper/vmlinuz.efi"和"/casper/initrd.lz",需要查看iso文件验证(linux下的归档管理器和windows下的winrar都可以查看iso文件),对于ubuntu来说vmlinuz和initrd一般放在"/casper"文件夹下。总之,用你的vmlinuz和initrd的位置取代"/casper/vmlinuz.efi"和"/casper/initrd.lz",注意如果是ubuntu14.04而不是kylin32位系统的话,应该是“/casper/vmlinuz”(注意没有efi的后缀)。说到这里有没有人知道到底联想B470能不能装64位系统啊?(已经失败了n次了)
- 定制启动界面,调整系统启动方式。(如果不需要调整系统启动顺序的话可以跳过这步直接进行第5步)启动界面如何设置系统的排列方式,怎么设置谁先启动,如何调整默认启动时间,这些都需要修改"/etc/default/grub"文件
1 sudo gedit /etc/default/grub
我的"/etc/default/grub"
1 GRUB_DEFAULT=3 2 GRUB_HIDDEN_TIMEOUT_QUIET=true 3 GRUB_TIMEOUT=6 4 GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian` 5 GRUB_CMDLINE_LINUX_DEFAULT="quiet splash" 6 GRUB_CMDLINE_LINUX=""
注释:第三行表示启动界面默认的等待(延迟)时间为6秒,第一行设置了系统默认启动windows系统而不是ubuntu。关于第一行还需要详细的解释下,大家还记得"/etc/grub.d/"下,有一个"30_os-prober"文件吗?这个文件是加载并搜索win7系统的脚本,如果你的win7安装ubuntu之后不能引导启动了,可以查看修改这个文件试试。由于起首数字是"30",排在"10"和"20"之后位于第3项,因此设置GRUB——DEFAULT等于3,就能默认启动windows了。还有其他的方法来设置系统的启动顺序,比如将“30”的脚本名称改为“07”等,我会在参考文献中给出。其余的参数大家感兴趣的话可以查阅参考文献。
- 生成grub.cfg文件。将脚本"/etc/grub.d/40_custom"和"/etc/default/grub"修改完毕后,就可以生成grub.cfg文件了。现在可以说万事具备,只歉东风了。东风来了!
1 sudo grub-mkconfig -o /boot/grub/grub.cfg 2 sudo update-grub
注释:第2条命令,如果只是安装iso镜像文件的话应该可以省略。
- 重新启动系统进入启动界面,选择"Ubuntukylin 14.04 ISO"(就是我们前面在40_custom中设置的那个),安装成功的话就可以进入在iso镜像上运行的ubuntu了。现在进入这个系统了,需要在硬盘安装ubuntu的话,安装之前还要运行命令
1 sudo umount -l /isodevice
接下来就可以安装ubuntu到你的硬盘了。
四、参考文献:
- https://wiki.archlinux.org/index.php/GRUB_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)
archlinux 网站上介绍grub2安装配置的文章,引言介绍了grub的工作原理。
- http://blog.csdn.net/wang02011/article/details/6293204
简单介绍了如何设置默认启动项。个人不推荐第二种做法。其实网上有人还提供了另外一种方法,但是,我试验后并不成功。 sudo grub-set-default 3 sudo grub-mkconfig -o /boot/grub/grub.cfg
下面是几个英文网站,虽然是英文,但是讲解详尽,理论充实喔
- https://help.ubuntu.com/community/Grub2/ISOBoot
详细介绍iso安装方法的网站,我正是参考这篇文章安装成功的。
- https://help.ubuntu.com/community/Grub2/ISOBoot/Examples
给出了iso安装的例子和解释
- http://www.dedoimedo.com/computers/grub-2.html
详细介绍了grub的工作机理和应用。想要深入研究grub定制自己的启动界面的同学不要错过啊