QEmu `eject` жалуется, что устройство не найдено, пока оно там - PullRequest
0 голосов
/ 22 октября 2018

Мне нужно извлечь дискету из монитора QEmu 3.0, но команда неожиданно перестает работать, сообщая, что устройство не найдено, хотя оно действительно там.

Список устройств:

(qemu) info block
fda: dos-6-22/Dos622-1.img (raw)
    Attached to:      /machine/unattached/device[11]
    Removable device: not locked, tray closed
    Cache mode:       writeback

hda: hda.img (raw)
    Attached to:      /machine/peripheral-anon/device[1]
    Cache mode:       writeback

Извлечь результат команды:

(qemu) eject fda
Device 'fda' not found

Это так, хотя в этой документации сказано, что я должен это сделать: https://www.linux -kvm.org / page / Change_cdrom (только это яхотите извлечь дискету вместо CD-ROM).

Команда change жалуется на то же самое:

(qemu) change fda dos-6-22/Dos622-2.img raw
Device 'fda' not found

Это ошибка или я что-то не так делаю?

Я пытался использовать разные имена узлов с всегда одинаковым результатом.

Обновление:

Я почти уверен, что нет правильного ответа, и это скорееошибка, которую я только что представил: https://bugs.launchpad.net/qemu/+bug/1799766.

1 Ответ

0 голосов
/ 23 октября 2018

Я отправляю как ответ, но я не совсем уверен.Я могу просто сказать, что, если я правильно понимаю, это ошибка.

Ответ состоит из двух частей.

Первая часть - это упрощенный неудачный вызов:

qemu-system-i386 \
   -monitor stdio \
   -machine type=isapc,vmport=off \
   -blockdev driver=file,node-name=fda-img,filename=fda.img \
   -blockdev driver=raw,node-name=fda,file=fda-img \
   -global isa-fdc.driveA=fda

(qemu) info block
ide1-cd0: [not inserted]
    Attached to:      /machine/unattached/device[19]
    Removable device: not locked, tray closed

sd0: [not inserted]
    Removable device: not locked, tray closed

fda: fda.img (raw)
    Attached to:      /machine/unattached/device[13]
    Removable device: not locked, tray closed
    Cache mode:       writeback
(qemu) eject fda
Device 'fda' not found

Вторая часть, то же самое без последнего аргумента -global isa-fdc.driveA=fda:

qemu-system-i386 \
   -monitor stdio \
   -machine type=isapc,vmport=off \
   -blockdev driver=file,node-name=fda-img,filename=fda.img \
   -blockdev driver=raw,node-name=fda,file=fda-img

(qemu) info block
ide1-cd0: [not inserted]
    Attached to:      /machine/unattached/device[19]
    Removable device: not locked, tray closed

floppy0: [not inserted]
    Attached to:      /machine/unattached/device[13]
    Removable device: not locked, tray closed

sd0: [not inserted]
    Removable device: not locked, tray closed
(qemu) eject floppy0

При удалении -global isa-fdc.driveA=fda появляется больше ошибок.Однако документация гласит:

-глобальный драйвер = драйвер, свойство = свойство, значение = значение Установить значение по умолчанию для свойства драйвера prop равным значению, например:

qemu-system-i386 -global ide-hd.physical_block_size = 4096 disk-image.img В частности, вы можете использовать это для установки свойств драйвера для устройств, которые автоматически создаются моделью машины .Чтобы создать устройство, которое не было создано автоматически, и задать для него свойства, используйте -device.

-global driver.prop = значение - это сокращение от -global driver = driver, property = prop, value = value.Длинный синтаксис работает, даже если драйвер содержит точку.

То, на что я акцентировал внимание в цитате, говорит о том, что я не неправильно использую -global, и это, скорее всего, ошибка.

Обновление для более подробной информации:

Кажется, с использованием -drive вместо -device и driveA, результат не тот же, хотя документация RedHat рекомендует использовать -device вместо -drive и документация QEmu 3.0 гласит, что -drive по сути является сокращением для -device («по существу», не говоря о разнице).

Ниже два случая, за исключением info block и выдержка из info qtree.

С этим eject floppy0 работает:

qemu-system-i386 \
   -monitor stdio \
   -machine type=isapc,vmport=off \
   -drive format=raw,if=floppy,media=disk,file=fda.img \
   -device isa-vga,vgamem_mb=1 \
   -serial msmouse

[…]

floppy0 (#block156): fda.img (raw)
    Attached to:      /machine/unattached/device[12]
    Removable device: not locked, tray closed
    Cache mode:       writeback

[…]

  dev: isa-fdc, id ""
    iobase = 1008 (0x3f0)
    irq = 6 (0x6)
    dma = 2 (0x2)
    driveA = ""
    driveB = ""
    check_media_rate = true
    fdtypeA = "auto"
    fdtypeB = "auto"
    fallback = "288"
    isa irq 6
    bus: floppy-bus.0
      type floppy-bus
      dev: floppy, id ""
        unit = 0 (0x0)
        drive = "floppy0"
        logical_block_size = 512 (0x200)
        physical_block_size = 512 (0x200)
        min_io_size = 0 (0x0)
        opt_io_size = 0 (0x0)
        discard_granularity = 4294967295 (0xffffffff)
        write-cache = "auto"
        share-rw = false
        drive-type = "144"

С этим eject fda не работает:

qemu-system-i386 \
   -monitor stdio \
   -machine type=isapc,vmport=off \
   -blockdev driver=file,node-name=fda-img,filename=fda.img \
   -blockdev driver=raw,node-name=fda,file=fda-img \
   -global isa-fdc.driveA=fda \
   -device isa-vga,vgamem_mb=1 \
   -serial msmouse

[…]

fda: fda.img (raw)
    Attached to:      /machine/unattached/device[12]
    Removable device: not locked, tray closed
    Cache mode:       writeback

[…]

  dev: isa-fdc, id ""
    iobase = 1008 (0x3f0)
    irq = 6 (0x6)
    dma = 2 (0x2)
    driveA = ""
    driveB = ""
    check_media_rate = true
    fdtypeA = "auto"
    fdtypeB = "auto"
    fallback = "288"
    isa irq 6
    bus: floppy-bus.0
      type floppy-bus
      dev: floppy, id ""
        unit = 0 (0x0)
        drive = "fda"
        logical_block_size = 512 (0x200)
        physical_block_size = 512 (0x200)
        min_io_size = 0 (0x0)
        opt_io_size = 0 (0x0)
        discard_granularity = 4294967295 (0xffffffff)
        write-cache = "auto"
        share-rw = false
        drive-type = "144"
...