无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站广告联系 微信:wuyouceo QQ:184822951
楼主: hhh333
打印 上一主题 下一主题

[讨论] 关于Grub2的一些疑问大家看怎么处理

    [复制链接]
跳转到指定楼层
1#
发表于 2020-2-9 20:59:26 | 显示全部楼层 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 hhh333 于 2020-2-9 21:47 编辑

1、光盘启动时有严格的大小写问题,无论是Joliet还是UDF格式都存在,但grub4dos不存在这个问题,这个要如何避免?
2、光盘bios和efi启动时一些变量不一样
bios:
bootdev=hd31
ls时看到的是(cd)

EFI:
bootdev=cd0
ls时看到的是(cd0)

怎么不统一?如下图,一个bios一个是EFI。


3、一些符号
  1. if [ "${grub_platform}" == "efi" ]; then
  2. 与这个等价
  3. if [ "$grub_platform"="efi"];then(注意:1、双等号与单的似乎一样,2、等号两边似乎不要空格;3、]号前有引号似乎不要空格;4、then前面接分号不需要空格)

  4. if [ -d "/boot" ]; then
  5. 如果写成if [ -d "/boot"]; then (]号前无空格)则不行,如果是这样if [ -d /boot ]; then要空格还想得通一些,毕竟目录名没有定界符。
复制代码


2#
 楼主| 发表于 2020-2-9 21:27:19 | 显示全部楼层
本帖最后由 hhh333 于 2020-2-9 21:50 编辑
匿名者 发表于 2020-2-9 21:20
udf/iso joliet/ntfs 都是大小写敏感的文件系统

如何调整光盘格式或者grub2才能不敏感?
回复

使用道具 举报

3#
 楼主| 发表于 2020-2-9 22:26:53 | 显示全部楼层
my9823 发表于 2020-2-9 22:10
我觉得你要看看关于linux shell编程方面的书籍!

刚才看了自然安装的windows,取名是这样的:
boot是Boot
bcd是在:\EFI\Microsoft\Boot

那写菜单的时候是不是要考虑这些情况?
回复

使用道具 举报

4#
 楼主| 发表于 2020-2-9 22:38:21 | 显示全部楼层
那问题有点复杂了。
回复

使用道具 举报

5#
 楼主| 发表于 2020-2-9 23:01:40 | 显示全部楼层
my9823 发表于 2020-2-9 22:49
=与==应该不同,前者是赋值,左边应该是变量可以改变的,后者是比较两者完全相同吧。尝试两两条命令变量放 ...

我推测如果两边都有引号定界符应该=与==是等价的,测试结果也是这样的
回复

使用道具 举报

6#
 楼主| 发表于 2020-2-9 23:02:35 | 显示全部楼层
my9823 发表于 2020-2-9 22:46
正则表达式不是有oot么?不知道如何用到if中,其他也可以用正则啊!

不知道怎么用,看起来也怪怪的。
回复

使用道具 举报

7#
 楼主| 发表于 2020-2-10 11:18:07 | 显示全部楼层
干脆用变量算了
  1. set BT=BOOT
  2. if [ -d /boot ];then
  3.         set BT=boot
  4. elif [ -d /Boot ];then
  5.         set BT=Boot
  6. fi
  7. set EF=EFI
  8. if [ -d /efi ];then
  9.         set EF=efi
  10. fi
  11. set EFB=BOOT
  12. if [ -d /$EF/boot ];then
  13.         set EFB=boot
  14. elif [ -d /$EF/Boot ];then
  15.         set EFB=Boot
  16. fi
  17. set EFMSB=microsoft/boot
  18. if [ -d /$EF/MICROSOFT/BOOT ];then
  19.         set EFMSB=MICROSOFT/BOOT
  20. elif [ -d /$EF/Microsoft/Boot ];then
  21.         set EFMSB=Microsoft/Boot
  22. fi
  23. set BCD=BCD
  24. if [ -f /$EF/$EFMSB/bcd ];then
  25.         set BCD=bcd
  26. fi
复制代码
回复

使用道具 举报

8#
 楼主| 发表于 2020-2-10 15:46:51 | 显示全部楼层
青青草 发表于 2020-2-10 13:00
用正则表达式解决。

确实不会用,麻烦把上面的代码用grub2的脚本写一下。

点评

你要做什么?查找系统?查找PE?还是... ...?  详情 回复 发表于 2020-2-10 17:31
回复

使用道具 举报

9#
 楼主| 发表于 2020-2-10 17:04:37 | 显示全部楼层
本帖最后由 hhh333 于 2020-2-10 17:30 编辑
江南一根葱 发表于 2020-2-10 16:34
我这才发现大小写问题吗,
我之前是两种写法搜两次

好了,又出大乱子了。
前面我的配置文件放/efi/grub/grub.cfg,现在把EFI改成大写了,定制参数也改了,configfile /EFI/grub/grub.cfg,配制文件是找到了,但prefix还是(cd0)/efi/grub
configfile应该会自动更新这个变量,搞不懂了,要崩溃了!

