qemu/kvm으로 Debian 10 이미지를 어떻게 부팅하나요?

qemu/kvm으로 Debian 10 이미지를 어떻게 부팅하나요?

qemu를 사용하여 Debian 10의 openstack 이미지를 부팅하려고 하는데 하드 드라이브를 감지하는 동안 오류가 발생했습니다. 부팅 시퀀스의 끝이 표시됩니다.

[    0.989085] Run /init as init process
Loading, please wait...
Starting version 241
[    1.068365] SCSI subsystem initialized
[    1.073933] cryptd: max_cpu_qlen set to 1000
[    1.085586] AVX2 version of gcm_enc/dec engaged.
[    1.085699] PCI Interrupt Link [LNKA] enabled at IRQ 10
[    1.086342] AES CTR mode by8 optimization enabled
[    1.094169] scsi host0: ata_piix
[    1.095524] scsi host1: ata_piix
[    1.096120] ata1: PATA max MWDMA2 cmd 0x1f0 ctl 0x3f6 bmdma 0xc2c0 irq 14
[    1.097198] ata2: PATA max MWDMA2 cmd 0x170 ctl 0x376 bmdma 0xc2c8 irq 15
[    1.108170] PCI Interrupt Link [LNKB] enabled at IRQ 11
[    1.120402] virtio_blk virtio0: [vda] 736 512-byte logical blocks (377 kB/368 KiB)
Begin: Loading essential drivers ... done.
Begin: Running /scripts/init-premount ... done.
Begin: Mounting root file system ... Begin: Running /scripts/local-top ... done.
Begin: Running /scripts/local-premount ... done.
Begin: Waiting for root file system ... Begin: Running /scripts/local-block ... done.
Begin: Running /scripts/local-block ... done.
Begin: Running /scripts/local-block ... done.
... line repeats ...
Begin: Running /scripts/local-block ... done.
Begin: Running /scripts/local-block ... done.
done.
Gave up waiting for root file system device.  Common problems:
 - Boot args (cat /proc/cmdline)
   - Check rootdelay= (did the system wait long enough?)
 - Missing modules (cat /proc/modules; ls /dev)
ALERT!  UUID=77e3f255-2ef2-47bc-ad89-7cdbd65f5fbc does not exist.  Dropping to a shell!


BusyBox v1.30.1 (Debian 1:1.30.1-4) built-in shell (ash)
Enter 'help' for a list of built-in commands.

initramfs 프롬프트에서 다음을 볼 수 있습니다.

(initramfs) cat /proc/cmdline
BOOT_IMAGE=/boot/vmlinuz-4.19.0-5-cloud-amd64 root=UUID=77e3f255-2ef2-47bc-ad89-7cdbd65f5fbc ro biosdevname=0 net.ifnames=0 console=tty0 console=ttyS0,115200 earlyprintk=ttyS0,115200 consoleblank=0 systemd.show_status=true

(initramfs) cat /proc/modules
ata_generic 16384 0 - Live 0xffffffffc00ba000
crc32c_intel 24576 0 - Live 0xffffffffc00b3000
virtio_blk 20480 0 - Live 0xffffffffc00ad000
aesni_intel 200704 0 - Live 0xffffffffc0156000
ata_piix 36864 0 - Live 0xffffffffc0147000
aes_x86_64 20480 1 aesni_intel, Live 0xffffffffc0135000
crypto_simd 16384 1 aesni_intel, Live 0xffffffffc0130000
libata 245760 2 ata_generic,ata_piix, Live 0xffffffffc00da000
cryptd 28672 2 aesni_intel,crypto_simd, Live 0xffffffffc00d2000
glue_helper 16384 1 aesni_intel, Live 0xffffffffc00cb000
scsi_mod 237568 1 libata, Live 0xffffffffc0072000
virtio_pci 28672 0 - Live 0xffffffffc0066000
virtio_ring 28672 2 virtio_blk,virtio_pci, Live 0xffffffffc005b000
virtio 16384 2 virtio_blk,virtio_pci, Live 0xffffffffc0053000

