grub2


大约2002年左右,Yoshinori K.Okuji在PUPA重写了GRUB,使他更清晰,安全,健壮,更强大,PUPA最后把他重命名为GRUB2,把原来版本的grub命名为GRUBLegacy,2005年发行了grub legacy(0.97),2007 GNU/Linux开始在小范围内使用GRUB2,到2009年底大多数主要的发行版都开始默认安装GRUB2。

    虽然grub2是重写的grub,但是他借鉴了grub的一些特征,grub2改进如下:

    1引导配置文件采用新名字grub.cfg,新的语法,加入许多新的命令

    2 grub.cfg是用grub-mkconfig自动产生的,由update-grub维护,在执行update-grub之前修改的配置都不会生效,这样可以很容易的应对内核升级这样情况。

    3grub2中的分区号不再是以0开始,而是以1开始。

   4 配置文件是不可写的,而是修改文件后用命令自动更新

   5grub2有更可靠的方法在磁盘上有多系统时发现文件和目标内核,可以用命令发现系统设备号或者UUID。

   6 更多的文件系统支持,如ext4 hfs ntfs

  7 grub2可以直接从lvm和raid读取文件

  8 在grub中的stage1 stage1.5stage2已经被取消

  9 grub2引入很多设备模块,允许core镜像更小

  10 支持脚本,包括简单的语法

  11 在启动时没有选择菜单的话,按住shift即可强制显示菜单


    boot loader是计算机启动时运行的第一个程序,核他负责加载内核并将控制权交给操作系统的内核,然后内核开始初始化系统的剩余部分,grub是个功能强大的工具,可以加载各种各样的操作系统,grub一个重要的特性就是灵活,他可以理解文件系统和内核的执行方式,所以你可以使用你喜欢的方式加载操作系统,当你用grub引导时你可以用命令行接口模式或者菜单模式,你也可以在菜单模式下转入命令行模式。

    grub2的组件为grub-pc,同时grub-common也会默认被安装,grub2是过渡期的虚拟组件,会被安全移除。

    Grub2的相挂钩脚本如下:

    grub-install 

  1安装grub到设备中,如果需要会创建/boot/grub目录

  2 他会把*.mod、*.lst、*.img从 /usr/lib/grub/i386-pc/目录复制到/boot/grub目录下,他会覆盖已有文件

  3然后会调用grub_probe扫描计算机并收集磁盘和分区信息

  4 接着调用grub_mkimage构建一个新的new.img

  5最后调用grub_setup把grub的boot.img写入MBR中,把core.img写进设备的第一个扇区。

  注意grub_install并不运行grub_mkconfig

1grub-install-v

    显示版本号

1grub-install/dev/sda

    这表示你希望把grub安装进/dev/sda(把boot.img写进第一块硬盘的MBR),如果由于某些原因你想把grub安装到单独的boot分区,可以使用/dev/sdaX,grub2不建议这样,因为他会减小grub的可靠性,或者其他用户用grub-install把grub装进了错误的分区导致操作系统的危险性。

1grub-install--root-directory=/media/grub2 /dev/sda

    创建一个大约60M的分区,用文件系统格式化分区,把他挂载到/media/grub2,/dev/sda是指把stage1写入MBR