=====
是我搞错了,定制还有个参数没改过来。晕死!

回复

使用道具 举报

10#
 楼主| 发表于 2020-2-10 18:05:38 | 显示全部楼层
青青草 发表于 2020-2-10 17:31
你要做什么?查找系统?查找PE?还是... ...?

查找某个文件或目录,不限大小写。如:/efi/microsoft/boot/bcd
有可能是/EFI/microsoft/boot/bcd或者efi/Microsoft/Boot/BCD等

点评

if test -f ($device)/EFI/Microsoft/Boot/bootmgfw.efi -a -f ($device)/EFI/Microsoft/Boot/BCD;then  详情 回复 发表于 2020-2-10 18:35
回复

使用道具 举报

11#
 楼主| 发表于 2020-2-10 18:47:10 | 显示全部楼层
青青草 发表于 2020-2-10 18:35
if test -f ($device)/EFI/Microsoft/Boot/bootmgfw.efi -a -f ($device)/EFI/Microsoft/Boot/BCD;then ...

这个不是正则表达式吧?

点评

for dev in (*); do test -e ${dev}; if test "$?" = "1"; then continue; fi; regexp --set=device '\((.*)\)' $dev; if test -f ($device)/EFI/Micro  详情 回复 发表于 2020-2-10 18:52
回复

使用道具 举报

12#
 楼主| 发表于 2020-2-10 18:50:00 | 显示全部楼层
江南一根葱 发表于 2020-2-10 16:34
我这才发现大小写问题吗,
我之前是两种写法搜两次

这个大小写问题很容易出错啊,用变量算是简单的方式,判断存在就定义一次,后面就引用。
回复

使用道具 举报

13#
 楼主| 发表于 2020-2-10 19:23:05 | 显示全部楼层
江南一根葱 发表于 2020-2-10 19:03
光盘不是定死的吗,制作的时候文件名就由自己固化的吧,是要脚本适应多种情况制做iso么?

是的,就是想提高脚本的适应性,不然不得这么费神。
回复

使用道具 举报

14#
 楼主| 发表于 2020-2-10 22:26:03 | 显示全部楼层
江南一根葱 发表于 2020-2-10 19:03
光盘不是定死的吗,制作的时候文件名就由自己固化的吧,是要脚本适应多种情况制做iso么?

还有个问题请教一下:如何检测g2是W大的版本还是官方的版本?
回复

使用道具 举报

15#
 楼主| 发表于 2020-2-11 18:36:16 | 显示全部楼层
匿名者 发表于 2020-2-9 22:02
不能.
文件系统本身是大小写敏感的,软件读取就应该按照大小写敏感来做.

确实,不只是光盘,除fat外,在NTFS上也是大小写敏感的。所以如果将g2安装到windows的NTFS上,也要考虑大小写的问题,在windows上大家都是比较随意的,到g2中就不行了,因此菜单中注意大小写还是有现实意义的。
回复

使用道具 举报

16#
 楼主| 发表于 2020-2-13 13:24:25 | 显示全部楼层
my9823 发表于 2020-2-13 12:28
wintoflash大神不会是武汉人吧?

正好不出门憋大招
回复

使用道具 举报

17#
 楼主| 发表于 2020-2-27 18:28:19 | 显示全部楼层
wintoflash 发表于 2020-2-27 11:33
楼主可以测试一下,现在默认不区分大小写了
https://github.com/a1ive/grub/releases
注意:ls 列文件还 ...

太给力了,马上测试!
回复

使用道具 举报

18#
 楼主| 发表于 2020-2-27 20:14:11 | 显示全部楼层
wintoflash 发表于 2020-2-27 11:33
楼主可以测试一下,现在默认不区分大小写了
https://github.com/a1ive/grub/releases
注意:ls 列文件还 ...

初步在光盘上测试可行,NTFS应该也无问题。

点评

光盘是指 iso9660 还是 udf?  详情 回复 发表于 2020-2-27 20:25
回复

使用道具 举报

19#
 楼主| 发表于 2020-2-27 20:48:49 | 显示全部楼层
wintoflash 发表于 2020-2-27 20:25
光盘是指 iso9660 还是 udf?

两者都可以
回复

使用道具 举报

20#
 楼主| 发表于 2020-2-28 06:38:40 | 显示全部楼层
wintoflash 发表于 2020-2-27 20:25
光盘是指 iso9660 还是 udf?

想问一下isolinux要调用grub2,命令应该怎么写?要加头文件吗?
我是按调用g4d的方式写的,boot/g2ldr,这个g2ldr不加头文件出乱字符,加pxeboot.img的直接到命令行,加lnxboot.img黑屏无反应。

点评

没用过 不知道  详情 回复 发表于 2020-2-28 08:04
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2024-5-5 07:46

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表