- How to share a directory with the host without networking in QEMU?
- Общий доступ к папке между гостем и хостом в virt-manager KVM/Qemu/libvirt
- Замечание о virtiofs
- Общая папка в virt-manager
- Подведение итогов
- Shared folder between QEMU Windows guest and Linux host
- 3 Answers 3
- QEMU’s built-in Samba service
- Usage
- Mode of operation
- Other caveats
How to share a directory with the host without networking in QEMU?
My problem is that networking devices in my device tree are not very stable so I thought the best way to share a folder between qemu and the host system is mount the same img without cache on both sides but the -hda option on qemu does not make the hd available in /dev/. Here is the command I run.
./qemu-xilinx/arm-softmmu/qemu-system-arm -M xilinx-zynq-a9 -m 1024 -serial null -serial mon:stdio -dtb resources/devicetree.dtb -kernel resources/zImage -initrd resources.qemu/ramdisk.img -nographic -s
So the question is: is there a way to avoid networking and yet have a shared directory between qemu and the host? EDIT: I compiled with
./configure --target-list="arm-softmmu,microblazeel-softmmu" --enable-fdt --disable-kvm --enable-virtfs
./qemu-xilinx/arm-softmmu/qemu-system-arm -M xilinx-zynq-a9 -m 1024 -serial null -serial mon:stdio -dtb /homes/cperivol/Sandbox/xilinx-zynq-bootstrap/resources/devicetree.dtb -kernel /homes/cperivol/Sandbox/xilinx-zynq-bootstrap/resources/zImage -initrd /homes/cperivol/Sandbox/xilinx-zynq-bootstrap/resources.qemu/ramdisk.img -nographic -s -fsdev local,path=/homes/cperivol/Sandbox/xilinx-zynq-bootstrap/qemu-sandbox/,security_model=passthrough,id=host0 -device virtio-9p-pci,fsdev=host0,mount_tag=host_tag0
./qemu-xilinx/arm-softmmu/qemu-system-arm -M xilinx-zynq-a9 -m 1024 -serial null -serial mon:stdio -dtb resources/devicetree.dtb -kernel resources/zImage -initrd resources.qemu/ramdisk.img -nographic -s -virtfs local,path=/homes/cperivol/Sandbox/xilinx-zynq-bootstrap/qemu-sandbox/,mount_tag=host0,security_model=passthrough,id=host0
No 'PCI' bus found for device 'virtio-9p-pci'
Maybe I should also mention that in arm-softmmu/config-devices.mak there is CONFIG_PCI=y , and sure enough the object files of the pci are there in hw/pci . EDIT2: Looking at the device tree as dumped by qemu the emulated system does not include a PCI bus.
(qemu) info qtree bus: main-system-bus type System dev: xlnx.ps7-dev-cfg, id "" irq 1 mmio 00000000f8007000/000000000000011c dev: pl330, id "" gpio-in 32 num_chnls = 8 num_periph_req = 4 num_events = 16 mgr_ns_at_rst = 0 i-cache_len = 4 num_i-cache_lines = 8 boot_addr = 0 INS = 0 PNS = 0 data_width = 64 wr_cap = 8 wr_q_dep = 16 rd_cap = 8 rd_q_dep = 16 data_buffer_dep = 256 irq 17 mmio 00000000f8003000/0000000000001000 dev: generic-sdhci, id "" capareg = 0x5780080 maxcurr = 0x0 irq 1 mmio 00000000e0101000/0000000000000100 dev: generic-sdhci, id "" capareg = 0x5780080 maxcurr = 0x0 irq 1 mmio 00000000e0100000/0000000000000100 dev: cadence_gem, id "" mac = 52:54:00:12:34:56 vlan = 0 netdev = hub0port0 bootindex = -1 irq 1 mmio 00000000e000b000/0000000000000640 dev: cadence_ttc, id "" irq 3 mmio 00000000f8002000/0000000000001000 dev: cadence_ttc, id "" irq 3 mmio 00000000f8001000/0000000000001000 dev: cadence_uart, id "" irq 1 mmio 00000000e0001000/0000000000001000 dev: cadence_uart, id "" irq 1 mmio 00000000e0000000/0000000000001000 dev: xlnx.ps7-qspi, id "" num-busses = 2 num-ss-bits = 1 num-txrx-bytes = 4 irq 3 mmio 00000000e000d000/0000000000000100 mmio 00000000fc000000/0000000002000000 bus: spi1 type SSI dev: n25q128, id "" gpio-in 1 bus: spi0 type SSI dev: n25q128, id "" gpio-in 1 dev: xlnx.ps7-spi, id "" num-busses = 1 num-ss-bits = 4 num-txrx-bytes = 1 irq 5 mmio 00000000e0007000/0000000000000100 bus: spi0 type SSI dev: n25q128, id "" gpio-in 1 dev: n25q128, id "" gpio-in 1 dev: n25q128, id "" gpio-in 1 dev: n25q128, id "" gpio-in 1 dev: xlnx.ps7-spi, id "" num-busses = 1 num-ss-bits = 4 num-txrx-bytes = 1 irq 5 mmio 00000000e0006000/0000000000000100 bus: spi0 type SSI dev: n25q128, id "" gpio-in 1 dev: n25q128, id "" gpio-in 1 dev: n25q128, id "" gpio-in 1 dev: n25q128, id "" gpio-in 1 dev: xlnx,ps7-usb, id "zynq-usb-1" maxframes = 128 irq 1 mmio 00000000e0003000/0000000000001000 bus: zynq-usb-1.0 type usb-bus dev: xlnx,ps7-usb, id "zynq-usb-0" maxframes = 128 irq 1 mmio 00000000e0002000/0000000000001000 bus: zynq-usb-0.0 type usb-bus dev: xlnx.ps7-i2c, id "" irq 1 mmio 00000000e0005000/000000000000002c bus: i2c type i2c-bus dev: pca9548, id "" chip-enable = 0 address = 0 address-range = 128 reg = 0 bus: i2c@7 type i2c-bus bus: i2c@6 type i2c-bus bus: i2c@5 type i2c-bus bus: i2c@4 type i2c-bus bus: i2c@3 type i2c-bus dev: at.24c08, id "" size = 1024 address = 84 address-range = 4 reg = 84 dev: at.24c08, id "" size = 1024 address = 80 address-range = 4 reg = 80 bus: i2c@2 type i2c-bus dev: at.24c08, id "" size = 1024 address = 84 address-range = 4 reg = 84 dev: at.24c08, id "" size = 1024 address = 80 address-range = 4 reg = 80 bus: i2c@1 type i2c-bus bus: i2c@0 type i2c-bus dev: xlnx.ps7-i2c, id "" irq 1 mmio 00000000e0004000/000000000000002c bus: i2c type i2c-bus dev: pca9548, id "" chip-enable = 0 address = 0 address-range = 128 reg = 0 bus: i2c@7 type i2c-bus bus: i2c@6 type i2c-bus bus: i2c@5 type i2c-bus bus: i2c@4 type i2c-bus bus: i2c@3 type i2c-bus dev: at.24c08, id "" size = 1024 address = 84 address-range = 4 reg = 84 dev: at.24c08, id "" size = 1024 address = 80 address-range = 4 reg = 80 bus: i2c@2 type i2c-bus dev: at.24c08, id "" size = 1024 address = 84 address-range = 4 reg = 84 dev: at.24c08, id "" size = 1024 address = 80 address-range = 4 reg = 80 bus: i2c@1 type i2c-bus bus: i2c@0 type i2c-bus dev: arm_mptimer, id "" num-cpu = 1 irq 1 mmio ffffffffffffffff/0000000000000020 mmio ffffffffffffffff/0000000000000020 dev: arm_mptimer, id "" num-cpu = 1 irq 1 mmio ffffffffffffffff/0000000000000020 mmio ffffffffffffffff/0000000000000020 dev: a9-scu, id "" num-cpu = 1 irq 0 mmio ffffffffffffffff/0000000000000100 dev: arm_gic, id "" gpio-in 96 num-cpu = 1 num-irq = 96 revision = 1 irq 1 mmio ffffffffffffffff/0000000000001000 mmio ffffffffffffffff/0000000000000100 mmio ffffffffffffffff/0000000000000100 dev: a9mpcore_priv, id "" gpio-in 64 num-cpu = 1 num-irq = 96 irq 1 mmio 00000000f8f00000/0000000000002000 dev: xilinx,zynq_slcr, id "" irq 0 mmio 00000000f8000000/0000000000001000 dev: nand, id "" manufacturer_id = 32 chip_id = 170 drive = irq 0 dev: cfi.pflash02, id "" drive = num-blocks = 512 sector-length = 131072 width = 1 mappings = 1 big-endian = 0 id0 = 102 id1 = 34 id2 = 0 id3 = 0 unlock-addr0 = 2730 unlock-addr1 = 1365 name = "pl353.pflash" irq 0 mmio ffffffffffffffff/0000000004000000 dev: arm.pl35x, id "" x = 3 irq 0 mmio 00000000e000e000/0000000000001000 mmio 00000000e2000000/0000000001000000 mmio 00000000e1000000/0000000001000000
Общий доступ к папке между гостем и хостом в virt-manager KVM/Qemu/libvirt
Приложение или пакет virt-manager использует библиотеку libvirt для предоставления услуг управления виртуальными машинами. Оно имеет интерфейс рабочего стола, который помогает создавать, удалять и управлять несколькими виртуальными машинами.
Интерфейс рабочего стола virt-manager и его компоненты предоставляют гибкое управление виртуальными машинами для различных случаев использования. Это бесплатное приложение с открытым исходным кодом, используемое в основном для виртуальных машин KVM . Однако оно может поддерживать и другие гипервизоры, такие как Xen и LXC .
Замечание о virtiofs
Общий доступ к файлам и папкам обеспечивается общей файловой системой libvirt под названием virtiofs. Она предоставляет все возможности и параметры для доступа к дереву каталогов на хост-машине. Поскольку большинство конфигураций виртуальных машин virt-manager переведены в XML , общие файлы/папки также могут быть заданы XML -файлом.
Общая папка в virt-manager
- Во-первых, убедитесь, что гостевая виртуальная машина выключена. В графическом интерфейсе virt-manager выберите виртуальную машину и нажмите на Open, чтобы открыть настройки консоли.
Затем нажмите «Добавить оборудование» внизу.
Нажмите кнопку Готово. В главном окне virt-manager щелкните правой кнопкой мыши на виртуальной машине и нажмите Run, чтобы запустить виртуальную машину. Не забудьте нажать на «показать графическую консоль» (значок монитора на панели инструментов – если ВМ не отображается.
В гостевой машине создайте папку, в которую вы хотите смонтировать папку хоста. Для этого примера я использовал /mnt/pictures.
И, наконец, смонтируйте папку хоста с помощью метки, созданной в предыдущем шаге, в эту новую папку. Используйте следующую команду для этого. Убедитесь, что имя тега и папки в приведенной ниже команде соответствует вашей системе.
sudo mount -t virtiofs mount_tag_pictures /mnt/pictures
Теперь вы можете просматривать папки и добавлять/удалять элементы без проблем в virt-manager между хостом и гостем.
Подведение итогов
Надеюсь, это решение поможет вам получить доступ к файлам и папкам хоста с гостевой машины. Помните, что ваш идентификатор пользователя, который используется для запуска приложения virt-manager, должен иметь такой же доступ к папке хоста.
Парашютист со стажем. Много читаю и слушаю подкасты. Люблю посиделки у костра, песни под гитару и приближающиеся дедлайны. Люблю путешествовать.
Shared folder between QEMU Windows guest and Linux host
@CiroSantilli包子露宪六四事件法轮功 That question is tagged with Linux where -virtfs works great (see also this question), but I am not aware of a 9p driver for Windows.
3 Answers 3
QEMU’s built-in Samba service
The not-functioning -net user,smb option was caused by an incompatibility with newer Samba versions (>= 4). This is fixed in QEMU v2.2.0 and newer with these changes:
(Debian has backported the latter two patches to 2.1+dfsg-6 which is present in Jessie.)
Usage
You can export one folder as \\10.0.2.4\qemu when using User networking:
qemu-system-x86_64 \ -net user,smb=/absolute/path/to/folder \ -net nic,model=virtio \ .
When QEMU is successfully started with these options, a new /tmp/qemu-smb.*-*/ directory will be created containing a smb.conf . If you are fast enough, then this file could be modified to make paths read-only or export more folders.
Mode of operation
The samba daemon is executed whenever ports 139 or 445 get accessed over a «user» network. Communication happens via standard input/output/error of the smbd process. This is the reason why newer daemons failed, it would write its error message to the pipe instead of protocol messages.
Due to this method of operation, the daemon will not listen on host ports, and therefore will only be accessible to the guest. So other clients in the network and even local users cannot gain access to folders using this daemon.
Since QEMU v2.2.0 printer sharing is completely disabled through the samba configuration, so another worry is gone here.
The speed depends on the network adapter, so it is recommended to use the virtio netkvm driver under Windows.
Also note that the daemon is executed by its absolute path (typically /usr/sbin/smbd ) as specified at compile time (using the —smbd option). Whenever you need to try a new binary or interpose smbd , you will need to modify the file at that path.
Other caveats
Executables ( *.exe ) must be executable on the host ( chmod +x FILE ) for the guest to have execute permissions. To allow execution of any file, add the acl allow execute always = True option to a share.
Example read-only smb.conf configuration which allows execution of any file (based on QEMU v2.2.0):
. [qemu] path=/home/peter/windows read only=yes guest ok=true force user=peter acl allow execute always = True