无忧启动论坛

标题: 关于Grub2的一些疑问大家看怎么处理 [打印本页]

作者: hhh333    时间: 2020-2-9 20:59
标题: 关于Grub2的一些疑问大家看怎么处理
本帖最后由 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要空格还想得通一些,毕竟目录名没有定界符。
复制代码



作者: my9823    时间: 2020-2-9 21:21
关于大小写的问题,在linux中大小写不是一个文件例如:at和At可以同时存在于同目录下,这是两个不同的文件。另外扩展名只是为了便于用户识别文件,例如:a.exe可以是个文本文件。
作者: hhh333    时间: 2020-2-9 21:27
本帖最后由 hhh333 于 2020-2-9 21:50 编辑
匿名者 发表于 2020-2-9 21:20
udf/iso joliet/ntfs 都是大小写敏感的文件系统

如何调整光盘格式或者grub2才能不敏感?
作者: 江南一根葱    时间: 2020-2-9 21:54
手动把文件名改成小写
作者: my9823    时间: 2020-2-9 22:10
linux中返回上级目录是: cd空格.. 而不是类似windows中的cd..
作者: my9823    时间: 2020-2-9 22:10
我觉得你要看看关于linux shell编程方面的书籍!
作者: hhh333    时间: 2020-2-9 22:26
my9823 发表于 2020-2-9 22:10
我觉得你要看看关于linux shell编程方面的书籍!

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

那写菜单的时候是不是要考虑这些情况?
作者: 一笑笑    时间: 2020-2-9 22:28
可以加这样的高清图片吗?那里有?感谢
作者: hhh333    时间: 2020-2-9 22:38
那问题有点复杂了。
作者: my9823    时间: 2020-2-9 22:46
正则表达式不是有[Bb]oot么?不知道如何用到if中,其他也可以用正则啊!
作者: my9823    时间: 2020-2-9 22:49
=与==应该不同,前者是赋值,左边应该是变量可以改变的,后者是比较两者完全相同吧。尝试两两条命令变量放到后边试试看!
作者: hhh333    时间: 2020-2-9 23:01
my9823 发表于 2020-2-9 22:49
=与==应该不同,前者是赋值,左边应该是变量可以改变的,后者是比较两者完全相同吧。尝试两两条命令变量放 ...

我推测如果两边都有引号定界符应该=与==是等价的,测试结果也是这样的
作者: hhh333    时间: 2020-2-9 23:02
my9823 发表于 2020-2-9 22:46
正则表达式不是有oot么?不知道如何用到if中,其他也可以用正则啊!

不知道怎么用,看起来也怪怪的。
作者: hhh333    时间: 2020-2-10 11:18
干脆用变量算了
  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
复制代码

作者: 青青草    时间: 2020-2-10 13:00
用正则表达式解决。
作者: hhh333    时间: 2020-2-10 15:46
青青草 发表于 2020-2-10 13:00
用正则表达式解决。

确实不会用,麻烦把上面的代码用grub2的脚本写一下。
作者: 从此消失    时间: 2020-2-10 16:15
正则表达式,如果想表达efi/microsoft/boot所有大小写可以这样
[Ee][Ff][Ii]/[Mm][Ii][Cc][Rr][Oo][Ss][Oo][Ff][Tt]/[Bb][Oo][Oo][Tt]
但是在search的时候不可以使用这样的表达式,只能在test、regexp等情况下可以使用
作者: 江南一根葱    时间: 2020-2-10 16:34
我这才发现大小写问题吗,
我之前是两种写法搜两次
作者: hhh333    时间: 2020-2-10 17:04
本帖最后由 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应该会自动更新这个变量,搞不懂了,要崩溃了!

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


作者: 青青草    时间: 2020-2-10 17:31
hhh333 发表于 2020-2-10 15:46
确实不会用,麻烦把上面的代码用grub2的脚本写一下。

你要做什么?查找系统?查找PE?还是... ...?
作者: hhh333    时间: 2020-2-10 18:05
青青草 发表于 2020-2-10 17:31
你要做什么?查找系统?查找PE?还是... ...?

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

作者: 青青草    时间: 2020-2-10 18:35
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
作者: hhh333    时间: 2020-2-10 18:47
青青草 发表于 2020-2-10 18:35
if test -f ($device)/EFI/Microsoft/Boot/bootmgfw.efi -a -f ($device)/EFI/Microsoft/Boot/BCD;then ...

这个不是正则表达式吧?
作者: hhh333    时间: 2020-2-10 18:50
江南一根葱 发表于 2020-2-10 16:34
我这才发现大小写问题吗,
我之前是两种写法搜两次

这个大小写问题很容易出错啊,用变量算是简单的方式,判断存在就定义一次,后面就引用。
作者: 2012kwy    时间: 2020-2-10 18:51
请教efi microsoft boot bcd大小写只有上述三种组合吗?恐怕还得请高人从源头解决
作者: 青青草    时间: 2020-2-10 18:52
本帖最后由 青青草 于 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
... ...

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