(initramfs) ls /dev
block               tty18               tty5
char                tty19               tty50
console             tty2                tty51
core                tty20               tty52
cpu_dma_latency     tty21               tty53
disk                tty22               tty54
fd                  tty23               tty55
full                tty24               tty56
hpet                tty25               tty57
input               tty26               tty58
kmsg                tty27               tty59
mem                 tty28               tty6
memory_bandwidth    tty29               tty60
network_latency     tty3                tty61
network_throughput  tty30               tty62
null                tty31               tty63
psaux               tty32               tty7
ptmx                tty33               tty8
pts                 tty34               tty9
random              tty35               ttyS0
snapshot            tty36               ttyS1
stderr              tty37               ttyS2
stdin               tty38               ttyS3
stdout              tty39               urandom
tty                 tty4                vcs
tty0                tty40               vcs1
tty1                tty41               vcsa
tty10               tty42               vcsa1
tty11               tty43               vcsu
tty12               tty44               vcsu1
tty13               tty45               vda
tty14               tty46               vga_arbiter
tty15               tty47               zero
tty16               tty48
tty17               tty49

(initramfs) ls /dev/disk/by-label/
cidata

(initramfs) ls -al /dev/disk/by-uuid/
total 0
drwxr-xr-x    2 0        0               60 Jul 22 00:07 .
drwxr-xr-x    5 0        0              100 Jul 22 00:07 ..
lrwxrwxrwx    1 0        0                9 Jul 22 00:07 2019-07-21-20-02-09-00 -> ../../vda

이 VM을 다시 생성하려면 먼저 다운로드한 기본 이미지에서 qcow2 이미지를 설정합니다(다음에서 다운로드함).오픈스택 이미지 사이트):

~/vm/deb10-test$ sha256sum ../base-debian-10/base.qcow2
d4c2966d996a3e08c198be41640d54b5d0c038cfc21b4d05e4b769824974daaf  ../base-debian-10/base.qcow2

~/vm/deb10-test$ qemu-img create -f qcow2 -o "backing_file=../base-debian-10/base.qcow2" image.qcow2 20G
Formatting 'image.qcow2', fmt=qcow2 size=21474836480 backing_file=../base-debian-10/base.qcow2 encryption=off cluster_size=65536 lazy_refcounts=off refcount_bits=16

seed.img다음으로 다음을 사용하여 cloud-init를 설정했습니다 cloud-localds.

~/vm/deb10-test$ cat meta-data
instance-id: iid-deb10-test-20190721-193118
hostname: deb10-test
local-hostname: deb10-test

~/vm/deb10-test$ cat network-config
---
version: 1
config:
- type: physical
  name: eth0
  subnets:
  - type: static
    address: 192.168.237.42
    netmask: 255.255.255.0
    routes:
    - network: 0.0.0.0
      netmask: 0.0.0.0
      gateway: 192.168.237.1
- type: nameserver
  address: [192.168.234.10, 192.168.234.254, 8.8.8.8]
  search: []

~/vm/deb10-test$ cat user-data
#cloud-config
users:
  - default
chpasswd:
  list: |
    debian:passw0rd
  expire: False
ssh_pwauth: True
package_update: true
packages:
- python
bootcmd:
# disable automatic dhcp
- sed -e '/^#/! {/eth0/ s/^/# /}' -i /etc/network/interfaces

~/vm/deb10-test$ cloud-localds -v ./seed.img --network-config network-config user-data meta-data
wrote ./seed.img with filesystem=iso9660 and diskformat=raw                                     

마지막으로 다음과 같이 virt-install을 실행했습니다.

~/vm/deb10-test$ virt-install \
  --os-variant auto --virt-type kvm \
  --name deb10-test --graphics none --import \
  --disk path="./image.qcow2",format=qcow2,bus=scsi \
  --disk path="./seed.img",bus=virtio \
  --cpu host --vcpus 2 --memory 2048 \
  --network network=routed                                              

비슷한 절차가 Debian 9 이미지에 적용되며 bus=virtio다른 많은 Linux 이미지(CentOS 및 Ubuntu)에도 적용됩니다. 나머지 initramfs는 작동하는 것처럼 보이는데 왜 하드 드라이브 장치가 표시되지 않는지 알 수 없습니다. Debian 10을 사용하려면 통과해야 하는 다른 옵션이 있나요?


