以ubuntu-16.04-desktop-amd64.iso为例
a) grub安装方法
提取casper文件夹中的initrd.lz和vmlinuz.efi(支持UEFI),将文件提取出来和ISO一起拷贝到一个fat32分区根目录(假设为第一个磁盘的第3个分区)。
修改grub菜单文件,增加一条,内容如下:
title Install Ubuntu 16.04
root (hd0,2)
kernel /vmlinuz.efi boot=casper iso-scan/filename=/ubuntu-16.04-desktop-amd64.iso ro quiet splashlocale=zh_CN.UTF-8
initrd /initrd.lz
补充一下磁盘分区的知识:
在grub中,磁盘分区是从0,开始,例如磁盘2的分区3为(hd1,2),而在linux中,磁盘分区从1开始,例如磁盘2分区3为sdb3,在Windows中磁盘从C开始,第三分区就是E盘。
推测的分区位置可能与实际略有出入,在启动后标题处会有停留,确认后会寻找文件和引导,若是找不到会提示,返回标题后,按e键可以编辑neogrub内容,修改分区位置。例如将(hd0,1)改为(hd1,1),若是优盘很有可能就是(hd1,0),然后回车,再次尝试。
b) grub2安装方式
grub2可以直接加载大的iso镜像,不需要解压提取内核。
menuentry "Ubuntu 16.04" --class os{
set root=(hd0,msdos3)
loopback loop0 /ubuntu-16.04-desktop-amd64.iso
linux (loop0)/casper/vmlinuz.efi boot=casper iso-scan/filename=/ubuntu-16.04-desktop-amd64.iso ro quiet splashlocale=zh_CN.UTF-8
initrd (loop0)/casper//initrd.lz
}
需要注意的是,grub2的分区表达方式有所变化,分区从1开始了,例如第一个磁盘第一分区(mbr分区)为:(hd0,msdos1)
引导完成进入安装界面后,第一步就是要打开中端,快捷键为 Ctrl+Alt+T,输入:sudo umount -l /isodevice,注意是L不是i,这一步是为了弹出对应盘的占用,方面后面格式化并创建分区。
点击桌面上的安装程序,第二步让你选择安装方式,第一个为与windows7共存,我们选择最后一个:其他选项。然后格式化ext4需要使用的分区,挂载点为/,格式化完成后注意下方引导安装位置,我们选择刚刚格式化的分区,然后下一步,我们不使用swap,继续,然后一步一步即可,最后慢慢就等着安装吧,安装完成提示重启,重启即可。
注意不要覆盖现有引导。
a) grub
重启之后发现根本找不到从哪进入ubuntu,这是正常的,因为你的引导安装在分区中,而电脑根本不知道。
这里我们仅需要修改刚刚引导安装使用的安装引导,具体分区要修改root(hd0,1),这里是认为安装在第二个分区,grub菜单修改为:
title ubuntu16.04
root (hd0,1)
kernel /vmlinuz root=/dev/sda2
initrd /initrd.img
一般来说,一个磁盘比较容易试,多个磁盘就有点麻烦,我装了2个硬盘分了十个区,试了几分钟。如果是装在第二个磁盘第一个分区:
title ubuntu16.04
root (hd1,0)
kernel /vmlinuz root=/dev/sda1
initrd /initrd.img
这是一个难点,我也是试了不少次才总结出来。
第一行时,还是grub,对于grub来说,主板第二个磁盘就是物理上的第一个盘,但是到了第二行,启动了ubuntu内核,linux会将自身安装盘当做第一盘,所以这里就变成了sda,而非sdb。
另外这里initrd和vmlinuz的具体名称与安装的时候略有不同,这里在启动后打开ubuntu系统根目录看一下你就明白了,它跟里面的是一致的,是从文件夹中引出的链接文件
b) grub2
grub2仅个别命令语法不同
menuentry "ubuntu16.04" --class os{
set root=(hd0,msdos2)
linux /vmlinuz root=/dev/sda2
initrd /initrd.img
}
安装时,引导安装文件要与版本以及操作位数对应,例如debian8.7 amd64的引导文件就在installer-amd64,下载3个文件【boot.img.gz、initrd.gz 、vmlinuz】,不能使用镜像中的install.amd中的这两个同名文件,因为镜像中的initrd.gz没有查找ISO的功能,不适用于硬盘安装。同时,debian引导文件与Ubuntu不同,不能直接加载iso,只能从fat格式分区加载iso。
a) grub
将文件都放到某个fat根目录,修改grub菜单,新增一条:
title debian8.7
root (hd0,2)
kernel /vmlinuz
initrd /initrd.gz
boot
b) grub2
将文件都放到某个fat根目录,修改grub菜单,新增一条:
menuentry "debian8.7" --class os{
set root=(hd0,msdos3)
linux /vmlinuz
initrd /initrd.gz
boot
}
安装过程就略了,引导不要选择磁盘,注意不要覆盖现有引导。
a) grub
修改grub菜单,假设装在第二个分区
title debian 8.6
root (hd0,1)
kernel /vmlinuz ro root=/dev/sda2
initrd /initrd.img
boot
b) grub2
menuentry "debian 8.6" --class os{
set root=(hd0,msdos2)
linux /vmlinuz ro root=/dev/sda2
initrd /initrd.img
boot
}
注意:BIOS中最好禁用acpi,部分机器boot启动安装之后要立马拔掉所有usb,包括键盘,不然会卡在loading
basic drivers,启动之后再插上键盘。如果有安装windows,若是后续无法启动,则需要将acpi重新开启。
下载openSUSE镜像,解压到某个分区的根目录的openSUSE文件夹(随意名称),然后将linux和initrd-xen提取到根目录,initrd_xen改名为initrd(可以不改,与下面对应)。
a) grub
修改grub菜单,新增一条:
title openSUSE42.2
root (hd0,2)
kernel /linux
initrd /initrd
boot
b) grub2
menuentry "openSUSE42.2" --class os{
set root=(hd0,msdos3)
linux /linux
initrd /initrd
boot
}
安装过程就略了。
安装过程需要注意2点:
1、如果文件放在ntfs格式盘,无法直接查找,需要挂载,一直back,在主目录选择expert,然后选择start shell,输入cp /usr/bin/mount/bin,然后exit,再返回进行安装,就可以识别了,硬盘选择放置文件的分区,目录为开始解压的目录,即/openSUSE
2、选择Experts模式自定义安装时,安装在某一个分区而非磁盘安装时,是不会写入grub2引导的,本例不需要引导,若是需要原装引导,使用grub2-install/dev/sdax来安装引导
a) grub
title openSUSE42.2
root (hd0,2)
kernel /linux
initrd /initrd
boot
b) grub2
menuentry "openSUSE42.2" --class os{
set root=(hd0,msdos3)
linux /linux
initrd /initrd
boot
}
a) grub
从镜像中提取vmlinuz和initrd.img与iso文件放到fat32分区,对于大于4g的iso,只能放到ext2分区。这里我们放在第三个分区,安装到第二个分区
加载kernel是关键,如果grub是安装在优盘,并从优盘启动的,在加载内核后,磁盘顺序必然会发生变化,所以可能需要挨个启动测试,如果出现nosuitableimage则证明sdb1并非优盘分区,更换重新实验。如果grub安装在硬盘,则保持一致,加热grub中优盘为(hd1,0),则为/dev/sdb1以此类推。
title CentOS7
find --set-root /vmlinuz
kernel /vmlinuz linux repo=hd:/dev/sda3:/
initrd /initrd.img
boot
b) grub2
menuentry "CentOS7" --class os{
search.fs /vmlinuz root
linux /vmlinuz linux repo=hd:/dev/sda3:/
initrd /initrd.img
boot
}
安装过程略,注意不要覆盖现有引导。
a) grub
修改grub菜单。
title CentOS7
find --set-root /vmlinuz
kernel /vmlinuz linux repo=hd:/dev/sda2/
initrd /initrd.img
boot
b) grub2
menuentry "CentOS7" --class os {
search.fs /vmlinuz root
linux /vmlinuz linux repo=hd:/dev/sda2/
initrd /initrd.img
boot
}