在deepin下手工制作可同时支持UEFI与BIOS的引导盘
Tofloor
poster avatar
Feng Yu
deepin
2015-08-12 23:53
Author
上次问了这样的问题: https://bbs.deepin.org/post/31672
看了无数的帖子后我发现,想要修复UEFI引导,那么必须要在UEFI模式下。因此需要livecd在UEFI下启动才行。

于是乎,遍寻google,研究了整整一天的grub和syslinux,研究USB启动的原理和过程,终于搞定了,手工制作可以同时支持UEFI与BIOS的多镜像引导盘。
详细的操作过程记录在oschina的博客上: http://my.oschina.net/abcfy2/blog/491140

最后还想请教一下,grub2中怎么实现“从本地硬盘引导”?grub1我记得是有
  1. root (hd0,0)
  2. chainloader +1
  3. boot
Copy the Code
这种方式,但是grub2全变了,找了一圈也没发现怎么实现,求教。
Reply Favorite View the author
All Replies
1 / 2
To page
ArthurDeepin
deepin
2015-08-13 01:08
#1
本帖最后由 ArthurDeepin 于 2015-8-12 17:25 编辑

是不是grub启动的位置为hd(0,0)(在这里是U盘的位置),grub4dos是这样的,也就是说,grub4dos要启动硬盘应该是hd(1,0),不知道grub2是不是这样……
Reply View the author
MattD
deepin
2015-08-13 01:26
#2
grub2的分区编号从1开始,而且直接这么写应该也可以
  1. menuentry "Foobar" {
  2.         set root=(hd0,1)
  3.         chainloader (hd0,1)
  4. }
Copy the Code
我没实践过,全都是UEFI了。
Reply View the author
ArthurDeepin
deepin
2015-08-13 02:08
#3
到grub的命令行界面ls看看设备和分区吧
Reply View the author
Feng Yu
deepin
2015-08-13 04:55
#4
https://bbs.deepin.org/post/31896
grub2的分区编号从1开始,而且直接这么写应该也可以
我没实践过,全都是UEFI了。 ...

试了几个机子,最终确定了应该是
  1. set root=(hd1)
  2. chainloader +1
Copy the Code
Reply View the author
ArthurDeepin
deepin
2015-08-13 07:13
#5
本帖最后由 ArthurDeepin 于 2015-8-12 23:14 编辑

也可以进一步指定从某一分区加载系统。
set root=(hd1,msdos3)
我不知道gpt下的分区命名是不是也是这样的,可以用ls查看。

