用宿主系统grub引导LFS
来源:互联网 发布:淘宝店铺导航条 css 编辑:程序博客网 时间:2024/05/22 11:51
http://www.cnblogs.com/nrobot/archive/2012/03/25/2416614.html
如果按照LFS Book使用gurb的做法做,LFS的grub会覆盖原来系统的grub,有可能失去对原来系统的引导。
这方法应该对Gentoo有效,没做过,不太清楚。
笔者本来是Windows7+ubuntu11.04系统,grub内容如下:
/boot/grub/grub.cfg
## DO NOT EDIT THIS FILE## It is automatically generated by grub-mkconfig using templates# from /etc/grub.d and settings from /etc/default/grub#### BEGIN /etc/grub.d/00_header ###if [ -s $prefix/grubenv ]; then set have_grubenv=true load_envfiset default="0"if [ "${prev_saved_entry}" ]; then set saved_entry="${prev_saved_entry}" save_env saved_entry set prev_saved_entry= save_env prev_saved_entry set boot_once=truefifunction savedefault { if [ -z "${boot_once}" ]; then saved_entry="${chosen}" save_env saved_entry fi}function recordfail { set recordfail=1 if [ -n "${have_grubenv}" ]; then if [ -z "${boot_once}" ]; then save_env recordfail; fi; fi}function load_video { insmod vbe insmod vga insmod video_bochs insmod video_cirrus}insmod part_msdosinsmod ext2set root='(hd0,msdos9)'search --no-floppy --fs-uuid --set=root 17984c85-e681-4de0-adab-bed448e4eae0if loadfont /usr/share/grub/unicode.pf2 ; then set gfxmode=auto load_video insmod gfxterm insmod part_msdos insmod ext2 set root='(hd0,msdos9)' search --no-floppy --fs-uuid --set=root 17984c85-e681-4de0-adab-bed448e4eae0 set locale_dir=($root)/boot/grub/locale set lang=zh_CN insmod gettextfiterminal_output gfxtermif [ "${recordfail}" = 1 ]; then set timeout=-1else set timeout=10fi### END /etc/grub.d/00_header ###### BEGIN /etc/grub.d/05_debian_theme ###set menu_color_normal=white/blackset menu_color_highlight=black/light-grayif background_color 44,0,30; then clearfi### END /etc/grub.d/05_debian_theme ###### BEGIN /etc/grub.d/10_linux ###if [ ${recordfail} != 1 ]; then if [ -e ${prefix}/gfxblacklist.txt ]; then if hwmatch ${prefix}/gfxblacklist.txt 3; then if [ ${match} = 0 ]; then set linux_gfx_mode=keep else set linux_gfx_mode=text fi else set linux_gfx_mode=text fi else set linux_gfx_mode=keep fielse set linux_gfx_mode=textfiexport linux_gfx_modeif [ "$linux_gfx_mode" != "text" ]; then load_video; fimenuentry 'Ubuntu,Linux 3.0.0-16-generic' --class ubuntu --class gnu-linux --class gnu --class os { recordfail set gfxpayload=$linux_gfx_mode insmod gzio insmod part_msdos insmod ext2 set root='(hd0,msdos9)' search --no-floppy --fs-uuid --set=root 17984c85-e681-4de0-adab-bed448e4eae0 linux /boot/vmlinuz-3.0.0-16-generic root=UUID=17984c85-e681-4de0-adab-bed448e4eae0 ro quiet splash vt.handoff=7 initrd /boot/initrd.img-3.0.0-16-generic}menuentry 'Ubuntu,Linux 3.0.0-16-generic (恢复模式)' --class ubuntu --class gnu-linux --class gnu --class os { recordfail insmod gzio insmod part_msdos insmod ext2 set root='(hd0,msdos9)' search --no-floppy --fs-uuid --set=root 17984c85-e681-4de0-adab-bed448e4eae0 echo '载入 Linux 3.0.0-16-generic ...' linux /boot/vmlinuz-3.0.0-16-generic root=UUID=17984c85-e681-4de0-adab-bed448e4eae0 ro recovery nomodeset echo '载入初始化内存盘...' initrd /boot/initrd.img-3.0.0-16-generic}submenu "Previous Linux versions" {menuentry 'Ubuntu,Linux 3.0.0-12-generic' --class ubuntu --class gnu-linux --class gnu --class os { recordfail set gfxpayload=$linux_gfx_mode insmod gzio insmod part_msdos insmod ext2 set root='(hd0,msdos9)' search --no-floppy --fs-uuid --set=root 17984c85-e681-4de0-adab-bed448e4eae0 linux /boot/vmlinuz-3.0.0-12-generic root=UUID=17984c85-e681-4de0-adab-bed448e4eae0 ro quiet splash vt.handoff=7 initrd /boot/initrd.img-3.0.0-12-generic}menuentry 'Ubuntu,Linux 3.0.0-12-generic (恢复模式)' --class ubuntu --class gnu-linux --class gnu --class os { recordfail insmod gzio insmod part_msdos insmod ext2 set root='(hd0,msdos9)' search --no-floppy --fs-uuid --set=root 17984c85-e681-4de0-adab-bed448e4eae0 echo '载入 Linux 3.0.0-12-generic ...' linux /boot/vmlinuz-3.0.0-12-generic root=UUID=17984c85-e681-4de0-adab-bed448e4eae0 ro recovery nomodeset echo '载入初始化内存盘...' initrd /boot/initrd.img-3.0.0-12-generic}}### END /etc/grub.d/10_linux ###### BEGIN /etc/grub.d/20_linux_xen ###### END /etc/grub.d/20_linux_xen ###### BEGIN /etc/grub.d/20_memtest86+ ###menuentry "Memory test (memtest86+)" { insmod part_msdos insmod ext2 set root='(hd0,msdos9)' search --no-floppy --fs-uuid --set=root 17984c85-e681-4de0-adab-bed448e4eae0 linux16 /boot/memtest86+.bin}menuentry "Memory test (memtest86+, serial console 115200)" { insmod part_msdos insmod ext2 set root='(hd0,msdos9)' search --no-floppy --fs-uuid --set=root 17984c85-e681-4de0-adab-bed448e4eae0 linux16 /boot/memtest86+.bin console=ttyS0,115200n8}### END /etc/grub.d/20_memtest86+ ###### BEGIN /etc/grub.d/30_os-prober ###menuentry "Windows 7 (loader) (on /dev/sda1)" --class windows --class os { insmod part_msdos insmod ntfs set root='(hd0,msdos1)' search --no-floppy --fs-uuid --set=root F22A8D3E2A8D00B9 chainloader +1}### END /etc/grub.d/30_os-prober ###### BEGIN /etc/grub.d/40_custom #### This file provides an easy way to add custom menu entries. Simply type the# menu entries you want to add after this comment. Be careful not to change# the 'exec tail' line above.### END /etc/grub.d/40_custom ###### BEGIN /etc/grub.d/41_custom ###if [ -f $prefix/custom.cfg ]; then source $prefix/custom.cfg;fi### END /etc/grub.d/41_custom ###
电脑启动后会读取grub.cfg文件并显示grub菜单,注意,一个menuentry就是一个菜单项,一个submenu就是一个包含子菜单的菜单项,它们的内容都被“{}”括起来的内容,修改grub文件时,切记不能乱嵌套"{}",切记不能交叉嵌套。
请完整看接下来的一段话,并理解它:
我们的任务是,根据LFS book的步骤,在LFS系统(chroot后)中生成/boot/grub/grub.cfg,只做生成grub的操作而不更新主引导记录(更新的话就覆盖了原来的grub)。然后把新生成的grub.cfg中的LFS启动项添加到宿主系统grub.cfg文件中。
按照LFS book中第八章《使用Grub配置启动过程》的步骤做如下操作(假设你已经做完前面所有的工作,包括安装grub)
注意:这是在chroot环境下的操作:
1、讲grub文件安装到/boot/grub:
grub-install --grub-setup=/bin/true /dev/sda
2、生成/boot/grub/grub.cfg
grub-mkconfig -o /boot/grub/grub.cfg
测试grub你可以自己做也可以不做,到这里停住,不能执行更新主引导记录的操作。
打开一个新的终端,并用gedit打开刚生成的grub.cfg文件。
sudo gedit /mnt/lfs/boot/grub/grub.cfg
我的内容如下:
## DO NOT EDIT THIS FILE## It is automatically generated by grub-mkconfig using templates# from /etc/grub.d and settings from /etc/default/grub#### BEGIN /etc/grub.d/00_header ###if [ -s $prefix/grubenv ]; then load_envfiset default="0"if [ "${prev_saved_entry}" ]; then set saved_entry="${prev_saved_entry}" save_env saved_entry set prev_saved_entry= save_env prev_saved_entry set boot_once=truefifunction savedefault { if [ -z "${boot_once}" ]; then saved_entry="${chosen}" save_env saved_entry fi}function load_video { insmod vbe insmod vga insmod video_bochs insmod video_cirrus}set timeout=5### END /etc/grub.d/00_header ###### BEGIN /etc/grub.d/10_linux ###menuentry 'GNU/Linux, with Linux 3.2.6-lfs-7.1' --class gnu-linux --class gnu --class os { load_video insmod gzio insmod part_msdos insmod ext2 set root='(hd0,msdos6)' search --no-floppy --fs-uuid --set=root d05c4b59-a4b3-4466-9ed4-4f13fd84d8f1 echo 'Loading Linux 3.2.6-lfs-7.1 ...' linux /boot/vmlinuz-3.2.6-lfs-7.1 root=/dev/sda6 ro }menuentry 'GNU/Linux, with Linux 3.2.6-lfs-7.1 (recovery mode)' --class gnu-linux --class gnu --class os { load_video insmod gzio insmod part_msdos insmod ext2 set root='(hd0,msdos6)' search --no-floppy --fs-uuid --set=root d05c4b59-a4b3-4466-9ed4-4f13fd84d8f1 echo 'Loading Linux 3.2.6-lfs-7.1 ...' linux /boot/vmlinuz-3.2.6-lfs-7.1 root=/dev/sda6 ro single }### END /etc/grub.d/10_linux ###### BEGIN /etc/grub.d/20_linux_xen ###### END /etc/grub.d/20_linux_xen ###### BEGIN /etc/grub.d/30_os-prober ###### END /etc/grub.d/30_os-prober ###### BEGIN /etc/grub.d/40_custom #### This file provides an easy way to add custom menu entries. Simply type the# menu entries you want to add after this comment. Be careful not to change# the 'exec tail' line above.### END /etc/grub.d/40_custom ###### BEGIN /etc/grub.d/41_custom ###if [ -f $prefix/custom.cfg ]; then source $prefix/custom.cfg;fi### END /etc/grub.d/41_custom ###
其他不管,找到并复制两个(或一个)LFS的menuentry。我的如下:
menuentry 'GNU/Linux, with Linux 3.2.6-lfs-7.1' --class gnu-linux --class gnu --class os { load_video insmod gzio insmod part_msdos insmod ext2 set root='(hd0,msdos6)' search --no-floppy --fs-uuid --set=root d05c4b59-a4b3-4466-9ed4-4f13fd84d8f1 echo 'Loading Linux 3.2.6-lfs-7.1 ...' linux /boot/vmlinuz-3.2.6-lfs-7.1 root=/dev/sda6 ro }menuentry 'GNU/Linux, with Linux 3.2.6-lfs-7.1 (recovery mode)' --class gnu-linux --class gnu --class os { load_video insmod gzio insmod part_msdos insmod ext2 set root='(hd0,msdos6)' search --no-floppy --fs-uuid --set=root d05c4b59-a4b3-4466-9ed4-4f13fd84d8f1 echo 'Loading Linux 3.2.6-lfs-7.1 ...' linux /boot/vmlinuz-3.2.6-lfs-7.1 root=/dev/sda6 ro single }
复制menuentry后,关闭gedit窗口。
打开宿主系统grub文件:
sudo gedit /boot/grub/grub.cfg
把刚复制的内容粘帖到你想要的位置,注意不要乱嵌套。
保存。
OK。正确的话,重启后你原来的grub菜单会多出LFS的启动项。如果引导失败,那很有可能是因为粘帖LFS的menuentry时嵌套到其他系统的menuentry里去了,准备好修复吧。- 用宿主系统grub引导LFS
- 制作grub引导定制LFS
- 用GRUB引导多系统
- LFS之(3)GRUB引导设置
- 系统引导管理器GRUB
- 系统引导管理器GRUB
- 系统引导管理器GRUB
- 系统引导管理器GRUB
- 系统引导管理器GRUB
- 系统引导管理器grub
- 系统引导管理器GRUB
- 系统引导管理器GRUB
- 系统引导管理器GRUB
- 系统引导管理器GRUB
- 系统引导管理器GRUB
- 系统引导管理器GRUB
- grub引导Linux系统
- grub命令行引导系统
- 死亡是一瞬间的事吗
- quick-cocos2d-x 多分辨率适配详解
- Spring配置datasource的三种方式
- Java 继承与多态实验
- 2014-4-12
- 用宿主系统grub引导LFS
- 绿茶婊打胎史已经被我告诉她男友了!结果不出所料
- ZOJ-1181
- 什么是FireFox OS
- 再探PHP session
- 软件风险评估
- Thread-safety with the Java final keyword
- 第6周作业2-IF语句大显身手之成绩判断
- kill用法详细解释(特别是信号量9的使用以及理解)