硬盘引导Linux ISO启动方法总结

Date:  2015/12/30   Sort:  Linux&开源 6588 Views / 0 Comments 

    随着各大主流发行版的发行媒介——ISO镜像越做越大,而且更新速度也越来越快,以往烧录光盘、U盘然后启动的方法已逐渐不能为急性子的Linux用户(i.e. 那些整天捣腾Linux发行版的人)所接受。所以能,根据个人实践经验,汇总了一些主流发行版通过硬盘引导ISO启动的方式,供参考。


1.引导器(Boot Loader)的加载

1.1 GRUB

    一般而言,最好的方式是使用Linux自带的GRUB/GRUB2来加载内核、虚拟分区,然后载入镜像文件。不过这一方法的前提是电脑上已经安装了Linux,且为硬盘安装了GRUB/GRUB2(有关这两种GRUB的区别,可以参考 http://tobalatech.blogspot.com/2009/12/ubuntu-grub2.html)。如果已安装Linux(或启动了Live系统),但未安装GRUB,可以使用下列命令

    sudo grub2-install /dev/sdx
    sudo grub2-mkconfig -o /boot/grub/grub.cfg

来安装,其中“sdx”是目标硬盘编号。

1.2 GRUB4Dos

    若尚未安装Linux,则推荐用GRUB4Dos来代替GRUB进行引导。方法是:

        (1)下载GRUB4Dos完整版(http://sourceforge.net/projects/grub4dos/files/latest/download),解压后将grldr复制到Windows所在分区的根目录下;

        (2)然后修改BOOT.ini文件(Win2K/XP/2003),或用BOOTMGR程序修改boot目录下的BCD文件,添加一个引导项并指向grldr;

        (3)创建menu.lst文件,留空即可(亦可在GRUB4Dos自带的menu.lst的基础上修改);

        (4)重启Windows,并按F8(如果必要的话进入启动项选择界面。选择对应于grldr的选项,便可进入GRUB4Dos来引导。

1.3 手动引导

    首先,从ISO文件中解压相应的内核镜像文件和initrd文件到某个硬盘分区下。各个发行版对这两个文件的命名不尽相同,内核镜像文件可以叫“vmlinuz/vmlinuz0/vmlinux/vmlinuz.efi”,initrd文件可以叫“initrd/initrd.gz/initrd.lz/initrd.img/initrd0.img/all.rdz”(有关这两个文件的介绍,可以参考 http://forum.ubuntu.org.cn/viewtopic.php?t=275817。当然,如果在命令中有用到loopback的,也可以不用将这两个文件解压出来,而是直接从ISO中加载(参见“2.1 Debian系列的引导”)。

    重启,进入GRUB或GRUB4Dos界面后,按“c”键进入命令行,按“Esc”键可以退回选项菜单。

    对于GRUB2,进入命令行后,依次输入下列命令

    set root=(hdM,N)
    linux 内核镜像文件的路径 引导参数
    initrd initrd文件的路径
    boot

其中“(hdM,N)”是存有镜像文件和initrd文件的分区编号(类似sdxN,若事先不知道,可以通过试探法逐一尝试,也可用“Tab”键列出可能组合);“内核镜像文件的路径”和“initrd文件的路径”分别为两个文件相对于“(hdM,N)”的路径;“引导参数”为确定引导方式和ISO文件位置的必须选项,以下将按发行版不同分别讨论。对于GRUB,将“linux”替换为“kernel”即可。

    对于GRUB4Dos,则输入下列命令

    find --set-root ISO文件的路径
    map ISO文件的路径 (0xff) || map --mem ISO文件的路径 (0xff)
    map --hook
    chainloader (0xff)
其中,“ISO文件的路径”应具有类似于“/abc/def.iso”的格式,ISO文件应当放在与grldr相同的分区中(若ISO与grldr处于不同分区,则应将“(hdM,N)”这样的硬盘编号添加到路径开头“/”)。亦可在GRUB4Dos中使用与GRUB相同的命令,只要把“linux”换成“kernel”就行。

        一般而言,可以将以上命令写在grub.cfg(GRUB2)或menu.lst(GRUB、GRUB4Dos)中,然后通过菜单选项进行自动引导。若事先不确定各个参数是否可行,则需要进行手动引导以便逐一尝试。


2.Debian系列的引导

2.1 Debian的引导

    进入命令行后,依次输入下列命令

    set root=(hdM,N)
    linux 内核镜像文件的路径 boot=live findiso=ISO文件的路径
    initrd initrd文件的路径
    boot

其中,“ISO文件的路径”应具有“/abc/def.iso”这样的格式(下同)。也可以写作“fromiso=ISO文件的绝对路径”,此时路径应具有“/dev/sdxN/abc/def.iso”这样的格式(别问我为什么设备编号后面能直接加路径;Debian社区多的就是黑科技~)。

     也可以事先不将内核镜像和initrd文件解压出来,而改为

    set root=(hdM,N)
    loopback loop ISO文件的路径
    linux (loop)/内核镜像文件的相对路径 boot=live findiso=ISO文件的路径
    initrd (loop)/initrd文件的路径
    boot

这时,内核镜像和initrd文件的路径是相对于ISO中根目录的路径(一般位于/live目录下)。

    注意,多数Debian发行版提供了install和live两个版本的内核镜像和initrd文件,这里应该用live版本的文件,否则会出现无法挂载ext分区和ISO的问题(被这个神坑坑了一下午有木有!)。

2.2 Ubuntu系列的引导

    Ubuntu系列的引导最为简单,因为它内建了可以在引导参数中接受ISO文件路径的功能(应该是用了Debian的hd-media;就这一点还是要赞一下Canonical的),无需手动建立loopback。直接在引导参数中加入“boot=casper  iso-scan/filename=ISO文件的路径”即可。


3.Fedora系列的引导(Fedora/RHEL/CentOS)

    进入命令行后,依次输入下列命令

    set root=(hdM,N)
    linux 内核镜像文件的路径 root=live:CDLABEL=ISO文件的名称 rd.live.image iso-scan/filename=ISO文件的路径
    initrd initrd文件的路径
    boot
其中,“ISO文件的名称”是ISO镜像在制作时写入的镜像标题(下同),可以用file命令查看。“rd.live.image”一项不能省略,否则系统启动后会要求输入登录密码,并且由于默认密码未知而无法登录(试过N多可能密码都没有用,心塞塞)。


4.Mageia的引导

    Mageia的安装镜像有三个版本,一种是传统安装镜像,包含了多个桌面环境,体积较大;一种是Live镜像,仅包含了一种桌面环境(KDE/Gnome/XFCE);还有一种是网络安装镜像。以下介绍前两种镜像。

4.1 传统安装

    该方式为了方便新手用户,内建了交互式搜索ISO文件的功能。推荐将引导参数留空,然后通过交互式界面找到需要引导的ISO文件,接着便可以将其载入。实际上,由该方式使用的不是squashfs封装的完整系统,而是沿用了Red Hat Linux早期的安装程序,所以无法提供Live系统。

4.2 Live

    Mageia的Live镜像不不支持自动挂载iso,因此需要手动解压iso文件到硬盘(见第6节)。并且,由于设计人员考虑不周到,解析内核参数时只能用分区标签(abel)来定位分区。最麻烦的在于,init脚本限制了Live镜像必须是iso9660(即光盘)格式,导致用户必须手动修改init脚本才能正确识别Live镜像,而init脚本又被封装经xz压缩的cpio流中,所以修改init变得异常繁琐。因此,我将已经修改好的initrd共享出来(下载链接),各位可以直接将其用initrd命令载入即可。相应的引导命令为

    set root=(hdM,N)
    linux 内核镜像文件的路径 root=mgalive:LABEL=硬盘分区的名称
    initrd initrd文件的路径
    boot

其中“硬盘分区的名称”是指存放解压后的镜像文件的分区的名称。进入Live桌面后,如果要继续使用Mageia自带的安装工具来安装系统,则还得对一个名为 “draklive-install”的文件做修改,否则系统会无法识别镜像文件所在的分区,具体操作方法就留给(爱折腾的)各位自行探索了。


5.Arch系列的引导

5.1 Arch的引导

    进入命令行后,依次输入下列命令

    set root=(hdM,N)
    linux 内核镜像文件的路径 archisolabel=ISO文件的名称 img_dev=ISO文件所在的分区编号 img_loop=ISO文件的路径
    initrd initrd文件的路径
    boot

其中,“ISO文件所在的分区编号应具有“/dev/sda2”这样的格式。

5.2 Manjaro的引导

    Manjaro的引导同Arch,只是引导参数中的“archisolabel”需要换成“misolabel”。


6.最后一招——解压ISO到硬盘

    如果以上各种方法都无法成功启动ISO,那么还有一种办法:

        (1)将ISO中的文件解压到某一分区的根目录下;

        (2)依次输入下列命令:

        set root=(hdM,N)
        linux 内核镜像文件的路径 root=/dev/sdxN
        initrd initrd文件的路径
        boot

    这里“/dev/sdxN”即为ISO解压到的硬盘分区编号。这一方法事实上将硬盘分区当做光盘使用,即让内核将/sdv/sdxN视为光盘驱动器。


7.其他可选的引导参数

7.1 区域设置(locale)

    一般发行版默认系统区域为英语。若要在Live系统中使用其他语言,则可以在引导参数后再加上“locale=区域代码”即可。例如:“locale=zh_CN”。

7.2 时区设置(timezone)

    一般发行版启动时默认使用GMT时间,即“Europe/London”。若要防止因系统时区错误导致引导后硬件时间改变,可以在引导参数后再加上“timezone=Asia/Shanghai”。

7.3 启动画面(splash)

    多数发行版会在系统启动的时候显示不同的画面(动画)。如果希望看到这些画面而非令人恼火的startup或systemd日志,则可以在引导参数后再加上“splash”或“quiet splash”。

7.4 后备模式(Failsafe mode)

有时候,由于硬件驱动不兼容等原因,必须使用后备模式加载系统,此时系统仅提供最基本的交互功能,性能也受到限制。可以参考Deepin提供的后备模式的内核参数:

        noapic noapm nodma nomce nolapic nomodeset nosmp vga=normal
该参数组合能解决大多数显卡、声卡及网卡驱动运行不正常导致系统无法启动的问题。


转载本站文章请注明,转载自:WTZ的小博[ http://wiblog.net/]
知识共享许可协议 本作品采用知识共享署名 4.0 国际许可协议进行许可。

更多