편집하다: 다음을 시도해도 문제가 해결되지 않았습니다.

  • --machine q35: 눈에 띄는 차이는 없습니다. 문서에 따르면 KVM에는 필요하지 않은 것 같습니다.
  • --disk path=./seed.img,device=cdrom,bus=sata: 눈에 띄는 차이 없음
  • --controller scsi,model=virtio-scsi: 이로 인해 실제로 부팅이 더 중단되었습니다. 빈 콘솔에 매달려 있고, grub, 커널 부팅 또는 initramfs 프롬프트가 없습니다. model=autoinitramfs 프롬프트로 돌아갔습니다 .

답변1

  1. 이것을 다운로드하세요netboot/initrd.gz

  2. 이것을 다운로드하세요넷부트/vmlinuz

  3. 다음을 사용하여 빈 디스크 이미지를 만듭니다.

    qemu-img 생성 -f qcow2 hda.qcow2 10G

  4. 다음을 사용하여 QEMU를 실행합니다 debian-installer.

    qemu 시스템 -???????? -M virt -m 1024 -kernel vmlinuz -initrd initrd.gz -drive if=none,file=hda.qcow2,format=qcow2,id=hd -device virtio-blk-device,drive=hd -netdev 사용자,id= mynet -device virtio-net-device,netdev=mynet -nographic -no-reboot

debian-installer프로그램이 실행되고, 일부 텍스트 메뉴로 몇 가지 기본적인 질문을 하고, 가상 장치를 검색하고, 작업을 수행하고, hda.qcow2디스크 이미지에 모든 기능을 갖춘 Debian10 OS를 성공적으로 설치합니다. 부트로더가 없어졌다는 소리는 무시하세요...

  1. hda.qcow2이제 이 이미지를 실행하려면 이미지의 2개 파일을 호스트 OS의 파일 시스템(예: QEMU 디렉터리)에 복사해야 합니다. 즉: vmlinuz-4.19.????????initrd.img-4.19.?????...사용libguestfsLinux의 도구 또는 완두콩윈도우즈에서

  2. 마지막으로 다음을 사용하여 새로 설치된 가상 머신을 실행합니다.

    qemu 시스템 -???????? -M virt -m 1024 -kernel vmlinuz-4.19.???????? -initrd initrd.img-4.19.???????? -append root=/dev/vda2 -drive if=none,file=hda.qcow2,format=qcow2,id=hd -device virtio-blk-device,drive=hd -netdev user,id=mynet,restrict=off, net=192.168.0.0/24,hostfwd=tcp:127.0.0.1:10022-192.168.0.15:22 -device virtio-net-device,netdev=mynet -nographic -no-reboot

Debian 설치 중에 Linux 파티션의 전체 가상 디스크를 포맷하지 않기로 선택한 경우 ??????시스템의 특정 파일 이름으로 변경하고 다른 장치로 변경하십시오 .-append root=/dev/vda2

  1. 마지막으로 VM을 부팅하고 콘솔에서 로그인합니다.

root127.0.0.1:10022에서 SSH를 통해 이 가상 머신에 로그인하려면 /etc/ssh/sshd_config파일을 편집하고 다음 행을 추가 해야 합니다 PermitRootLogin yes.

당신은 또한 살펴보고 싶을 수도 있습니다이 답변SSH 서버가 오작동하면 내 것입니다.

답변2

귀하의 명령에서 변경할 사항이 몇 가지 있습니다 virt-install.

--machine q35첫째, 매우 오래된(Windows 95 시대) PC의 하드웨어를 에뮬레이트하는 기본 머신 유형을 허용하는 대신 추가하겠습니다 . virtio-scsi 컨트롤러도 추가해야 합니다 --controller scsi,model=virtio-scsi.

둘째, ISO 이미지의 디스크 유형을 CDROM으로 설정합니다(또한 SATA를 통해 연결해야 합니다). 그래서--disk path=./seed.img,device=cdrom,bus=sata

관련 정보