1mke2fs /dev/fd0
2mount -t ext2 /dev/fd0 /mnt
3mkdir /mnt/boot
4grub-install--boot-directory=/mnt/boot /dev/fd0
5umount /dev/fd0

     创建一个软驱启动盘

     注意grub-install只是一个脚本,内部真正执行工作的是grub-mkimage和grub-setup,因此你也可以直接用着两个命令安装grub,建议还是用grub-install,除非你非常熟悉grub内部。

    update-grub

   update-grub主要是在每次配置文件有更新后生成新的grub.cfg,其实update-grub是调用grub-mkconfig,在系统中还有一个update-grub2,发现他是调用update-grub

    grub-mkconfig

   调用grub-mkdevicemap和grub-probe生成grub.cfg

    grub-set-default

   设置在下次进入系统时从哪个内核选项进去

   grub-mkdevicemap

    为grub自动产生新的device.map,grub-mkdevicemap程序可以创建device.map文件,在执行grub-install时会自动执行他以创建映像关系,如果文件不存在,则会读取/boot/grub/devicd.map这个文件,如果映像文件存在,则grub读取他创建BIOS drives to OS drives

    grub-setup

   被grub_install调用,安装grub

   grub-probe 

   从给定的设备上探测设备信息

   grub2有两中不同的引导方法,一个是直接加载操作系统,一个是连锁(chain-load)到另一个bootload,然后再从另一个bootload加载系统,一般来说第一个更常用,但是假如grub不支持所有的操作系统就需要这种方法。


  Grub2镜像:

     boot.img

    在PC BIOS系统中,boot.img在grub启动的第一部分,他被写入MBR或者boot分区,因为PC的boot扇区只有512bytes,所以此文件精确到只有512bytes,他唯一的功能是从本地磁盘读取内核镜像第一个扇区位置然后跳到内核镜像,因为文件大小的限制,boot.img不能识别任何文件系统,所以当安装grub时,grub-setup把内核镜像第一个扇区的位置硬编码进boot.img中。

    diskboot.img

   当从硬盘引导时此镜像作为内核镜像的第一个扇区的内容,他把剩余的内核镜像读入内存中然后启动内核。

     cdboot.img 的原理同上

     pxeboot.img

    当从网络用PXE引导时用次镜像启动内核镜像

     kernel.img

     此镜像包含grub运行时包含的基本工具,框架驱动、文件句柄、环境变量、安全模式命令行解析器等,他可以直接使用,但是编译进所有的内核镜像中了。

     core.img

     这是grub的内核镜像,他被grub-mkimage程序从kernel.img和一些模块动态编译而成,一般情况下他已经包含足够的模块去访问/boot/grub,模块机制可以使得内核镜像保持很小。

     *.mod

     其余的一切是可以动态加载的一些模块,当需要他们时,他们是被自动加载编译进内核镜像的,但也可以使用insmod手动加载。


    grublegacy的镜像文件

      stage1 

      他非常像grub2中的boot.img,他们有一样的功能

      *_stage1_5

       在grublegacy中,stage1_5的作用是包含足够的系统代码从而可以使更大的stage2从普通系统上读入,他有点像grub2中的core.img但是core.img比他功能强多了,grublegacy可以只使用stage1和stage2在一些受限制的情况下工作,但是grub2没有core.img就不能工作。

       stage2

      grub2没有stage2镜像,代替的是他运行时从/boot/grub加载模块


    grub2包含一个完全修改过的配置文件及目录,menu.list不再使用

   grub2采用模块化的设计,主要配置文件是/boot/grub/grub.cfg,但是这个文件的权限是444,连root也不让修改,这是刻意为之的,不要修改文件权限,grub.cfg的内容更新由update-grub命令来更新,其实就是执行grub-mkconfig-o /boot/grub/grub.cfg来更新,此文件会在更新内核自动更新,在/oot/grub目录下有很多模块文件,以在按需时自动加载模块。每段模块配置的加载以### BEGIN xxx ###开始,以### END xxx###结尾。

   /etc/default/grub

   此文件包含menu.list的前半部分内容,以及每行内核配置后面追加的配置,在更新时会合并到grub.cfg中

   /etc/grub.d/目录

   update-grub命令执行时会读取此目录下的文件,并将配置合并至grub.cfg中,grub.cfg中的菜单顺序是由此目录中的文件顺序决定的,文件开头数字较小的会先执行,全英文名字的文件将会在最后执行,自定义选项在40_custom中定义,或者建立一个新文件,此目录下的文件必须有执行权限才会被update-grub读取,并把配置合并到grub.cfg中。

     00_header

    配置初始的显示项目,如默认选项,时间限制等,一般由/etc/default/grub导入,一般不需要配置

     05_debian_theme

   配置引导画面,文字颜色等主题

    10_linux

   定位当前操作系统使用中的root设备内核的位置

    30_os-prober

   用来搜索linux和其他系统,此脚本中的变量用来指定在/boot/grub/grub.cfg 和grub2菜单中的名称显示方式,可以修改/etc/default/grub光比这个脚本

    40_custom

   用来加入用户自定义的菜单样板,将会在执行update-grub时更新至grub.cfg中

    41_custom

   判断custom.cfg此配置文件是否存在,如果存在就加载它

   

  定制自己的配置文件

       配置文件在/boot/grub/grub.cfg,此文件是只读的不允许手动修改,grub-mkconfig在大多数情况下生成grub.cfg,他适合升级发行版系统,发现可用内核并打算加入菜单中,grub-mkconfig也有一些限制,当打算加入一个普通的菜单选项时可以编辑/etc/grub.d/40_custom或者/boot/grub/custom.cfg。

       /etc/default/grub控制grub-mkconfig的操作,grub里面是以键值对存在的选项,如果值有空格或者其他字符需要用引号引起来,参数如下

       GRUB_DEFAULT 

       默认的菜单选择项,值可以是数字,默认从0开始,值也可以是title后面的字符串,当值是‘saved’时有特殊含义:默认的菜单选则项会被保存在GRUB_SAVEDEFAULT中,下次启动时会从这个值启动。当值为saved是可以用grub-set-default和grub-reboot来设置默认启动项,grub-set-default直到下次修改前都有效,grub-reboot下次启动时生效

      GRUB_SAVEDEFAULT

      只有这个值是true,GRUB_DEFAULT是saved时才会起作用

      GRUB_TIMEOUT

      选择菜单的显示时间,默认是5,值是0表示不显示菜单选项,值是-1表示无限期的等待做出选择

      GRUB_HIDDEN_TIMEOUT

      grub2第一次执行时会寻找其他操作系统,如果没有检测到则会将菜单隐藏,如果有其他操作系统才会显示菜单,如果参数大于0,则会等待响应的秒数,但是不会显示菜单,可以按住shift显示菜单。

      GRUB_DISTRIBUTOR

      菜单中的描述名称,采用命令lsb_release判断,应该是红帽系列的,如果不是就归为Debian

      GRUB_CMDLINE_LINUX

      此行将追加到所有的linux 定义内核行的后面,不论是救援模式还是一般模式

      GRUB_CMDLINE_LINUX_DEFAULT

      次选项只会追加在一般模式后面,同上

      GRUB_TERMINAL=console

      启用console,默认注释状态

      GRUB_DISABLE_LINUX_UUID=true

      在grub中指定root时可以使用UUID,默认注释

      GRUB_GFXMODE=640x480

      图形化菜单的分辨率,默认注释

      GRUB_DISABLE_LINUX_RECOVERY=true

      禁止显示救援模式

 

      在建立自定义菜单时要注意关键字已经和grub legacy不一样了:

      title 更改为 menuentry 并且以{结束,

       insmod可以加载所需要的模块

       root 更改为 set root=

       kernel 更改为linux


http://my.oschina.net/guol/blog/37373


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!
提供的源码资源涵盖了小程序应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!
提供的源码资源涵盖了Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值