내 문제는Grub: USB 드라이브에서 부팅한 다음 SD 카드에서 계속 부팅하시겠습니까?그 외에도 나중에 CD로 구울 grub iso 파일을 만들려고 하는데, 이것이 Linux를 부팅하는 방법입니다.
저는 grub과 커널을 처음 접했고 SDCard에 설치된 Ubuntu를 CD에서 부팅할 수 있는지 잘 모르겠습니다.
지금까지 시도한 것은 SDCard의 LiveUSB에서 Ubuntu를 설치하는 것입니다. 파티션은 다음과 같습니다.
둘째, 이 스레드를 기반으로 합니다.https://www.linuxquestions.org/questions/linux-general-1/creating-a-grub2-boot-cd-with-a-grub-cfg-menu-my-solution-754835/Brasero를 통해 CD로 구울 수 있는 grub iso 파일을 만들 수 있었습니다. Ubuntu 설치의 루트(/) 파티션인 /dev/sdb5에서 시작 폴더를 복사하고 다음 명령을 실행했기 때문에 문제가 여기에 있을 수 있다고 생각했습니다.
grub-mkrescue --modules="linux ext2 fshelp ls boot pc" --output=grub2-boot.iso ~/Desktop/boot
그러나 위의 명령을 실행한 후 다음을 얻습니다.
grub-mkrescue: error: cannot open `/usr/lib/grub/i386-pc/pc.mod': No such file or directory.
이 문제에 대해 몇 가지 조사를 했으며 해결 방법을 실행 중일 수 있습니다.
sudo apt-get install grub-pc-bin
그러나 pc.mod가 생성되지 않았기 때문에 명령에서 해당 모듈을 제거했습니다(다시 말하지만, 정확히 내가 무엇을 하고 있는지, PC 모듈이 무엇을 해야 하는지 잘 모르겠습니다).
마지막으로 시스템을 재부팅했을 때 CD에서 grub이 부팅되는 것을 발견했지만 문제는 (적어도 그 중 하나) grub에서 "ls"를 실행할 때 grub.cfg의 (hd1,msdos5)가 나타나지 않는다는 것입니다. . 사용 가능한 유일한 파일 시스템은 (cd1) (cd1,msdos1)입니다. 이는 부팅 단계에서 SDCard 리더 드라이버가 존재하지 않는 것과 관련이 있을 수 있습니다. 어떻게든 솔루션은 SDCard 드라이버를 grub iso에 통합하지만 이것이 가능한지는 확실하지 않습니다.
다음은 /media/ca8dc83c-7795-4dbd-8ee9-3e59ec526e6d(UUID인 것 같습니다)로 설치된 /dev/sdb5 부팅 폴더의 전체 grub.cfg입니다.
#
# DO NOT EDIT THIS FILE
#
# It is automatically generated by grub-mkconfig using templates
# from /etc/grub.d and settings from /etc/default/grub
#
### BEGIN /etc/grub.d/00_header ###
if [ -s $prefix/grubenv ]; then
set have_grubenv=true
load_env
fi
if [ "${next_entry}" ] ; then
set default="${next_entry}"
set next_entry=
save_env next_entry
set boot_once=true
else
set default="0"
fi
if [ x"${feature_menuentry_id}" = xy ]; then
menuentry_id_option="--id"
else
menuentry_id_option=""
fi
export menuentry_id_option
if [ "${prev_saved_entry}" ]; then
set saved_entry="${prev_saved_entry}"
save_env saved_entry
set prev_saved_entry=
save_env prev_saved_entry
set boot_once=true
fi
function savedefault {
if [ -z "${boot_once}" ]; then
saved_entry="${chosen}"
save_env saved_entry
fi
}
function recordfail {
set recordfail=1
if [ -n "${have_grubenv}" ]; then if [ -z "${boot_once}" ]; then save_env recordfail; fi; fi
}
function load_video {
if [ x$feature_all_video_module = xy ]; then
insmod all_video
else
insmod efi_gop
insmod efi_uga
insmod ieee1275_fb
insmod vbe
insmod vga
insmod video_bochs
insmod video_cirrus
fi
}
if [ x$feature_default_font_path = xy ] ; then
font=unicode
else
insmod part_msdos
insmod ext2
set root='hd1,msdos5'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-bios=hd1,msdos5 --hint-efi=hd1,msdos5 --hint-baremetal=ahci1,msdos5 ca8dc83c-7795-4dbd-8ee9-3e59ec526e6d
else
search --no-floppy --fs-uuid --set=root ca8dc83c-7795-4dbd-8ee9-3e59ec526e6d
fi
font="/usr/share/grub/unicode.pf2"
fi
if loadfont $font ; then
set gfxmode=auto
load_video
insmod gfxterm
set locale_dir=$prefix/locale
set lang=en_US
insmod gettext
fi
terminal_output gfxterm
if [ "${recordfail}" = 1 ] ; then
set timeout=30
else
if [ x$feature_timeout_style = xy ] ; then
set timeout_style=hidden
set timeout=0
# Fallback hidden-timeout code in case the timeout_style feature is
# unavailable.
elif sleep --interruptible 0 ; then
set timeout=0
fi
fi
### END /etc/grub.d/00_header ###
### BEGIN /etc/grub.d/05_debian_theme ###
set menu_color_normal=white/black
set menu_color_highlight=black/light-gray
if background_color 44,0,30,0; then
clear
fi
### END /etc/grub.d/05_debian_theme ###
### BEGIN /etc/grub.d/10_linux ###
function gfxmode {
set gfxpayload="${1}"
if [ "${1}" = "keep" ]; then
set vt_handoff=vt.handoff=1
else
set vt_handoff=
fi
}
if [ "${recordfail}" != 1 ]; then
if [ -e ${prefix}/gfxblacklist.txt ]; then
if hwmatch ${prefix}/gfxblacklist.txt 3; then
if [ ${match} = 0 ]; then
set linux_gfx_mode=keep
else
set linux_gfx_mode=text
fi
else
set linux_gfx_mode=text
fi
else
set linux_gfx_mode=keep
fi
else
set linux_gfx_mode=text
fi
export linux_gfx_mode
menuentry 'Ubuntu' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-ca8dc83c-7795-4dbd-8ee9-3e59ec526e6d' {
recordfail
load_video
gfxmode $linux_gfx_mode
insmod gzio
if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
insmod part_msdos
insmod ext2
set root='hd1,msdos5'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-bios=hd1,msdos5 --hint-efi=hd1,msdos5 --hint-baremetal=ahci1,msdos5 ca8dc83c-7795-4dbd-8ee9-3e59ec526e6d
else
search --no-floppy --fs-uuid --set=root ca8dc83c-7795-4dbd-8ee9-3e59ec526e6d
fi
linux /boot/vmlinuz-5.4.0-122-generic root=UUID=ca8dc83c-7795-4dbd-8ee9-3e59ec526e6d ro quiet splash $vt_handoff
initrd /boot/initrd.img-5.4.0-122-generic
}
submenu 'Advanced options for Ubuntu' $menuentry_id_option 'gnulinux-advanced-ca8dc83c-7795-4dbd-8ee9-3e59ec526e6d' {
menuentry 'Ubuntu, with Linux 5.4.0-122-generic' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-5.4.0-122-generic-advanced-ca8dc83c-7795-4dbd-8ee9-3e59ec526e6d' {
recordfail
load_video
gfxmode $linux_gfx_mode
insmod gzio
if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
insmod part_msdos
insmod ext2
set root='hd1,msdos5'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-bios=hd1,msdos5 --hint-efi=hd1,msdos5 --hint-baremetal=ahci1,msdos5 ca8dc83c-7795-4dbd-8ee9-3e59ec526e6d
else
search --no-floppy --fs-uuid --set=root ca8dc83c-7795-4dbd-8ee9-3e59ec526e6d
fi
echo 'Loading Linux 5.4.0-122-generic ...'
linux /boot/vmlinuz-5.4.0-122-generic root=UUID=ca8dc83c-7795-4dbd-8ee9-3e59ec526e6d ro quiet splash $vt_handoff
echo 'Loading initial ramdisk ...'
initrd /boot/initrd.img-5.4.0-122-generic
}
menuentry 'Ubuntu, with Linux 5.4.0-122-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-5.4.0-122-generic-recovery-ca8dc83c-7795-4dbd-8ee9-3e59ec526e6d' {
recordfail
load_video
insmod gzio
if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
insmod part_msdos
insmod ext2
set root='hd1,msdos5'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-bios=hd1,msdos5 --hint-efi=hd1,msdos5 --hint-baremetal=ahci1,msdos5 ca8dc83c-7795-4dbd-8ee9-3e59ec526e6d
else
search --no-floppy --fs-uuid --set=root ca8dc83c-7795-4dbd-8ee9-3e59ec526e6d
fi
echo 'Loading Linux 5.4.0-122-generic ...'
linux /boot/vmlinuz-5.4.0-122-generic root=UUID=ca8dc83c-7795-4dbd-8ee9-3e59ec526e6d ro recovery nomodeset dis_ucode_ldr
echo 'Loading initial ramdisk ...'
initrd /boot/initrd.img-5.4.0-122-generic
}
menuentry 'Ubuntu, with Linux 5.4.0-42-generic' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-5.4.0-42-generic-advanced-ca8dc83c-7795-4dbd-8ee9-3e59ec526e6d' {
recordfail
load_video
gfxmode $linux_gfx_mode
insmod gzio
if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
insmod part_msdos
insmod ext2
set root='hd1,msdos5'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-bios=hd1,msdos5 --hint-efi=hd1,msdos5 --hint-baremetal=ahci1,msdos5 ca8dc83c-7795-4dbd-8ee9-3e59ec526e6d
else
search --no-floppy --fs-uuid --set=root ca8dc83c-7795-4dbd-8ee9-3e59ec526e6d
fi
echo 'Loading Linux 5.4.0-42-generic ...'
linux /boot/vmlinuz-5.4.0-42-generic root=UUID=ca8dc83c-7795-4dbd-8ee9-3e59ec526e6d ro quiet splash $vt_handoff
echo 'Loading initial ramdisk ...'
initrd /boot/initrd.img-5.4.0-42-generic
}
menuentry 'Ubuntu, with Linux 5.4.0-42-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-5.4.0-42-generic-recovery-ca8dc83c-7795-4dbd-8ee9-3e59ec526e6d' {
recordfail
load_video
insmod gzio
if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
insmod part_msdos
insmod ext2
set root='hd1,msdos5'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-bios=hd1,msdos5 --hint-efi=hd1,msdos5 --hint-baremetal=ahci1,msdos5 ca8dc83c-7795-4dbd-8ee9-3e59ec526e6d
else
search --no-floppy --fs-uuid --set=root ca8dc83c-7795-4dbd-8ee9-3e59ec526e6d
fi
echo 'Loading Linux 5.4.0-42-generic ...'
linux /boot/vmlinuz-5.4.0-42-generic root=UUID=ca8dc83c-7795-4dbd-8ee9-3e59ec526e6d ro recovery nomodeset dis_ucode_ldr
echo 'Loading initial ramdisk ...'
initrd /boot/initrd.img-5.4.0-42-generic
}
}
### END /etc/grub.d/10_linux ###
### BEGIN /etc/grub.d/20_linux_xen ###
### END /etc/grub.d/20_linux_xen ###
### BEGIN /etc/grub.d/20_memtest86+ ###
menuentry 'Memory test (memtest86+)' {
insmod part_msdos
insmod ext2
set root='hd1,msdos5'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-bios=hd1,msdos5 --hint-efi=hd1,msdos5 --hint-baremetal=ahci1,msdos5 ca8dc83c-7795-4dbd-8ee9-3e59ec526e6d
else
search --no-floppy --fs-uuid --set=root ca8dc83c-7795-4dbd-8ee9-3e59ec526e6d
fi
knetbsd /boot/memtest86+.elf
}
menuentry 'Memory test (memtest86+, serial console 115200)' {
insmod part_msdos
insmod ext2
set root='hd1,msdos5'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-bios=hd1,msdos5 --hint-efi=hd1,msdos5 --hint-baremetal=ahci1,msdos5 ca8dc83c-7795-4dbd-8ee9-3e59ec526e6d
else
search --no-floppy --fs-uuid --set=root ca8dc83c-7795-4dbd-8ee9-3e59ec526e6d
fi
linux16 /boot/memtest86+.bin console=ttyS0,115200n8
}
### END /etc/grub.d/20_memtest86+ ###
### BEGIN /etc/grub.d/30_os-prober ###
### END /etc/grub.d/30_os-prober ###
### BEGIN /etc/grub.d/30_uefi-firmware ###
### END /etc/grub.d/30_uefi-firmware ###
### BEGIN /etc/grub.d/40_custom ###
# This file provides an easy way to add custom menu entries. Simply type the
# menu entries you want to add after this comment. Be careful not to change
# the 'exec tail' line above.
### END /etc/grub.d/40_custom ###
### BEGIN /etc/grub.d/41_custom ###
if [ -f ${config_directory}/custom.cfg ]; then
source ${config_directory}/custom.cfg
elif [ -z "${config_directory}" -a -f $prefix/custom.cfg ]; then
source $prefix/custom.cfg;
fi
### END /etc/grub.d/41_custom ###
시간 내 주셔서 감사합니다!
답변1
문제를 해결한 것 같습니다. /boot의 모든 필수 파일이 grub에 있는 것 같습니다.
ls /
이제 내가 직면한 문제는 grub을 입력해야 할 때마다
linux /vmlinuz-5.4.0-122-generic root=/dev/sda5
initrd /initrd.img-5.4.0-122-generic
boot
우분투에서 부팅합니다. 이 단계를 자동화할 수 있는 방법이 있나요? grub.cfg에 이러한 명령을 추가하고 새 ISO를 만들 수 있을까요?