无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
查看: 11705|回复: 45
打印 上一主题 下一主题

[讨论] 关于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:21:18 来自手机 | 只看该作者
关于大小写的问题,在linux中大小写不是一个文件例如:at和At可以同时存在于同目录下,这是两个不同的文件。另外扩展名只是为了便于用户识别文件,例如:a.exe可以是个文本文件。
回复

使用道具 举报

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

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

使用道具 举报

4#
发表于 2020-2-9 21:54:46 | 只看该作者
手动把文件名改成小写
回复

使用道具 举报

5#
发表于 2020-2-9 22:10:15 来自手机 | 只看该作者
linux中返回上级目录是: cd空格.. 而不是类似windows中的cd..
回复

使用道具 举报

6#
发表于 2020-2-9 22:10:50 来自手机 | 只看该作者
我觉得你要看看关于linux shell编程方面的书籍!
回复

使用道具 举报

7#
 楼主| 发表于 2020-2-9 22:26:53 | 只看该作者
my9823 发表于 2020-2-9 22:10
我觉得你要看看关于linux shell编程方面的书籍!

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

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

使用道具 举报

8#
发表于 2020-2-9 22:28:39 | 只看该作者
可以加这样的高清图片吗?那里有?感谢
回复

使用道具 举报

9#
 楼主| 发表于 2020-2-9 22:38:21 | 只看该作者
那问题有点复杂了。
回复

使用道具 举报

10#
发表于 2020-2-9 22:46:23 来自手机 | 只看该作者
正则表达式不是有[Bb]oot么?不知道如何用到if中,其他也可以用正则啊!
回复

使用道具 举报

11#
发表于 2020-2-9 22:49:44 来自手机 | 只看该作者
=与==应该不同,前者是赋值,左边应该是变量可以改变的,后者是比较两者完全相同吧。尝试两两条命令变量放到后边试试看!
回复

使用道具 举报

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

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

使用道具 举报

13#
 楼主| 发表于 2020-2-9 23:02:35 | 只看该作者
my9823 发表于 2020-2-9 22:46
正则表达式不是有oot么?不知道如何用到if中,其他也可以用正则啊!

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

使用道具 举报

14#
 楼主| 发表于 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
复制代码
回复

使用道具 举报

15#
发表于 2020-2-10 13:00:22 | 只看该作者
用正则表达式解决。
回复

使用道具 举报

16#
 楼主| 发表于 2020-2-10 15:46:51 | 只看该作者
青青草 发表于 2020-2-10 13:00
用正则表达式解决。

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

使用道具 举报

17#
发表于 2020-2-10 16:15:51 | 只看该作者
正则表达式,如果想表达efi/microsoft/boot所有大小写可以这样
[Ee][Ff][Ii]/[Mm][Ii][Cc][Rr][Oo][Ss][Oo][Ff][Tt]/[Bb][Oo][Oo][Tt]
但是在search的时候不可以使用这样的表达式,只能在test、regexp等情况下可以使用
回复

使用道具 举报

18#
发表于 2020-2-10 16:34:53 | 只看该作者
我这才发现大小写问题吗,
我之前是两种写法搜两次
回复

使用道具 举报

19#
 楼主| 发表于 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应该会自动更新这个变量,搞不懂了,要崩溃了!

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

回复

使用道具 举报

20#
发表于 2020-2-10 17:31:42 | 只看该作者
hhh333 发表于 2020-2-10 15:46
确实不会用,麻烦把上面的代码用grub2的脚本写一下。

你要做什么?查找系统?查找PE?还是... ...?
回复

使用道具 举报

21#
 楼主| 发表于 2020-2-10 18:05:38 | 只看该作者
青青草 发表于 2020-2-10 17:31
你要做什么?查找系统?查找PE?还是... ...?

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

使用道具 举报

22#
发表于 2020-2-10 18:35:05 | 只看该作者
hhh333 发表于 2020-2-10 18:05
查找某个文件或目录,不限大小写。如:/efi/microsoft/boot/bcd
有可能是/EFI/microsoft/boot/bcd或者ef ...

  if test -f ($device)/EFI/Microsoft/Boot/bootmgfw.efi -a -f ($device)/EFI/Microsoft/Boot/BCD;then
回复

使用道具 举报

23#
 楼主| 发表于 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 ...

这个不是正则表达式吧?
回复

使用道具 举报

24#
 楼主| 发表于 2020-2-10 18:50:00 | 只看该作者
江南一根葱 发表于 2020-2-10 16:34
我这才发现大小写问题吗,
我之前是两种写法搜两次

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

使用道具 举报

25#
发表于 2020-2-10 18:51:10 来自手机 | 只看该作者
请教efi microsoft boot bcd大小写只有上述三种组合吗?恐怕还得请高人从源头解决
回复

使用道具 举报

26#
发表于 2020-2-10 18:52:21 | 只看该作者
本帖最后由 青青草 于 2020-2-10 18:53 编辑
hhh333 发表于 2020-2-10 18:47
这个不是正则表达式吧?

       for dev in (*); do
                test -e ${dev};
                if test "$?" = "1"; then
                       continue;
                fi;
                regexp --set=device '\((.*)\)' $dev;
if test -f ($device)/EFI/Microsoft/Boot/bootmgfw.efi -a -f ($device)/EFI/Microsoft/Boot/BCD;then
... ...
回复

使用道具 举报

27#
发表于 2020-2-10 19:03:02 | 只看该作者
光盘不是定死的吗,制作的时候文件名就由自己固化的吧,是要脚本适应多种情况制做iso么?

点评

还有个问题请教一下:如何检测g2是W大的版本还是官方的版本?  详情 回复 发表于 2020-2-10 22:26
是的,就是想提高脚本的适应性,不然不得这么费神。  详情 回复 发表于 2020-2-10 19:23
回复

使用道具 举报

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

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

使用道具 举报

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

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

使用道具 举报

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

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

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-11-26 05:40

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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