help-grub
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Debug grub scripts without rebooting into grub shell.


From: Andrei Borzenkov
Subject: Re: Debug grub scripts without rebooting into grub shell.
Date: Sun, 9 Jul 2023 11:26:52 +0300
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.11.0

On 09.07.2023 10:00, Hongyi Zhao wrote:
On Sun, Jul 9, 2023 at 2:49 PM Andrei Borzenkov <arvidjaar@gmail.com> wrote:

On 09.07.2023 09:33, Hongyi Zhao wrote:
On Sun, Jul 9, 2023 at 1:13 PM Andrei Borzenkov <arvidjaar@gmail.com> wrote:

On 09.07.2023 03:21, Hongyi Zhao wrote:
On Sat, Jul 8, 2023 at 9:53 PM Andrei Borzenkov <arvidjaar@gmail.com> wrote:

On 08.07.2023 14:58, Hongyi Zhao wrote:
Hi here,

Are there some convenient methods to debug grub scripts without
rebooting into grub shell?


You may try grub-emu which emulates grub.

I tried, but it seems that grub-emu doesn't meet my requirement as
described below.

I want to debug the grubx64.efi created by the following command:


If you want to debug grubx64.efi, then you of course need to load it
either on real hardware or in VM. But you can debug scripts used by
grubx64.efi using grub-emu by setting up suitable simulated environment.
There are clear limitations (scripts cannot load and start any kernel).

Then, how to access the real hard disk devices and partitions? I can
only see the following devices via grub-emu:


You create device.map and give names hd0, hd1, ... to your devices.

See below:

werner@X10DAi:~$ sudo grub-mkdevicemap -n
werner@X10DAi:~$ cat /boot/grub/device.map
(hd0)    /dev/disk/by-id/nvme-SAMSUNG_MZVL22T0HBLB-00B00_S677NF0R503706
(hd1)    /dev/disk/by-id/ata-WDC_WDS100T2B0A-00SM50_191533467906

Now, I see the following devices in grub-emu:

grub> ls
(proc) (hd0) (hd1) (host)

But how to access the corresponding partitions on these devices?


Did you try to load partition driver?

grub> ls
(proc) (host)

Best,
Zhao

$ grub-mkstandalone -O x86_64-efi -o grubx64.efi --modules='lvm fat
ntfs part_msdos part_gpt ext2 btrfs probe regexp search configfile'
boot/grub/grub.cfg=./grub.cfg

The content of the ./grub.cfg is as follows:

$ egrep -v '^[ ]*(#|$)' grub.cfg
regexp -s __cmdpath_efi '^\(([^,]+)' "$cmdpath"
export __cmdpath_efi
for file in ($__cmdpath_efi,*)/multibootusb.git/grub.cfg; do
     if regexp -s __root '^(\([^*]+\))' "$file"; then
       set __prefix=$__root/multibootusb.git
       export __root
       export __prefix
       configfile $__prefix/grub.cfg
       break
     fi
done

The files' layout is as follows:

$ tree .
.
├── grub.cfg
├── grub-mkstandalone.sh
├── grubx64.efi
└── iso
       ├── deepin-desktop-community-23-Beta-amd64.iso
       ├── rescatux-0.74.iso
       ├── supergrub2-2.06s1-beta2-multiarch-CD.iso
       ├── systemrescue-10.01-amd64.iso
       ├── ubuntu-23.04-desktop-amd64.iso
       └── ubuntukylin-23.04-desktop-amd64.iso

1 directory, 9 files

Regards,
Zhao




reply via email to

[Prev in Thread] Current Thread [Next in Thread]