debian11에서 Xen으로 부팅(initrd 문제)

debian11에서 Xen으로 부팅(initrd 문제)
Linux xd 5.10.0-16-amd64 #1 SMP Debian 5.10.127-1 (2022-06-30) x86_64 GNU/Linux

2022-07-20 수정

이런 문제가 가끔 발생합니다. 현재 Xen을 시작하고 initramfs에 로그인할 때 많은 어려움을 겪고 있습니다.

Wiki에서는 썸 드라이브나 루트 디렉터리를 마운트할 것을 권장합니다( mount -o remount,rw/root ).

분명히 디스크가 보이지 않습니다. 전체 구성 파일과 dmesg 등은 Xen 목록에서 찾을 수 있습니다.

https://lists.xenproject.org/archives/html/xen-users/2022-07/threads.html#00041

https://lists.xenproject.org/archives/html/xen-users/2022-07/msg00057.html

내 debian11 에는 xen-hypervisor-4.14-amd64, xen-hypervisor-commonxen-system-amd64xen-utils-4.14

그런데 Xen을 시작할 수 없습니다. 도와주세요.

이론적으로 Xen을 설치한 후https://wiki.debian.org/Xen, 그냥 실행해야 합니다:

dpkg-divert --divert /etc/grub.d/08_linux_xen --rename /etc/grub.d/20_linux_xen

update-grub

불행하게도 boot break와 grub 메일링 리스트에서는 작년 3월과 4월 사이에 이 문제에 대해 매우 심도 있게 논의했습니다. 명백히 multiboot2는 이 문제를 해결하지 못할 것입니다:

https://www.mail-archive.com/[이메일 보호됨]/msg32020.html

분명히 모든 것이 잘못되었습니다 initrd. Xen을 설치한 후 다시 빌드해야 합니까 initrd? 어떻게 해야 합니까?

도움이 필요해요. 아직 미정인가요? 사용할 수 있는 해결 방법이 있습니까(Xen에서 부분적으로 부팅하고 프롬프트에서 Xen이 작동하는 데 필요한 나머지를 수동으로 로드)? 어떻게 진행해야 하나요? grub, debian xen 패키지 및 Xen에 요청/오류로 등록해 보겠습니다. 수행할 작업에 대한 더 많은 아이디어가 있습니까?

grub 메일링 리스트에 대한 토론에서는 다음과 같이 지적합니다.

https://wiki.debian.org/DebianInstaller/NetbootFirmware#The_Solution:_Add_Firmware_to_Initramfs

매우 복잡하고 위험해 보이는데...이게 앞으로 나아갈 방향인가요?

Xen에 필요한 기능을 지원할 수 있도록 grub2를 패치한 사람이 있습니까?

참고: 저는 Eve가 아닌 순수 Xen을 사용하고 있습니다.

/etc/default/grub문서 내용:

# If you change this file, run 'update-grub' afterwards to update
# /boot/grub/grub.cfg.
# For full documentation of the options in this file, see:
#   info -f grub -n 'Simple configuration'

GRUB_DEFAULT=0
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT="quiet"
GRUB_CMDLINE_LINUX=""

# Uncomment to enable BadRAM filtering, modify to suit your needs
# This works with Linux (no patch required) and with any kernel that obtains
# the memory map information from GRUB (GNU Mach, kernel of FreeBSD ...)
#GRUB_BADRAM="0x01234567,0xfefefefe,0x89abcdef,0xefefefef"

# Uncomment to disable graphical terminal (grub-pc only)
#GRUB_TERMINAL=console

# The resolution used on graphical terminal
# note that you can use only modes which your graphic card supports via VBE
# you can see them in real GRUB with the command `vbeinfo'
#GRUB_GFXMODE=640x480

# Uncomment if you don't want GRUB to pass "root=UUID=xxx" parameter to Linux
#GRUB_DISABLE_LINUX_UUID=true

# Uncomment to disable generation of recovery mode menu entries
#GRUB_DISABLE_RECOVERY="true"

# Uncomment to get a beep at grub start
#GRUB_INIT_TUNE="480 440 1"