是的,就是想提高脚本的适应性,不然不得这么费神。
作者: hhh333    时间: 2020-2-10 22:26
江南一根葱 发表于 2020-2-10 19:03
光盘不是定死的吗,制作的时候文件名就由自己固化的吧,是要脚本适应多种情况制做iso么?

还有个问题请教一下:如何检测g2是W大的版本还是官方的版本?
作者: hhh333    时间: 2020-2-11 18:36
匿名者 发表于 2020-2-9 22:02
不能.
文件系统本身是大小写敏感的,软件读取就应该按照大小写敏感来做.

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

作者: my9823    时间: 2020-2-13 12:28
wintoflash大神不会是武汉人吧?

IMG_20200213_122408.jpg (18.32 KB, 下载次数: 168)

IMG_20200213_122408.jpg

作者: hhh333    时间: 2020-2-13 13:24
my9823 发表于 2020-2-13 12:28
wintoflash大神不会是武汉人吧?

正好不出门憋大招
作者: wintoflash    时间: 2020-2-27 11:33
本帖最后由 wintoflash 于 2020-2-27 18:45 编辑

楼主可以测试一下,现在默认不区分大小写了
https://github.com/a1ive/grub/releases
注意:ls 列文件还是区分大小写的。

执行 set grub_fs_case_sensitive=1 启用区分大小写以保持兼容性,设为其他值或不设则不区分大小写。
测试 NTFS/UDF/iso9660 可以。
对于本来就不区分大小写的文件系统,例如 FAT/exFAT/UD 无效。
对于一些必须区分大小写的文件系统,例如 cpio/newc 等也无效。
其他的暂未测试。
作者: hhh333    时间: 2020-2-27 18:28
wintoflash 发表于 2020-2-27 11:33
楼主可以测试一下,现在默认不区分大小写了
https://github.com/a1ive/grub/releases
注意:ls 列文件还 ...

太给力了,马上测试!
作者: hhh333    时间: 2020-2-27 20:14
wintoflash 发表于 2020-2-27 11:33
楼主可以测试一下,现在默认不区分大小写了
https://github.com/a1ive/grub/releases
注意:ls 列文件还 ...

初步在光盘上测试可行,NTFS应该也无问题。
作者: wintoflash    时间: 2020-2-27 20:25
hhh333 发表于 2020-2-27 20:14
初步在光盘上测试可行,NTFS应该也无问题。

光盘是指 iso9660 还是 udf?
作者: hhh333    时间: 2020-2-27 20:48
wintoflash 发表于 2020-2-27 20:25
光盘是指 iso9660 还是 udf?

两者都可以
作者: hhh333    时间: 2020-2-28 06:38
wintoflash 发表于 2020-2-27 20:25
光盘是指 iso9660 还是 udf?

想问一下isolinux要调用grub2,命令应该怎么写?要加头文件吗?
我是按调用g4d的方式写的,boot/g2ldr,这个g2ldr不加头文件出乱字符,加pxeboot.img的直接到命令行,加lnxboot.img黑屏无反应。
作者: wintoflash    时间: 2020-2-28 08:04
hhh333 发表于 2020-2-28 06:38
想问一下isolinux要调用grub2,命令应该怎么写?要加头文件吗?
我是按调用g4d的方式写的,boot/g2ldr, ...

没用过 不知道
作者: 青青草    时间: 2020-3-3 11:28
wintoflash 发表于 2020-2-27 11:33
楼主可以测试一下,现在默认不区分大小写了
https://github.com/a1ive/grub/releases
注意:ls 列文件还 ...

今天得空,在NTFS上测试,对于文件,还是区分大小写的。【文件:BCD】
作者: wintoflash    时间: 2020-3-3 11:31
青青草 发表于 2020-3-3 11:28
今天得空,在NTFS上测试,对于文件,还是区分大小写的。【文件:BCD】

截图
作者: 青青草    时间: 2020-3-3 12:17
本帖最后由 青青草 于 2020-3-3 12:19 编辑
wintoflash 发表于 2020-3-3 11:31
截图

if test -f ($device)/bootmgr -a -f ($device)/boot/BCD; then   可以显示菜单条,
改成  if test -f ($device)/bootmgr -a -f ($device)/boot/bcd; then   则没有显示菜单条。
系统在NTFS分区
作者: wintoflash    时间: 2020-3-3 16:01
青青草 发表于 2020-3-3 12:17
if test -f ($device)/bootmgr -a -f ($device)/boot/BCD; then   可以显示菜单条,
改成  if test -f  ...

现在应该可以了,请更新测试。
作者: 青青草    时间: 2020-3-3 19:51
wintoflash 发表于 2020-3-3 16:01
现在应该可以了,请更新测试。

可以了。
作者: linyuuki    时间: 2020-3-9 09:48
改别人不如改自己。要么你重写一个系统?
作者: 2012kwy    时间: 2020-3-9 10:42
墙裂支持!!




欢迎光临 无忧启动论坛 (http://wuyou.net/) Powered by Discuz! X3.3