精华内容
下载资源
问答
  • Ubuntu Linux硬盘分区引导程序

    千次阅读 2014-07-17 11:45:14
    特别值得一提的是Ubuntu Linux有很多值得学习的地方,这里我们主要介绍Ubuntu Linux,包括介绍Ubuntu Linux等方面。安装Ubuntu Linux的预备知识。 本文涉及到的很多内容是只是粗略的描述,如想深入了解更多的相关...

    特别值得一提的是Ubuntu Linux有很多值得学习的地方,这里我们主要介绍Ubuntu Linux,包括介绍Ubuntu Linux等方面。安装Ubuntu Linux的预备知识。

    本文涉及到的很多内容是只是粗略的描述,如想深入了解更多的相关知识,请求助搜索引擎,而我的唯一建议是,请尽量看新的文章,Ubuntu Linux的发展日新月异,老旧的Ubuntu Linux文档很可能会对读者认识Ubuntu Linux产生误导。

    1) 硬盘分区

    一块硬盘可以分为四个主分区,或三个主分区加上一个扩展分区。所谓的扩展分区,其实只是一个容器,实际上,我们并不直接使用扩展分区。在扩展分区内,我们可以进一步划分逻辑分区。一般认为在一个扩展分区内,能分出无数个逻辑分区。正因为有了逻辑分区,一块硬盘才能被分成很多个分区。

    另一个可能涉及的概念是活动分区。电脑加电启动时,BIOS会寻找硬盘上有活动分区标识的分区寻找操作系统引导程序。如果一块硬盘上没有活动分区,则即使这块硬盘上有引导程序和完好的操作系统,也将无法成功启动。一块硬盘上有且只能有一个活动分区,而且只有主分区才能成为活动分区。

    2) Ubuntu Linux中的硬盘分区

    与Windows不同,Ubuntu Linux并不是用C, D, E, F等盘符来标识每一个分区的,而是用一系列设备文件来标识。Ubuntu Linux把一切硬件设备都当成文件。比如,Ubuntu Linux下,四个主分区分别对应/dev /sda1, /dev/sda2, /dev/sda3和/dev/sda4。其中,/dev是硬件设备文件所在的目录(即:文件夹,下同),sd代表SCSI Disk,a代表第一个SCSI设备,数字1,2,3,4分别代表了四个主分区。

    如果你不知道什么是SCSI Disk,不用担心,因为你并不需要知道它究竟是什么。通常,如果你的电脑中只有一块硬盘,那么,这块硬盘一定是/dev/sda。 可能你以前接触过Ubuntu Linux,或曾经在一些老旧的资料中看到过/dev/hda代表第一个主IDE通道上的硬盘。那么,你现在已经无需知道这些了。因为Ubuntu Linux已经取消了用hd和sd区分不同类型的硬盘的机制,取而代之的,用sda统一代表电脑中的第一块硬盘。

    Ubuntu Linux下,/dev/sdaX中的数字X的编号是有限的。在Ubuntu Linux下,最大的分区编号是16。因此,主分区和扩展分区编号占用 1~4,逻辑分区占用5~16。也就是说,即使你的硬盘中只有一个主分区(如,/dev/sda1)和一个扩展分区(/dev/sda2),剩下的两个主分区编号: /dev/sda3, dev/sda4 也不会分配给逻辑分区。第一个逻辑分区一定是从/dev/sda5开始编号的。这点与Windows下盘符的编制类似。如:A盘一定是3.5英寸软驱,B盘一定是5.25英寸软驱,而从C盘开始才是硬盘分区。即使电脑上没有软驱,第一个硬盘分区的编号也是C,而不是A。

    3) 引导程序与MBR(Master Boot Record)

    引导程序是负责将操作系统的内核从硬盘上加载到内存中的程序。在使用Windows的时候,我们似乎从没有关心过引导程序。不过安装过双Windows系统的读者一定认识Windows的引导程序,即使你从来没有意识到这一点。Windows的引导程序叫做OS Loader,即操作系统加载器,负责在启动的时候根据boot.ini中的配置信息,在屏幕上显示操作系统选择菜单,然后根据用户的选择引导合适的操作系统。

    Ubuntu Linux下有两种引导程序:一种叫做Lilo,另一种叫做Grub。Lilo是一个非常经典的引导程序,最初因为它不支持引导位于1024柱面后的Ubuntu Linux内核,而被Grub所取代。新版的Lilo已经能够支持引导1024柱面后的Ubuntu Linux内核了。现在,几乎所有的主流发行版的Ubuntu Linux都使用Grub作为默认的引导程序。Ubuntu Linux的引导程序与Windows的OS Loader类似。比如,Grub的作用就是负责读取配置文件(menu.lst),显示操作系统的选择菜单,并根据用户的选择引导合适的操作系统。MBR又称主引导记录,位于硬盘的第一个柱面的第一个磁道的第一个扇区中,大小为512B,引导程序就位于MBR中。

    BIOS在开机过程中,会读取并运行MBR中的引导程序,由它来加载操作系统内核。同样位于第一个柱面的第一个磁道的第一个扇区中的还有主分区表。因为主分区表的大小有限,因此只能存下四个分区的信息,这也是一块硬盘只能分为四个主分区的原因。也许你也猜到了,还有一个叫做“扩展分区表”的东东,位于扩展分区的最前面,保存了逻辑分区的信息。Ubuntu Linux安装时,通常会把Grub安装到MBR。这样,你就可以用Grub同时引导Ubuntu Linux和Windows了。

    4) 文件系统和SWAP

    在一个硬盘分区可以使用之前,必须格式化成特定的文件系统。Windows下常见的文件系统有FAT32和NTFS。一些U盘的文件系统还可能是FAT(16)格式的。关于FAT(16)、FAT32和NTFS这三种文件系统之间的区别,你只要知道FAT(16)支持的最大单个文件为2GB,FAT32支持的最大单个文件为4GB,而NTFS则可以支持大于4GB的单个文件。Ubuntu Linux支持很多种不同类型的文件系统。Ubuntu Linux能够对FAT16/32和NTFS进行读写。

    但是因为这两种文件系统不支持Ubuntu Linux文件权限,因此Ubuntu Linux操作系统无法安装在这两种文件系统的分区中。常见的用于安装Linux的文件系统主要有EXT3、ReiserFS、XFS和JFS等。关于Ubuntu Linux支持的文件系统,可以列出长长的一串来。通常我们都会使用EXT3作为默认的文件系统。关于各种文件系统孰优孰劣的争论,实在是太多了,个人的看法是,我们使用Ubuntu Linux是作为桌面系统来使用的,大多数情况下,文件系统的性能并不是我们所需要考虑的大问题。也许你会看到很多对EXT3的负面评价,但是EXT3毕竟是最老牌,最久经考验的Linux文件系统,所以选择它没错。

    事实上,如果安装的是Gentoo Linux,则选择ReiserFS或许会更好。因为ReiserFS处理大量小文件的性能非常出众。此外,你可能还会见到一种叫做EXT2的文件系统,正如其名字所暗示的那样,EXT3是EXT2的升级版本。Linux SWAP,即Linux的交换分区,也是一种文件系统,它的作用是作为Linux的虚拟内存。在Windows下,虚拟内存是一个文件: pagefile.sys,而Linux下,虚拟内存需要使用独立分区,这样做的目的,据说是为了提高虚拟内存的性能。通常,虚拟内存的大小设置为物理内存的1~2倍。

    5) Linux的文件结构、挂载与分区建议

    Windows的文件结构是多个并列的树状结构,最顶部的是不同的磁盘(分区),如:C,D,E,F等。Linux的文件结构是单个的树状结构。最顶部的为根目录,即/。在根目录下,分为多个子目录,包括/bin、/boot、/dev、/etc、/home、/lib、/media、/mnt、/opt、/proc、/root、/sbin、/tmp、/usr和/var等。这些目录的具体作用在这里就不做详细介绍了。

    磁盘分区都必须挂载到目录树中的某个具体的目录上才能进行读写操作。显然,根目录是所有Ubuntu Linux的文件和目录所在的地方,需要挂载上一个磁盘分区。上面还提到,Ubuntu Linux交换分区也需要独立使用一个分区,因此,安装一个Ubuntu Linux至少需要两个分区。(事实上,只使用一个分区安装Linux也是可能的,而且,如果电脑的物理内存足够大,交换分区并不是必须的)在不同的Ubuntu Linux安装教程中,不同的作者阐述了各种不同的分区建议,本文也不例外。以下的一些建议,有很多都是个人的喜好,因此读者并不一定要完全按照这些建议进行分区,选择最适合自己的方案才是最好的。

    /boot:在很多老旧的教程中,都会让用户在/boot目录上挂载一个大小为100MB左右的独立分区,并推荐把该/boot放在硬盘的前面,即1024柱面之前。事实上,那是Lilo无法引导1024柱面后的操作系统内核的时代遗物了。当然,也有作者宣称,独立挂载/boot的好处是可以让多个Ubuntu Linux共享一个/boot。其实,无论是基于上述的哪种理由,都没有必要把/boot分区独立出来。

    首先,Grub可以引导1024柱面后的Ubuntu Linux内核;其次,即使是安装有多个Linux,也完全可以不共享/boot。因为/boot目录的大小通常都非常小,大约20MB,分一个100MB的分区无疑是一种浪费,而且还把硬盘分的支离破碎,不方便管理。另外,如果让两个Linux共享一个/boot,每次升级内核,都会导致Grub的配置文件冲突,带来不必要的麻烦。

    而且,不独立/boot分区仅仅占用了根目录下的大约20MB左右的空间,根本不会对根目录的使用造成任何影响。值得注意的是,随着硬盘容量的增大,无法引导Linux内核的现象再次出现,这也就是著名的137GB限制。很遗憾,Grub是无法引导137GB之后的分区中的Ubuntu Linux内核的。如果你不巧遇到了这样的情况(我就遇到过),你就要考虑把/boot独立挂载到位于137GB前方的独立分区中,或者索性就把 Ubuntu Linux的分区都往前移动,让根目录所在分区位于137GB之前。

    /usr/local:建议把/opt、/usr或/usr/local独立出来的教程,基本上也是非常老的了。使用Ubuntu时,我们一般都是使用系统的软件包管理器安装软件,很少自己编译安装任何软件。而建议独立/usr、/opt、/usr/local的理由无非是为了重装系统时不再重新编译软件而直接使用早先编译好的版本。因此对于大多数的普通用户来说,这个建议通常是没有意义的。

    /var:建议把/var和/tmp独立出来的教程通常是面向服务器的。因为高负载的服务器通常会产生很多日志文件和临时文件,而这些文件又经常改变,因此把/var和/tmp独立出来,有利于提高服务器的性能。我们使用Ubuntu是做桌面的,甚至有些用户根本从来就没有关心过系统日志这玩意儿,所以根本没有必要独立的为/var和/tmp挂载分区。

    /home:这可能是唯一一个值得独立挂载分区的目录了。/home是用户文件夹所在的地方。一个用户可能在/home/user中存放了大量的文件资料,如果独立挂载/home,即使遇到Ubuntu系统无故身亡的尴尬局面,也可以立刻重装系统,取得自己的文件资料。因此,/home是唯一可以考虑独立挂载分区的目录。

    看了上面的一些介绍,你可能已经知道我的建议了:

    双分区方案

    /:至少3GB,建议根据实际情况,尽可能多分一些,特别是喜欢玩各式软件的读者。SWAP:物理内存小于等于512MB,建议分配实际物理内存容量2倍大小的SWAP;物理内存大于512MB,建议分配与物理内存等容量的SWAP。

    三分区方案

    /:至少3GB,建议根据实际情况,尽可能多分一些,特别是喜欢玩各式软件的读者。/home:根据实际需要分配1GB~100GB或更多,酌情处理。SWAP:物理内存小于等于512MB,建议分配实际物理内存容量2倍大小的SWAP;物理内存大于512MB,建议分配与物理内存等容量的SWAP。

    另外需要说明的一点是,有些老旧的教程中建议把Linux安装在主分区中,或在/boot下挂载一个主分区。事实上,这也是不需要的。Linux的所有分区都可以位于逻辑分区中。所以,不要再被这些老旧的教程所误导了,不要再浪费有限的主分区了,放心地把Linux安装在逻辑分区中吧。

    展开全文
  • U盘+GRUB2引导PE或linux镜像

    千次阅读 2015-05-10 02:26:29
    安装grub2到u盘:sudo grub-install --root-directory=/media/u /dev/sdbgrub2引导WinPE1.U上建立WXPE目录,将WinPE文件放置入内:目前网络上的WinPE到处都是,各种版本其实都差不多,主要需要如下5个文件: ...

    详细看原文:链接

    安装grub2到u盘:

    sudo grub-install -v --target=i386-pc --boot-directory=/run/media/root/EXT4 /dev/sdb
    //注意上面的参数:
    //--target,根据需要替换,参数值可以到/usr/lib/grub/下查看,每一个目录都可以作为参数值
    //--boot-directory,此参数的含义自行查看grub-install的help

    具体看man grub-install使用方法

    grub2间接引导WinPE

    1.U盘上建立WXPE目录,将WinPE文件放置入内:

    目前网络上的WinPE到处都是,各种版本其实都差不多,主要需要如下5个文件:
    LDRXPE NTCOM PE SETUPLDR.BIN WINPE.IS_

    大致过程是:LDRXPE调用NTCOM和SETUPLDR.BIN读取PE找到WINPE.IS_镜像,加载WinPE。

    2.修改grub.cfg,加入winpe引导项:

    —————————————————————

    menuentry 'LDRXPE for WinCE (on /usb/fairy)'{
    insmod part_msdos
    insmod fat
    set root='hd0,msdos1'
    search --no-floppy --fs-uuid --set=root 696C-0B1C
    ntldr /WXPE/LDRXPE
    }

    —————————————————————

    说明:此处的696C-0B1C为U盘分区uuid,其实这一句也可以不要,因为上面已经set root了,主要为了双保险。

    这里的关键是:ntldr /WXPE/LDRXPE,而不是chainloader或者linux,我用后者尝试了一周都不得成功,最后才发现了可以直接用ntldr命令,强大啊!!

    grub2直接引导WinPE

    转自:Librehat’s Blog

    GRUB2不支持GRUB4DOS那样的map操作来引导ISO文件,是长期困扰我的一个问题,在今天之前,我都很傻地用grub2引导grub4dos然后引导Windows PE……直到我膝盖中了一箭,看到这个帖子。下面好好整理了一下,希望本文也能帮助你彻底从GRUB4DOS升级换代到GRUB2!

    关于在U盘上安装GRUB2引导器的教程请自行Google,太多这类文章和Wiki了。下面开始GRUB2引导ISO文件(特别是Windows PE和Windows安装光盘这种)的正题。

    首先下载最新版的:Syslinux,解开压缩包,memdisk文件夹下面有一个memdisk文件(没有任何扩展名),把memdisk文件复制到U盘boot文件夹下(随便你放在哪,这里我是放倒boot这个文件夹下)。

    编辑你U盘GRUB2的配置文件(一般是U盘/grub2/grub.cfg),在启动项那个区域添加以下几行。

    menuentry 'Boot Windows 8 PE ISO'{
            set root='(hd0,msdos1)'
            echo 'Loading Memdisk...'
            #insmod memdisk
            linux16 /boot/memdisk iso raw
            echo 'Loading ISO...'
            initrd16 /boot/Win8PE.iso
    }

    好了,其实关键就是memdisk后面的raw参数!感兴趣的自己看Syslinux的Wiki,我这段代码引导的是U盘boot文件夹下的Win8PE.iso,请修改成你自己的具体情况。

    借助MEMDISK(几十KB的文件),GRUB2就能加载几乎任意的镜像文件(ISO、IMG等)了,相当于是「虚拟光驱」的作用?不过引导速度比GRUB4DOS稍微慢一点。

    不需要insmod memdisk这一句,因为用的是Syslinux的MEMDISK而不是GRUB2的memdisk模块。
    为了规范,syslinux的MEMDISK全部大写,以便和GRUB2的memdisk模块区分开来。
    两者重名了,刚查了一下,GRUB2的memdisk是用来读取core.img的。和syslinux的MEMDISK完全不同……
    详见http://wiki.xtronics.com/index.php/Grub2_howto

    grub2间接引导Archlinux镜像

    1.解压Archlinux

    最新安装镜像:archlinux-2012.11.01-dual.iso,复制其中的arch目录到U盘。

    EFI isolinux loader这三个目录不需要。

    2.精简arch目录:

    因为我要用的是32位的,而不用64位的所以删掉64位的相关目录和文件,包括:

    删除arch/x86_64目录;
    删除arch/boot目录下的:memtest memtest.COPYING syslinux x86_64
    修改arch/aitab,注释掉x86_64的两行。

    当然你的空间足够大,这些都可以不做。

    3.修改grub.cfg,加入arch引导项:

    ———————————————————————————————

    menuentry 'archlinux-2012.11.01-setup (on /usb/fairy)'{
    insmod part_msdos
    insmod fat
    set root='hd0,msdos1'
    search --no-floppy --fs-uuid --set=root 696C-0B1C
    linux/arch/boot/i686/vmlinuz archisobasedir=arch archisolabel=fairy
    initrd/arch/boot/i686/archiso.img
    }

    ———————————————————————————————

    说明:同上此处的696C-0B1C为U盘分区uuid,其实这一句也可以不要,因为上面已经set root了,主要为了双保险。

    这里的关键是:archisobasedir=arch archisolabel=fairy ,这里的fairy是U盘的卷标,少了这句是不得成功的。

    grub2直接引导Archlinux镜像

    x86_64:

    menuentry "Archlinux-2013.05.01-dual.iso" --class iso {
      set isofile="/archives/archlinux-2013.05.01-dual.iso"
      set partition="6"
      loopback loop (hd0,$partition)/$isofile
      linux (loop)/arch/boot/x86_64/vmlinuz archisolabel=ARCH_201305 img_dev=/dev/sda$partition img_loop=$isofile earlymodules=loop
      initrd (loop)/arch/boot/x86_64/archiso.img
    }

    i686

    menuentry "Archlinux-2013.05.01-dual.iso" --class iso {
      set isofile="/archives/archlinux-2013.05.01-dual.iso"
      set partition="6"
      loopback loop (hd0,$partition)/$isofile
      linux (loop)/arch/boot/i686/vmlinuz archisolabel=ARCH_201305 img_dev=/dev/sda$partition img_loop=$isofile earlymodules=loop
      initrd (loop)/arch/boot/i686/archiso.img
    }

    grub2引导Ubuntu liveCD

    1.复制

    ubuntu-12.04-desktop-i386.iso到U盘根目录,当然为了根目录干净放到iso或者其他目录也可以,以下做对应修改。

    2.修改grub.cfg,加入ubuntu引导项:

    ——————————————————————————————————————————————

    menuentry 'ubuntu-12.04-desktop-i386.iso' {
    insmod fat
    insmod loopback
    insmod iso9660
    loopback loop (hd0,1)/ubuntu-12.04-desktop-i386.iso
    set root=(loop)
    linux /casper/vmlinuz boot=casper iso-scan/filename=/ubuntu-12.04-desktop-i386.iso noprompt noeject locale=zh_CN.UTF-8 --
    initrd /casper/initrd.lz
    }

    ——————————————————————————————————————————————

    说明:

    hd0,1 指得是U盘第一分区,我这里只有一个分区。

    iso-scan/filename=/ubuntu-12.04-desktop-i386.iso这里要注意ubuntu前面的“/”,如果找不到文件会出现can’t open /dev/sr0错误。

    locale=zh_CN.UTF-8 是设置中文环境,很多人引导成功却是英文环境的,加上这条就可以了。

    安装ubuntu时需要卸载

    ubuntu的iso镜像顺利引导,进入 ubuntu的live cd桌面,桌面上有 install ubuntu的字样,和光盘启动时的样子一模一样,不过与光盘安装有一点不同,也很重要,就是之前我们挂载了iso设备,现在要卸载它,不然会出现分区表问题。在终端里输入:

    sudo umount -l /isodevice

    grub直接启动xiaopanOS

    假如xiaopanOS.iso 在C盘根目录,那就是sda1,根据自己实际更改
    把xiaopanOS.iso 里的tce文件夹解压到C盘根目录,也就是C:\tce

    set iso='(hd0,msdos1)/xiaopanOS-0.3.2.iso'
    loopback loop $iso
    linux (loop)/boot/vmlinuz quiet waitusb=5 tce=sda1/tce
    initrd (loop)/boot/tinycore.gz
    boot
    展开全文
  • Linux grub引导修复

    千次阅读 2016-10-17 22:49:47
    怎样修复grub开机引导 参考:...很多时候,特别是在linux调整分区后,开机重启时会出现  error : unknow filesystem  grub rescue>  的字样,系统就是进不去。这表示
     
    


    很多时候,特别是在linux调整分区后,开机重启时会出现
            error : unknow filesystem
            grub rescue>
            的字样,系统就是进不去。这表示你的grub2的配置文件坏了……
            由于分区调整或分区UUID改变造成grub2不能正常启动,从而进入修复模式了(grub rescue),也称救援模式。
            
            在救援模式下只有很少的命令可以用:set  ,  ls , insmod , root , prefix

            (1)set  查看环境变量,这里可以查看启动路径和分区。
            (2)ls   查看设备
            (3)insmod  加载模块
            (4)root  指定用于启动系统的分区,在救援模式下设置grub启动分区
            (5)prefix 设定grub启动路径

    具体修复步骤如下:
           1、查看分区:grub rescue> ls   回车
                会出现如下字样:
                (hd0) (hd0,msdos9) (hd0,msdos8) (hd0,msdos7) (hd0,msdos6) (hd0,msdos5) (hd0,msdos2) (hd0,msdos1)
           注:上面是我的分区设备,每个人可能不一样,但原理都是一样的。
            grub> find /boot/grub/grub.conf 也行
           2、寻找ubuntu所在分区:
               (就是寻找你的Linux系统是装在以上哪个分区里)
                  grub rescue> ls (hd0,msdos1)/
                若出现 unknown filesystem字样,则尝试下一个
                ……
                若出现的是你的ubuntu 主文件夹下的文件夹和文件的名字,那就是的要找的分区了。

            3、修改启动分区:
                 (假如你找到的启动分区是hd0,msdos8)
             grub rescue> root=(hd0,msdos8)
             grub rescue> prefix=/boot/grub                         //grub 路径设置
             grub rescue> set root=(hd0,msdos8)
             grub rescue> set prefix=(hd0,msdos8)/boot/grub
             grub rescue> insmod normal                            // 启动 normal 启动
             grub rescue> normal
            之后你就会看到熟悉的启动菜单栏了

      4、进入命令行启动ubuntu
              进入系统启动选项界面后还是进不去,
           因为你还没有真正的修改 grub, 这个要到 ubuntu 里修改
    进入系统启动项界面后,按 C 进入命令行模式
            grub > set root=hd0,msdos8
            grub > set prefix=(hd0,msdos8)/boot/grub
            grub > linux /vmlinuz-xxx-xxx root=/dev/sda8   // 里边的 xxxx 可以按 Tab 键,如果有 acpi 问题 , 在最后加一句 acpi=off
            grub > initrd /initrd.img-xxx-xxx
            grub > boot
           这样就可以进入了

            5、进入ubuntu修复grub
      在终端里运行         sudo update-grub
                                              sudo grub-install /dev/sda

           6、重启,搞定!!

     注:我当时只是修改了1~3步骤,然后在菜单栏就可以进入系统了,且一切正常。
           可惜,在重启时,系统就只有一个光标在左上角不停的闪,咋也进不了系统。后来开机按F2,开机启动项改为硬盘启动就好了。

    #################################################################################################

    法二
    首先制作 Ubuntu 启动 USB
      复制代码代码如下:
      sudo dd if=ubuntu-13.10-desktop-amd64.iso of=/dev/sdb1 #/dev/sdb1 为 USB 盘符
      1.使用启动 USB 进入 Ubuntu 试用环境
      2.查看硬盘分区状况,获取 Linux 系统安装分区编号
      代码如下:
      sudo fdisk -l
      查看输出结果,然后根据文件类型和分区大小来判定 Linux 系统安装在哪块硬盘和安装的分区。我的电脑是在 /dev/sda3 安装了 Fedora。
      或者,打开 Gparted 图形化工具来查看分区信息也可以。
      挂载 Fedora 安装分区
      3.已知 Fedora 安装在了 /dev/sda3 上,所以我们可以用下面命令来挂载 Fedora 安装分区。你需要将 /dev/sda3 换成自己的 Linux 安装分区。
      代码如下:
      sudo mount /dev/sda3 /mnt
      4.挂载其他所需的目录(使用 --bind)
      代码如下:
      sudo mount --bind /dev /mnt/dev
      sudo mount --bind /proc /mnt/proc
      sudo mount --bind /sys /mnt/sys
      5.Chroot 到硬盘上的 Linux 系统
      代码如下:
      sudo chroot /mnt 【chroot命令把根目录切换到指定目录下】
      6.安装&更新 Grub
      代码如下:
      grub2-install /dev/sda
      grub2-mkconfig -o /boot/grub2/grub.cfg
      7.Grub 已经修复成功,我们还需要退出 chroot 环境、卸载已经挂载的设备与目录:
      代码如下:
      exit #退出 chroot 环境
      sudo umount /mnt/dev
      sudo umount /mnt/proc
      sudo umount /mnt/sys
      sudo umount /mnt
      8.重启。
    #################################################################################################

    可以进grub 这就好办了 >root (hd0,x) 提示: 输入(后 ,按 TAB键 自动补全 很好用的 。x表示你的linux根分区
    >linux /vmlinuz ro quiet
    >initrd /initrd.lz
    >boot



    先找到menu.lst菜单文件:
    find --set-root /boot/grub/menu.lst
    然后加载:
    Grub 命令索引configfile /boot/grub/menu.lst
    菜单文件可以换成grub.conf试试。








    个人学习笔记,不当之处还请指正。
    ----------不定期更新------------





    展开全文
  • Linux引导过程概述

    千次阅读 2009-09-21 14:08:00
    Linux 的启动流程目前比较流行的方式主要是以下步骤: 1、引导器(例如 GRUB)启动; 2、内核启动; 3、系统进程启动与配置。 本文以 GRUB 为研究对象,对 GRUB 启动与内核启动两个部分进行描述,关于系统进程的...

        Linux 的启动流程目前比较流行的方式主要是以下步骤:
        1、引导器(例如 GRUB)启动;
        2、内核启动;
        3、系统进程启动与配置。

        本文以 GRUB 为研究对象,对 GRUB 启动与内核启动两个部分进行描述,关于系统进程的进一步启动与配置将用另一篇文章来说明。

    常见的目录结构 (以 CentOS 5.3 为例):

                          /boot
                           
    |-- System.map-2.6.18-128.el5
                            |-- System.map-2.6.18-128.el5xen
                            |-- config-2.6.18-128.el5
                            |-- config-2.6.18-128.el5xen
                            |-- initrd-2.6.18-128.el5.img
                            |-- initrd-2.6.18-128.el5xen.img
                            |-- lost+found
                            |-- memtest86+-1.65
                            |-- message
                            |-- symvers-2.6.18-128.el5.gz
                            |-- symvers-2.6.18-128.el5xen.gz
                            |-- vmlinuz-2.6.18-128.el5
                            |-- vmlinuz-2.6.18-128.el5xen
                            |-- xen-syms-2.6.18-128.el5
                            |-- xen.gz-2.6.18-128.el5
                            `-- grub
                                |-- device.map
                                |-- e2fs_stage1_5
                                |-- fat_stage1_5
                                |-- ffs_stage1_5
                                |-- grub.conf
                                |-- iso9660_stage1_5
                                |-- jfs_stage1_5
                                |-- menu.lst -> ./grub.conf
                                |- - minix_stage1_5
                                |-- reiserfs_stage1_5
                                |-- splash.xpm.gz
                                |-- stage1
                                |-- stage2
                                |-- ufs2_stage1_5
                                |-- vstafs_stage1_5
                                `-- xfs_stage1_5

                   图一: CentOS 5.3 的 /boot 目录

             目录分作两大部分,一个是 /boot 目录下除 grub 目录以外的所有文件,这些是 Linux 的内核以及内核启动相关的一些文件;另一个就是 grub 下的所有文件, GRUB 引导器启动所需要的所有文件都在 grub 目录下。

     



    核心文件组成:

                          /boot
                           
    |-- System.map-2.6.18-128.el5
                            |-- initrd-2.6.18-128.el5.img
                            |-- vmlinuz-2.6.18-128.el5
                            `-- grub
                                |-- grub.conf
                                |-- menu.lst -> ./grub.conf
                                |-- stage1
                                |-- stage2

                   图二: 核心文件说明

            图二是一个简化了的目录结构,在大多数Linux实现中,这些是 Linux 启动最核心的几个文件,下面我们对这个结构中的文件加以说明。

     



    内核文件说明:

            Linux 内核启动相关文件:

            vmlinuz  ---  Linux 内核
                    这个就是 Linux 可引导的、压缩的内核文件。
                    此文件通常后面带有内核版本号,但不是必需的,但有利于系统中存在多个不同的内核时加以区分。
                    vmlinuz 通常在 2.4 版内核时有两种方法建立,一个是通过编译时使用 make zimage 命令,这个方法是老的 2.4 版内核所支持的方式,用于生成较小的内核(512K 以下), 同时,在 2.4 版内核编译时使用 make bzimage 则可以生成一个大内核,其中 bz 的意思是 big zimage。 二者的主要区别在于小内核(zimage 形势)可以很小(4K),放在磁盘的前八个引导扇区,在装载时,先装载到
    0x1000:0000 高端内存,然后再移动到 0x0200:0000 位置的低端内存,然后启动CPU,所以可以不需要单独的引导器; 而 bzimage 形式较大,在 512K 以上 ,只能加载到 0x1000:0000 高端内存,然后启动CPU,需要有独立的引导器进行引导。
                    vmlinuz 在 2.6 版内核中并不直接支持 zimage 小内核方式,2.6版内核的编译过程不需要 make zimage 或 make bzimage 这一步 。
          
                    vmlinuz 虽然采用了 gzip 进行压缩 , 但由于其头部中添加了精简过的代码,所以不能直接用 gunzip 直接解压,我们通过观察一般的 gzip缩文件,发现有一个特征码 "1f8b" 。于是分析 vmlinuz 这个文件:


                    # xxd vmlinuz-2.6.18-128.el5 |egrep "/b1f8b"  |head -n5
                    0002080: 1b00 1f8b 0800 e642 7749 0203 ec3b 6d78  .......BwI...;mx
                    00315f0: ebe4 177f 065d 6e19 434a 4a5a 1f8b 111e  .....]n.CJJZ....
                    0058390: d1ad 1e11 0683 9f1f a857 1f8b a542 cb27  .........W...B.'
                    0073cb0: 9b51 e43c 482b 3685 1f8b 05f5 32fd b758  .Q.
                    0086a50: ed06 0bb5 1f8b 6d67 930c d7d0 2c6c 6c18  ......mg....,ll.

                    发现该特征码在 0x2082 处,由以下命令可以摘除这个部分:

                    # dd if=
    vmlinuz-2.6.18-128.el5  of=vmlinuztest.gz  bs=1  skip=$((0x2082))

                    然后解压 vmlinuz
    test.gz 即可得到二进制的内核。      

                    值得一提的是,2.4 以后版本的内核,不再提供无需引导器引导的机制 。                       

            initrd  ---  initialized  ram disk  初始化 RAM 磁盘
                    启动器(boot loader 即本文的 GRUB)会在内核启动前把 initrd 装入内存,该文件的作用是生成一个 RAM 磁盘,并在其上形成根文件系统,内核启动时会在访问真实的磁盘根文件系统前访问这个 RAM 磁盘中的根文件系统。2.6 版内核中,当内核执行完 initrd 中的内容后,对于 cpio 类型的 initrd ,会由 initrd 负责执行switchroot 来切换根文析系统到真实的文件系统中去,并开始真正的 init 进程;对于 image-initrd 这个类型来说,内核执行完 initrd 这个阶段以后,会返回到内核,继续内核初始化,然后由内核去调用真实文件系统中的 init 。本文的主要内容是介绍 Linux 2.6 版引导的过程,对于initrd 的更多细节不再赘述,有兴趣的读者,可以查阅相关的链接 。 关于 initrd 的动手实验,则可以在本站中找到

                    此文件通常后面带有内核版本号,但不是必需的,但有利于系统中存在多个不同的内核时加以区分。

                    关于 initrd 的另一个重点,是为什么要使用它,initrd 最重要的作用在于使引导过程更加灵活。为了在各种硬件平台上启动,将所有的硬件驱动都放到内核中显然不现实,initrd 的作用之一就是加载硬件驱动模块,从而可以在内核中只包含最基本的硬件驱动即可,将加载不同硬件驱动的任务交给 initrd ;关于 initrd 的另一个作用是支持 usb 启动,由于 usb 从驱动加载到真正可用的过程较慢,可能需要几秒钟的时间比较慢,在内核访问usb时,USB 设备可能还没初始化完成,将该过程放入到 initrd 中可以进行延时,完成正确加载和引导。

                    在某些情况下,我们可以使用 noinitrd 参数,使启动过程不使用 initrd 文件是可能的。        

     

            System.map  ---  内核符号映射表
                   
    在弄清楚 System.map 的作用以前,首先要先了解两个名词,其中一个叫做 symbol(符号),另一个叫做 Oops 。

             Symbol : 符号,学过程序设计的话应该知道,一个符号是一个程序的创建块,它是一个变量名或一个函数名。 这里为什么要提到这个名词呢? 因为 Linux 内核并不使用符号来调用函数,而是直接使用函数的地址(指针), 这似乎造成了一个矛盾,因为编程的人并不喜欢使用地址的方式,于是符号表产生了,它允许在编程的过程中,使用符号,但是在编译时使用地址,”符号映射表 “由此产生了,它就是 System.map .

             用 more 命令查看 System.map 文件可以看到类似下面的段:

             64位的系统:

             ffffffff81000000 A _text
             ffffffff81000000 T startup_64
             ffffffff810000b7 t ident_complete
             ffffffff81000100 T secondary_startup_64

             32位的系统:

             c0100000 A _text
             c0100000 T startup_32
             c01000c6 t checkCPUtype
             c0100147 t is486

                    Oops : 当内核引用了一个无效指针时,通常被称为 Oops ,说明内核存在一个Bug。 内核在出现此错误时,会由 klogd 这个服务将此错误记载到日志中,如果该日志指出一个地址错误,显然还需要我们花些时间来找该地址对应的符号,klogd 通过检视 System.map 直接将符号取出,并记载该符号引发了一个 Oops 。

                    通过以上的描述,我们得到一个结论:System.map 是一个静态的内核符号映射表!

                    既然说到静态,那么就说明如果是在运行期间动态加载的某些模块,可能不在其中,如何得到它们呢? 系统中的 proc 文件系统中存在一个动态的映射表, 在 2.6 Kernel 中通常是 /proc/kallsyms 。

                    另外,类似 lsof 和 ps 等命令,是需要这个映射表的存在的,但既使没有这个文件,系统的启动依然可以进行。

     

     



    GRUB 文件说明:


            stage1  ---  磁盘引导第一阶段
                    当 BIOS 加电自检完成以后,假设系统是从硬盘启动,则 BIOS 的最后一件事情就是读取该硬盘的 0 道 0 面 1 扇区,即我们常用说的 MBR ,它只有 512 个字节大小,它与 stage1 具有什么样的关系呢? 我们先来看一下关于 MBR 的构成:


    图三:MBR 的组成(摘自 IBM 官方网站)


                    MBR 共由三个部分组成:1、Bootloader 就是引导代码,其作用主要是加载第二阶段启动(即stage2),2、Partition table 分区表, 3、Magic Number 魔数,就是那个 55AA 标志,用以检验该 MBR 的有效性。

                    我们可以用如下命令导出该扇区到文件(假设该硬盘为 hda):

                          dd  if=/dev/hda  of=mbr.bin  bs=512  count=1

                    然后我们用

                         xxd  mbr.bin

                         xxd  /boot/grub/stage1

                   仔细对比发现,该扇区的 Bootloader 部分与 MagicNumber部分与 stage1 文件完全一样,原来,在使用 grub 的安装命令进行引导器安装时,grub 会用 stage1 文件的前 446 字节覆盖 MBR的前446 字节。在这里我们得到另一个启示,那就是不能简单的认为 MBR 等价于 stage1 ,为了保护 MBR ,我们还是应该对 MBR 做备份。

     

            stage1_5  ---  关于文件系统格式的“魔术师”
                    应该注意到,所有带有 stage1_5 字样的文件,全部都和文件系统名字有关:

                                |-- e2fs_stage1_5
                                |-- fat_stage1_5
                                |-- ffs_stage1_5
                                |-- iso9660_stage1_5
                                |-- jfs_stage1_5
                                 |- - minix_stage1_5
                                |-- reiserfs_stage1_5
                                 |-- ufs2_stage1_5
                                |-- vstafs_stage1_5
                                `-- xfs_stage1_5

                    顾名思义,其实 stage1_5d 确实是在 stage1 和 stage2 之间运行的,它包括了一些常见的文件系统的识别能力,这些文件的存在,意味着 grub 可以从多种文件系统中读取并加载 Linux 内核。

                    这个特性使得 grub 更加灵活的处理不同的文件系统格式。

                    虽然有 e2fs_stage1_5 这个文件的存在,但经过实验,我们发现在默认情况下编译的内核如果装载在 ext3 文件系统上,是不需要 stage1_5这个过程的。

     

           stage2  ---  真正的 grub 就在这里
                    注意到 stage2 的文件尺寸,超过了 512 字节的大小,所以 grub 本身并不能放到 mbr 中去,mbr  那446字节的作用,主要就是找到这个 stage2,它读取 menu.list 文件显示系统引导菜单,识别不同的引导指令,并完成 vmlinuz 和 initrd 的加载,其实,这个就是真正的 grub 了!

                    menu.list 文件就是 grub 的引导菜单, grub 会执行菜单里的命令,完成引导,因为红帽这个系列的系统进行了一些特别的设置,所以存在一个叫做 grub.conf 的软链接,指向 menu.list 。

     

     



    结论:

                    启动中最重要的东西:mbr/stage1 、grub/stage2 、kernel/vmlinuz ,三者是最最核心的。stage1_5 的作用是使 grub 有处理更多文件系统的灵活能力,而 initrd 使内核启动更加灵活,在不同的平台上,对不同的硬件,使用不同的驱动,从而减小静态内核的尺寸。

    展开全文
  • 使用mac制作linux启动

    千次阅读 2020-03-23 14:29:34
    使用mac制作linux启动 最近因为公司项目需求,需要区客户现场安装两台linux服务器。系统为centos7.对于之前没有亲自安装过linux服务器工业主机的系统的我有点懵,不过经过一个晚上的探索最后发现还是非常简单的。...
  • 理解Linux的硬盘分区

    千次阅读 2010-07-12 11:55:00
    理解Linux的硬盘分区
  • 使用mac制作linux启动        最近因为公司项目需求,需要区客户现场安装两台linux服务器。系统为centos7.对于之前没有亲自安装过linux服务器工业主机的系统的我有点懵,不过...
  • 硬盘安装Linux详解(绝对是菜鸟级的详细步骤)本人是个菜鸟,啥也不懂,啥也不会,就是想玩玩人家说的牛B的Linux。但经网上多方查找老鸟们的资料,又根据自身摸索,终于用了几个小时,成功在Windows下安装上Linux,...
  • LINUX-U盘安装CentOS6.7

    万次阅读 2015-12-07 20:33:15
    最近一直忙着要搭建LAMP开发环境,之前在VM里配置了一下,发现无法下载PHP,所以直接来个物理安装CentOS再测试。 网上的教程很多都是转载的,而且,都不知道是否有经过验证。...一、制作U盘引导盘。 这里有特别的说明下
  • Linux0.11的内核引导启动流程

    千次阅读 2015-08-19 16:33:40
    Linux0.11的内核引导启动程序由boot/目录下的bootsect.s、setup.s和head.s完成,由于内核的启动涉及到硬件操作比较多,所以均是汇编文件。  讲述内核引导启动流程前,先了解Linux0.11中的bootsect.s、setup.s和...
  • Linux 内核引导选项简介

    千次阅读 2017-02-23 20:20:41
    概述内核引导选项大体上可以分为两类:一类与设备无关、另一类与设备有关。与设备有关的引导选项多如牛毛,需要你自己阅读内核中的相应驱动程序源码以获取其能够接受的引导选项。比如,如果你想知道可以向 AHA1542 ...
  • 今天用U盘装linux时候不小心将grub安装到了U盘上,导致每次启动系统都得插U盘,下面是解决办法,拷贝时忘了记下转载出处,实在不好意思。 ----------------------------------------------------------------------...
  • 用 UNetbootin 可以轻松的把 Linux 操作系统装进 U 你可将U盘插到 USB 接口。 注意:一定要先插U盘再运行 UNetbootin!然后从菜单“应用程序——系统工具”...LiLi USB Creator 2.9.4 中文特别Linux 安装助手工具
  • Linux启动boot/root的制作

    千次阅读 2010-07-15 16:24:00
    Linux启动boot/root的制作 boot/root由两部分组成,即核心和根文件系统 。要把这两部分都放到一个1.44MB的软盘上去, 通常要对内核和根文件系统进行压缩,压缩核心的最好方法是进行重新编译内核,将...
  • Linux硬盘分区

    千次阅读 2008-01-03 09:42:00
    1. Linux 硬盘分区的实际操作 尽管可以根据我们已经提到的分区原则,将L i n u x 装在一个单一的大分区中,但更好的主意是将它分开。综合了单一分区的简单性和多分区的灵活性,我们推荐以下配置。请注意: 如果你想...
  • 安装Linux工作站

    千次阅读 2006-01-20 05:35:00
    随着Linux的日益流行,使用Linux的人越来越多,其实Linux 对远程引导的支持非常好,Linnx内核自身又支持网络文件系统,因此非常适合做无工作站,本文将以一个实例向大家详细介绍无盘Linux工作站的安装办法。...
  • Linux 内核引导参数简介

    千次阅读 2015-04-09 17:30:36
    内核如何处理引导参数 绝大部分的内核引导参数的...如果"name"不能被识别并且满足"name=value"的格式,那么将被解译为一个环境变量(比如"TERM=linux"或"BOOT_IMAGE=vmlinuz.bak"),否则将被原封不动的传递给 init 程
  • linux硬盘分区讲解

    万次阅读 2011-02-13 14:08:00
     在学习 Linux 的过程中,安装 Linux 是每一个初学者的第一个门槛。在这个过程中间,最大的困惑莫过于给硬盘进行分区。虽然,现在各种发行版本的 Linux 已经提供了友好的图形交互界面,但是很多的人还是感觉...
  • 加快LINUX引导

    千次阅读 2004-08-27 01:07:00
    通过并行化 Linux 系统服务来提高引导速度 级别:中级James Hunt (jameshunt-at-uk.ibm.com软件工程师,IBM2003 年 11 月本文向您描述了如何在不影响可用性的前提下加快 Linux 操作系统的引导速度。当然,这种方法...
  • 加快 Linux引导

    千次阅读 2004-08-05 23:32:00
    James Hunt (jameshunt-at-uk.ibm.com)软件工程师,IBM2003 年 11 月本文向您描述了如何在不影响可用性的前提下加快 Linux 操作系统的引导速度。当然,这种方法要求您对系统服务及服务之间的依赖关系有所理解,如果...
  • 10005.制作Linux的优盘启动

    千次阅读 2004-10-15 10:26:00
    由于具有轻巧精致、使用方便、便于携带等优点,特别是对比软盘具有容量较大、安全可靠、读取速度较快等特性,越来越多人使用这种装置取代了软驱与软盘,在PC之间交换文件。目前新出的主板BIOS都支持USB软盘和硬盘的...
  • Linux开机引导与关机过程

    千次阅读 2015-11-06 12:16:32
    (转) Bootstrapping(引导) 是 Staring up a computer 的标准术语。 操作系统所提供的正常功能在启动过程中还...引导阶段是系统特别脆弱的一段时间。 配置文件中的错误,丢失设备或者设备不可靠,以及受损的文件
  • 学习 Linux, 引导系统

    千次阅读 2012-04-14 20:09:46
    本文将帮助您理解从 BIOS 到引导结束整个过程的引导顺序,并演示方法: 向启动加载程序提供常用命令在引导时向内核提供选项检查日志文件中的引导事件 引导进程的某些特征是大多数系统所共有的,但有些硬件相关...
  • Linux面试题(2020最新版)

    万次阅读 多人点赞 2020-03-01 11:14:38
    文章目录Linux 概述什么是LinuxUnix和Linux有什么区别?什么是 Linux 内核?Linux的基本组件是什么?Linux 的体系结构BASH和DOS之间的基本区别是什么?Linux 开机启动过程?Linux系统缺省的运行级别?Linux 使用的...
  • linux grub 引导启动过程详解

    千次阅读 2010-12-14 21:25:00
    机器加电启动后,BIOS开始检测系统参数,如内存的大小,日期和时间,磁盘 设备及这些磁盘设备用来引导的顺序,通常...装载操作系统的这个程式就是boot loader.  linux里面的boot loader通常是lilo或grub
  • 制作Linux的优盘(usb)启动

    千次阅读 2007-01-16 09:37:00
    由于具有轻巧精致、使用方便、便于携带等优点,特别是对比软盘具有 容量较大、安全可靠、读取速度较快等特性,越来越多人使用这种装置取代了软驱与软盘,在PC之间交换文件。目前新出的主板BIOS都支持USB软盘和硬盘 ...
  • linux 硬盘分区及移动硬盘挂载

    千次阅读 2011-04-13 13:35:00
    以前安装Linux都是使用自动分配磁盘空间,感觉这样不太专业,于是乎在百度和GOOGLE中找了一通,看到一篇不错的。。郁闷的是并 没有发现文中所说的扩展分区设置(选项中只看到主分区和逻辑分区,我的理解是他会自动将...
  • Linux磁盘分区以及多重引导简述

    千次阅读 2016-08-24 15:02:53
    Linux磁盘分区以及多重引导简述

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 20,127
精华内容 8,050
关键字:

linux引导盘特别小

linux 订阅