/boot/grub/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="Debian GNU/Linux, with Xen hypervisor"
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 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_gpt
insmod ext2
if [ x$feature_platform_search_hint = xy ]; then
  search --no-floppy --fs-uuid --set=root  0123abcd
else
  search --no-floppy --fs-uuid --set=root 0123abcd
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_GB
  insmod gettext
fi
terminal_output gfxterm
if [ "${recordfail}" = 1 ] ; then
  set timeout=30
else
  if [ x$feature_timeout_style = xy ] ; then
    set timeout_style=menu
    set timeout=5
  # Fallback normal timeout code in case the timeout_style feature is
  # unavailable.
  else
    set timeout=5
  fi
fi
### END /etc/grub.d/00_header ###

### BEGIN /etc/grub.d/05_debian_theme ###
insmod part_gpt
insmod ext2
if [ x$feature_platform_search_hint = xy ]; then
  search --no-floppy --fs-uuid --set=root  0123abcd
else
  search --no-floppy --fs-uuid --set=root 0123abcd
fi
insmod png
if background_image /usr/share/desktop-base/homeworld-theme/grub/grub-4x3.png; then
  set color_normal=white/black
  set color_highlight=black/white
else
  set menu_color_normal=cyan/blue
  set menu_color_highlight=white/blue
fi
### END /etc/grub.d/05_debian_theme ###

