부팅 프로세스에서 switch_root 직후 Systemd가 Xen Dom0에서 중단됩니다.

부팅 프로세스에서 switch_root 직후 Systemd가 Xen Dom0에서 중단됩니다.

UEFI 및 Arch Linux 설치와 함께 작동하도록 Xen을 설정하려고 했습니다(3.18.2)을 Dom0으로 지정했지만 부팅할 수 없습니다. 주목할 점은 Xen이 아닌 다른 경우에는 완전히 부팅된다는 사실입니다.

특히 내 컴퓨터가 완전히 정지되어 내가 알 수 있는 한 관련 오류 메시지가 나타나지 않고 하드 리셋을 해야 했습니다. 많은 노력과 발견 끝에 가 에 의해 호출된 debug=postmount직후 정지되는 것을 발견했습니다 .systemdswitch_root

진짜 문제는 컴퓨터가 정지되기 전에 systemd에서 로그나 정보를 뱉어낼 수 없다는 것입니다. 다양한 커널과 시스템 특정 로깅 옵션을 시도했지만 마운트 후 쉘을 종료한 직후 화면이 정지되기 전에 로그 없이 커서가 반쯤 깜박일 것입니다.

내 현재 설정은구미부트관련된 경우 아래에 포함된 두 개의 작은 구성 파일을 사용하여 Xen EFI를 시작합니다.

$esp/loader/conf/xen.conf:

title   Xen
efi     xen-4.5.0.efi

$esp/xen.cfg( 와 동일한 디렉토리 xen-4.5.0.efi):

[global]
default=xen

[xen]
options=console=none dom0_mem=2048M,max=2048M dom0_max_vcpus=1 loglvl=all noreboot
kernel=vmlinuz-linux root=/dev/sda3 rw systemd.unit=emergency.service systemd.log_level=debug
ramdisk=initramfs-linux.img

참고 사항:

  • AUR Xen 4.4.1-3 패키지를 사용하여 이를 시도하고 소스에서 Xen 4.5.0을 다운로드하고 컴파일했지만 두 버전 모두 부팅 프로세스의 동일한 지점에서 정지되었습니다.
  • x86_64-pepEFI를 생성하려면 지원을 위해 binutils를 다시 컴파일해야 했지만 그 내용만 교체했습니다. GCC도 교체할 필요가 없겠죠? 또한Xen을 위한 Arch 위키 페이지binutils의 다운그레이드 버전이 필요하다고 언급했지만 해당 버전과 최신 버전 모두 동일한 방식으로 부팅되지 않습니다.
  • 모든 xen 관련 systemd.services를 활성화/비활성화하려고 시도했지만 systemd가 서비스를 전혀 로드하기 전에 충돌이 발생하는 것처럼 보입니다.
  • 불행하게도 systemd가 호출된 후 나를 셸에 넣을 수도 없고 관리할 수도 없습니다 systemd.crash_shell=true.systemd.unit=emergency.service
  • init=/bin/sh내가 알 수 있는 한 잘 작동하므로 문제는 그 자체 systemd가 아니라 확실히 switch_root문제입니다.
  • 셸에서 systemd를 실행하면( init=/bin/sh및 를 통해 exec /usr/lib/systemd/systemd) 같은 방식으로 충돌이 발생하며 그렇게 해도 systemd --system --test --log-level=debug별로 이상해 보이지 않습니다. 즉, Xen 가상화 및 x86_64 시스템에서 해당 내용을 알고 있다고 출력하지만 총 5줄 이상은 출력하지 않습니다. 그런 다음 테스트에 실패합니다.일부 오류아이러니하게도... systemd가 아직 실행되지 않은 것과 관련이 있습니다.

이 문제를 해결하기 위해 전달해야 하는 몇 가지 간단한 커널 매개변수나 Xen Dom0 옵션이 있기를 정말로 바라고 있습니다. 그러나 어떤 통찰력이나 제안이라도 감사하겠습니다.

답변1

no-efi-rs내 경우의 문제는 .NET의 Xen 부팅 옵션에 (EFI 런타임 서비스 없음) 플래그를 전달하여 해결되었습니다 xen.cfg.

부팅 프로세스가 해당 /sbin/init단계에 도달할 수 있는 경우 Xen에 유용한 구성은 다음과 같습니다.

[global]
default=xen

[xen]
options=loglvl=all guest_loglvl=all conring_size=10M console_to_ring=true noreboot
kernel=vmlinuz-linux root=/dev/whatever rw init=/bin/sh log_buf_len=10M loglevel=9 
ramdisk=initramfs-linux.img

쉘에 들어가면 다음을 실행할 수 있습니다.

# mount xenfs so that the next command actually works
mount -t xenfs xenfs /proc/xen
# display the Xen log, pipe it to a file if you want to save it for later
xl dmesg

관련 정보