并且我上次折腾的一个帖子(https://bbs.deepin.org/post/30233),发现一个细节:

chainloader不能用于直接加载windows的bootmgr,只能用chainloader +1,而且使用这个命令的分区必须有引导记录(程序)(我也不知道gpt分区的情况下的分区引导…………因为它没有主分区和逻辑分区),如果没有,chainloader +1也无效。

所以对于linux使用kernel,对windows使用ntldr。
Reply View the author
lcw0268
deepin
2015-08-13 07:39
#6
看链接文章了。
一个字:晕。
2个字:真晕。
3个字:看晕了。
Reply View the author
Feng Yu
deepin
2015-08-13 07:54
#7
https://bbs.deepin.org/post/31896
也可以进一步指定从某一分区加载系统。
set root=(hd1,msdos3)
我不知道gpt下的分区命名是不是也是这样的, ...

gpt下分区命名是(hd0, gpt1)

奇怪的是在UEFI下,ls只能看到(hd0,gpt1) - U盘上的ESP和(hd0, gpt2) - U盘上的bios_grub标记的分区,对于本机硬盘,显示的就是(hd1),却没有分区,不知道怎么回事
Reply View the author
ArthurDeepin
deepin
2015-08-13 07:55
#8
https://bbs.deepin.org/post/31896
gpt下分区命名是(hd0, gpt1)

奇怪的是在UEFI下,ls只能看到(hd0,gpt1) - U盘上的ESP和(hd0, gpt2) - U盘 ...

(⊙o⊙)…那就真的不知道咯(⊙o⊙)……没认真试过gpt
Reply View the author
Feng Yu
deepin
2015-08-13 07:56
#9
https://bbs.deepin.org/post/31896
看链接文章了。
一个字:晕。
2个字:真晕。

手工折腾U盘引导属于比较高级的知识,需要先修系统引导的知识。UEFI+GPT方式又与BIOS+MBR不同。了解到这些先修知识之后,再看操作其实根本不难理解
Reply View the author
QDKA
deepin
2015-08-13 08:01
#10
不明觉厉。
Reply View the author
Feng Yu
deepin
2015-08-13 17:45
#11
本帖最后由 abcfy2 于 2015-8-13 09:53 编辑
https://bbs.deepin.org/post/31896
grub2的分区编号从1开始,而且直接这么写应该也可以
我没实践过,全都是UEFI了。 ...

问一下,grub菜单按e编辑的时候有花屏是怎么解决的?同样的主题下用update-grub生成的菜单就没有问题,我看不出来是少了哪部分配置。



我的配置:
  1. # path to the partition holding ISO images (using UUID)
  2. probe -u $root --set=rootuuid
  3. set imgdevpath="/dev/disk/by-uuid/$rootuuid"

  4. # define globally (i.e outside any menuentry)
  5. insmod search_fs_uuid
  6. search --no-floppy --set=isopart --fs-uuid $rootuuid

  7. # grub模块配置
  8. loadfont SourceHanSans
  9. loadfont Monaco
  10. set lang=zh_CN
  11. insmod all_video
  12. insmod gfxterm
  13. insmod gettext
  14. insmod gfxmenu
  15. insmod png
  16. insmod part_msdos
  17. insmod xfs
  18. terminal_output gfxterm
  19. set menu_color_normal=cyan/blue
  20. set menu_color_highlight=white/blue
  21. gfxmode keep
  22. set vt_handoff=vt.handoff=7

  23. # 主题配置
  24. set theme=$prefix/themes/Tuxkiller2/theme.txt
  25. export theme

  26. menuentry "Linux Mint cinnamon 64bit ISO" --class linuxmint --class gnu-linux --class gnu --class os {
  27. set isofile=/boot/iso/linuxmint-17.2-cinnamon-64bit.iso
  28. loopback loop ($isopart)$isofile
  29. echo '载入Linux Mint ...'
  30. linux (loop)/casper/vmlinuz file=/cdrom/preseed/linuxmint.seed boot=casper iso-scan/filename=$isofile noeject noprompt splash locale=zh_CN.UTF-8 --
  31. echo '载入初始化内存盘...'
  32. initrd (loop)/casper/initrd.lz
  33. }

  34. menuentry "Ubuntu Desktop 64bit ISO" --class ubuntu --class gnu-linux --class gnu --class os {
  35. set isofile=/boot/iso/ubuntu-14.04.3-desktop-amd64+mac.iso
  36. loopback loop ($isopart)$isofile
  37. echo '载入Ubuntu Desktop ...'
  38. linux (loop)/casper/vmlinuz file=/cdrom/preseed/ubuntu.seed boot=casper iso-scan/filename=$isofile noeject noprompt splash locale=zh_CN.UTF-8 --
  39. echo '载入初始化内存盘...'
  40. initrd (loop)/casper/initrd.lz
  41. }

  42. menuentry "UbuntuKylin Desktop 64bit ISO" --class ubuntukylin --class gnu-linux --class gnu --class os{
  43. set isofile=/boot/iso/ubuntukylin-14.04.3-desktop-amd64.iso
  44. loopback loop ($isopart)$isofile
  45. echo '载入UbuntuKylin Desktop ...'
  46. linux (loop)/casper/vmlinuz.efi boot=casper iso-scan/filename=$isofile noeject noprompt splash locale=zh_CN.UTF-8 --
  47. echo '载入初始化内存盘...'
  48. initrd (loop)/casper/initrd.lz
  49. }

  50. # 特别注意: Ubuntu Server会出现安装的时候检测不到光驱的现象
  51. # 此时手工进入shell下,将iso镜像挂载在/cdrom继续即可
  52. # mount -o loop /media/boot/iso/ubuntu-*-server-*.iso /cdrom
  53. menuentry "Ubuntu Server 64bit ISO" --class ubuntu --class gnu-linux --class gnu --class os{
  54. set isofile=/boot/iso/ubuntu-14.04.3-server-amd64+mac.iso
  55. loopback loop ($isopart)$isofile
  56. set gfxpayload=keep
  57. echo '载入Ubuntu Server ...'
  58. linux (loop)/install/vmlinuz file=/cdrom/preseed/ubuntu-server.seed iso-scan/filename=$isofile quiet --
  59. echo '载入初始化内存盘...'
  60. initrd (loop)/install/initrd.gz
  61. }

  62. menuentry "Deepin 2014 ISO" --class deepin --class gnu-linux --class gnu --class os{
  63. set isofile=/boot/iso/deepin_2014.3_amd64.iso
  64. loopback loop ($isopart)$isofile
  65. echo '载入Deepin ...'
  66. linux (loop)/casper/vmlinuz boot=casper iso-scan/filename=$isofile noeject noprompt splash locale=zh_CN.UTF-8 --
  67. echo '载入初始化内存盘...'
  68. initrd (loop)/casper/initrd.lz
  69. }

  70. menuentry '从本地硬盘启动' --class disk {
  71. set root=(hd1)
  72. chainloader +1
  73. }

  74. menuentry '关闭系统' --class halt {
  75. echo '关机中 ...'
  76. halt
  77. }

  78. menuentry '重启系统' --class reboot {
  79. echo '重启系统中 ...'
  80. reboot
  81. }
Copy the Code
Reply View the author
MattD
deepin
2015-08-13 17:53
#12
https://bbs.deepin.org/post/31896
问一下,grub菜单按e编辑的时候有花屏是怎么解决的?同样的主题下用update-grub生成的菜单就没有问题,我 ...

不好意思,我个人不喜欢搞那些花哨的东西,一直是黑底白字的原始界面……
Reply View the author
Feng Yu
deepin
2015-08-13 18:18
#13
本帖最后由 abcfy2 于 2015-8-13 10:19 编辑
https://bbs.deepin.org/post/31896
不好意思,我个人不喜欢搞那些花哨的东西,一直是黑底白字的原始界面…… ...

我发现问题在哪了。是因为字体的问题,之前是我自己转换的字体扔进去的,就会出现这种问题,用grub自带的unicode字体就一切OK
loadfont unicode


Reply View the author
kingskill
deepin
2015-08-13 20:49
#14
战马一下资料~{:4_92:}
Reply View the author
Ficum
deepin
2015-08-13 21:18
#15
看了oschina上楼主的文章,连我等小白也可以操作了
ps 照片不错
Reply View the author
linux0208
deepin
2015-08-13 22:07
#16
mark一下
Reply View the author
Feng Yu
deepin
2015-08-13 23:03
#17
完善的差不多了,下一步打算把grub.cfg托管到版本库共享出来
Reply View the author
133******11
deepin
2015-08-17 17:07
#18
我是使用无忧社区里的Winly,就是Grub2fordos制作了一个U盘,让这个U盘在UEFI下启动,然后用它启动Deepin的光盘安装才成功在UEFI模式下安装的。感觉UEFI安装真的很麻烦。
Reply View the author
bobo
deepin
2015-08-17 18:05
#19
请教,2015的grub怎么写啊?
Reply View the author
Feng Yu
deepin
2015-08-17 19:08
#20
本帖最后由 abcfy2 于 2015-8-17 11:11 编辑
https://bbs.deepin.org/post/31896
请教,2015的grub怎么写啊?

还没研究2015.不过基于debian,你可以找一下debian sid iso的grub引导方案,arch的wiki就不错,我的很多资料都是从那里参考的
EDIT: 附上arch wiki的参考文档: https://wiki.archlinux.org/index.php/Multiboot_USB_drive
赞不清楚deepin 2015使用的是debian的哪种镜像结构,DVD or LiveCD?不过arch的文档都有,你可以打开镜像文件比对一下目录结构,看看适用于哪一种
Reply View the author
1 / 2
To page
New Thread

Popular Events

More
国际排名
WHLUG