### BEGIN /etc/grub.d/08_linux_xen ###
menuentry 'Debian GNU/Linux, with Xen hypervisor' --class debian --class gnu-linux --class gnu --class os --class xen $menuentry_id_option 'xen-gnulinux-simple-0123abcd' {
    insmod part_gpt
    insmod ext2
    if [ x$feature_platform_search_hint = xy ]; then
      search --no-floppy --fs-uuid --set=root  0123abcd
    else
      search --no-floppy --fs-uuid --set=root 0123abcd
    fi
    echo    'Loading Xen 4.14-amd64 ...'
        if [ "$grub_platform" = "pc" -o "$grub_platform" = "" ]; then
            xen_rm_opts=
        else
            xen_rm_opts="no-real-mode edd=off"
        fi
    multiboot2  /xen-4.14-amd64.gz placeholder   ${xen_rm_opts}
    echo    'Loading Linux 5.10.0-16-amd64 ...'
    module2 /vmlinuz-5.10.0-16-amd64 placeholder root=UUID=0123abcd ro  quiet
    echo    'Loading initial ramdisk ...'
    module2 --nounzip   /initrd.img-5.10.0-16-amd64
}
submenu 'Advanced options for Debian GNU/Linux (with Xen hypervisor)' $menuentry_id_option 'gnulinux-advanced-0123abcd' {
    submenu 'Xen hypervisor, version 4.14-amd64' $menuentry_id_option 'xen-hypervisor-4.14-amd64-0123abcd' {
        menuentry 'Debian GNU/Linux, with Xen 4.14-amd64 and Linux 5.10.0-16-amd64' --class debian --class gnu-linux --class gnu --class os --class xen $menuentry_id_option 'xen-gnulinux-5.10.0-16-amd64-advanced-0123abcd' {
            insmod part_gpt
            insmod ext2
            if [ x$feature_platform_search_hint = xy ]; then
              search --no-floppy --fs-uuid --set=root  0123abcd
            else
              search --no-floppy --fs-uuid --set=root 0123abcd
            fi
            echo    'Loading Xen 4.14-amd64 ...'
                if [ "$grub_platform" = "pc" -o "$grub_platform" = "" ]; then
                    xen_rm_opts=
                else
                    xen_rm_opts="no-real-mode edd=off"
                fi
            multiboot2  /xen-4.14-amd64.gz placeholder   ${xen_rm_opts}
            echo    'Loading Linux 5.10.0-16-amd64 ...'
            module2 /vmlinuz-5.10.0-16-amd64 placeholder root=UUID=0123abcd ro  quiet
            echo    'Loading initial ramdisk ...'
            module2 --nounzip   /initrd.img-5.10.0-16-amd64
        }
        menuentry 'Debian GNU/Linux, with Xen 4.14-amd64 and Linux 5.10.0-16-amd64 (recovery mode)' --class debian --class gnu-linux --class gnu --class os --class xen $menuentry_id_option 'xen-gnulinux-5.10.0-16-amd64-recovery-0123abcd' {
            insmod part_gpt
            insmod ext2
            if [ x$feature_platform_search_hint = xy ]; then
              search --no-floppy --fs-uuid --set=root  0123abcd
            else
              search --no-floppy --fs-uuid --set=root 0123abcd
            fi
            echo    'Loading Xen 4.14-amd64 ...'
                if [ "$grub_platform" = "pc" -o "$grub_platform" = "" ]; then
                    xen_rm_opts=
                else
                    xen_rm_opts="no-real-mode edd=off"
                fi
            multiboot2  /xen-4.14-amd64.gz placeholder  ${xen_rm_opts}
            echo    'Loading Linux 5.10.0-16-amd64 ...'
            module2 /vmlinuz-5.10.0-16-amd64 placeholder root=UUID=0123abcd ro single 
            echo    'Loading initial ramdisk ...'
            module2 --nounzip   /initrd.img-5.10.0-16-amd64
        }
    }
    submenu 'Xen hypervisor, version 4.14-amd64.efi' $menuentry_id_option 'xen-hypervisor-4.14-amd64.efi-0123abcd' {
        menuentry 'Debian GNU/Linux, with Xen 4.14-amd64.efi and Linux 5.10.0-16-amd64' --class debian --class gnu-linux --class gnu --class os --class xen $menuentry_id_option 'xen-gnulinux-5.10.0-16-amd64-advanced-0123abcd' {
            insmod part_gpt
            insmod ext2
            if [ x$feature_platform_search_hint = xy ]; then
              search --no-floppy --fs-uuid --set=root  0123abcd
            else
              search --no-floppy --fs-uuid --set=root 0123abcd
            fi
            echo    'Loading Xen 4.14-amd64.efi ...'
                if [ "$grub_platform" = "pc" -o "$grub_platform" = "" ]; then
                    xen_rm_opts=
                else
                    xen_rm_opts="no-real-mode edd=off"
                fi
            multiboot2  /xen-4.14-amd64.efi placeholder   ${xen_rm_opts}
            echo    'Loading Linux 5.10.0-16-amd64 ...'
            module2 /vmlinuz-5.10.0-16-amd64 placeholder root=UUID=0123abcd ro  quiet
            echo    'Loading initial ramdisk ...'
            module2 --nounzip   /initrd.img-5.10.0-16-amd64
        }
        menuentry 'Debian GNU/Linux, with Xen 4.14-amd64.efi and Linux 5.10.0-16-amd64 (recovery mode)' --class debian --class gnu-linux --class gnu --class os --class xen $menuentry_id_option 'xen-gnulinux-5.10.0-16-amd64-recovery-0123abcd' {
            insmod part_gpt
            insmod ext2
            if [ x$feature_platform_search_hint = xy ]; then
              search --no-floppy --fs-uuid --set=root  0123abcd
            else
              search --no-floppy --fs-uuid --set=root 0123abcd
            fi
            echo    'Loading Xen 4.14-amd64.efi ...'
                if [ "$grub_platform" = "pc" -o "$grub_platform" = "" ]; then
                    xen_rm_opts=
                else
                    xen_rm_opts="no-real-mode edd=off"
                fi
            multiboot2  /xen-4.14-amd64.efi placeholder  ${xen_rm_opts}
            echo    'Loading Linux 5.10.0-16-amd64 ...'
            module2 /vmlinuz-5.10.0-16-amd64 placeholder root=UUID=0123abcd ro single 
            echo    'Loading initial ramdisk ...'
            module2 --nounzip   /initrd.img-5.10.0-16-amd64
        }
    }
}

### END /etc/grub.d/08_linux_xen ###

### BEGIN /etc/grub.d/10_linux ###
function gfxmode {
    set gfxpayload="${1}"
}
set linux_gfx_mode=
export linux_gfx_mode
menuentry 'Debian GNU/Linux' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-0123abcd' {
    load_video
    insmod gzio
    if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
    insmod part_gpt
    insmod ext2
    if [ x$feature_platform_search_hint = xy ]; then
      search --no-floppy --fs-uuid --set=root  0123abcd
    else
      search --no-floppy --fs-uuid --set=root 0123abcd
    fi
    echo    'Loading Linux 5.10.0-16-amd64 ...'
    linux   /vmlinuz-5.10.0-16-amd64 root=UUID=0123abcd ro  quiet
    echo    'Loading initial ramdisk ...'
    initrd  /initrd.img-5.10.0-16-amd64
}
submenu 'Advanced options for Debian GNU/Linux' $menuentry_id_option 'gnulinux-advanced-0123abcd' {
    menuentry 'Debian GNU/Linux, with Linux 5.10.0-16-amd64' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-5.10.0-16-amd64-advanced-0123abcd' {
        load_video
        insmod gzio
        if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
        insmod part_gpt
        insmod ext2
        if [ x$feature_platform_search_hint = xy ]; then
          search --no-floppy --fs-uuid --set=root  0123abcd
        else
          search --no-floppy --fs-uuid --set=root 0123abcd
        fi
        echo    'Loading Linux 5.10.0-16-amd64 ...'
        linux   /vmlinuz-5.10.0-16-amd64 root=UUID=0123abcd ro  quiet
        echo    'Loading initial ramdisk ...'
        initrd  /initrd.img-5.10.0-16-amd64
    }
    menuentry 'Debian GNU/Linux, with Linux 5.10.0-16-amd64 (recovery mode)' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-5.10.0-16-amd64-recovery-0123abcd' {
        load_video
        insmod gzio
        if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
        insmod part_gpt
        insmod ext2
        if [ x$feature_platform_search_hint = xy ]; then
          search --no-floppy --fs-uuid --set=root  0123abcd
        else
          search --no-floppy --fs-uuid --set=root 0123abcd
        fi
        echo    'Loading Linux 5.10.0-16-amd64 ...'
        linux   /vmlinuz-5.10.0-16-amd64 root=UUID=0123abcd ro single 
        echo    'Loading initial ramdisk ...'
        initrd  /initrd.img-5.10.0-16-amd64
    }
}

### END /etc/grub.d/10_linux ###

### BEGIN /etc/grub.d/30_os-prober ###
### END /etc/grub.d/30_os-prober ###

### BEGIN /etc/grub.d/30_uefi-firmware ###
menuentry 'System setup' $menuentry_id_option 'uefi-firmware' {
    fwsetup
}
### 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

불행하게도 Xen은 이 하드웨어와 호환되지 않습니다.

추적성을 위해 xen-devel에서 이에 대해 논의합니다.

https://xen.markmail.org/message/7jgv47pk5rsea4ef?q=+list:com%2Exensource%2Elists%2Exen-devel&page=6

펌웨어는 16비트보다 더 넓은 세그먼트 번호를 가지고 있으며 NVME는 부팅 중에 이를 호출하는데 이것이 근본적인 문제입니다.

Xen은 아직 이러한 유형의 하드웨어와 호환되지 않습니다.

xen-devel에 보고된 바와 같이, 선량한 사람이 이 새로운 기능(아마도 새로운 슈퍼콜 sun 기능)을 구현하는 것이 항상 가능합니다. 아니면 모든 하드웨어가 이를 실현할 만큼 충분히 발전했을 수도 있습니다.

불행히도 Xen이 해당 하드웨어와 호환되지 않기 때문에 사람들의 조언을 따르고 Quemu가 있는 KVM으로 이동할 것입니다.

나는 또한 Acer에게 16이지만 PCI 펌웨어 업데이트에 대해 물었습니다.

https://community.acer.com/en/discussion/669340/acer-aspire-5-a517-52g-firmware-w-16-bit-pci-segment-size/p1?new=1

관련 정보