qemu не запускает квест с образом диска на tmpfs

qemu не запускает квест с образом диска на tmpfs

У меня 32-битная гостевая ОС Windows 2k3r3 (терминальный сервер) с 4 ГБ гостевой оперативной памяти и подкачкой.

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

У меня достаточно оперативной памяти в хост-системе, и я хочу сэкономить дисковый ввод-вывод, переместив этот образ в tmpfs, но гостевая система не запускается и выдает следующее сообщение об ошибке:

qemu-kvm: -drive file=/mnt/tmpfs/vh1-tmp.qcow2,if=none,id=drive-ide0-1-1,format=qcow2,cache=none: не удалось открыть образ диска│ 4098 qemu 20 0 4949M 4146M 5496 S 28.5 17.2 1h00:31 /usr/bin/qemu-kvm -name vh1 -S -M pc-1.3 -cpu kvm64 -enable- e /mnt/tmpfs/vh1-tmp.qcow2: Недопустимый аргумент

Хост-система:

#uname -a
Linux srv-vh1.su.local 3.7.10-1.16-default #1 SMP Пятница 31 мая 20:21:23 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux

srv-vh1:/mnt/tmpfs # версия virsh
Скомпилировано с использованием библиотеки: libvirt 1.0.2
Используемая библиотека: libvirt 1.0.2
Используем API: QEMU 1.0.2
Работающий гипервизор: QEMU 1.3.0

srv-vh1:/mnt/tmpfs # свободно
             общее количество использованных свободных общих буферов кэшировано
Мем: 24627548 5084724 19542824 0 60640 138792
-/+ буферы/кэш: 4885292 19742256
Обмен: 8384444 0 8384444

srv-vh1:/mnt/tmpfs # cat /etc/mtab | grep tmpfs
devtmpfs /dev devtmpfs rw,времяотношения,размер=12296608k,кол-во_инодов=3074152,режим=755 0 0
tmpfs /dev/shm tmpfs rw,времяотношения 0 0
tmpfs /run tmpfs rw,nosuid,nodev,relatime,mode=755 0 0
tmpfs /sys/fs/cgroup tmpfs rw,nosuid,nodev,noexec,mode=755 0 0
tmpfs /mnt/tmpfs tmpfs rw,времяотношения 0 0
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
tmpfs /tmp tmpfs rw,времяотношения 0 0
tmpfs /var/lock tmpfs rw,nosuid,nodev,relatime,mode=755 0 0
tmpfs /var/run tmpfs rw,nosuid,nodev,relatime,mode=755 0 0

srv-vh1:/mnt/tmpfs # дф
Файловая система 1K-блоки используются Доступно Используется% Точка монтирования
devtmpfs 12296608 68 12296540 1% /dev
tmpfs 12313772 0 12313772 0% /dev/shm
tmpfs 12313772 6772 12307000 1% /run
/dev/md1 454131992 218835836 212227596 51% /
tmpfs 12313772 0 12313772 0% /sys/fs/cgroup
tmpfs 12313772 192 12313580 1% /mnt/tmpfs
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
tmpfs 12313772 20 12313752 1% /tmp
tmpfs 12313772 6772 12307000 1% /var/lock
tmpfs 12313772 6772 12307000 1% /var/run

srv-vh1:/mnt/tmpfs # virsh pool-info tmpfs
Имя: tmpfs
UUID: 6287028a-9faf-f762-20de-d36d63657be3
Статус: рабочий
Постоянный: да
Автозапуск: да
Емкость: 11,74 ГиБ
Выделение: 0,00
Доступно: 11,74 ГиБ

srv-vh1:/mnt/tmpfs # ls -la
всего 196
drwxrwxrwt 2 root root 60 сен 9 11:42 .
drwxrwxr-x 4 qemu qemu 4096 сен 8 19:39 ..
-rw-rw-rw- 1 root root 197120 сен 9 11:42 tserver-tmp.qcow2

Что я делаю не так ?

решение1

Судя по всему, если установить cache=NONE для файла образа диска в любой файловой системе хоста, которая не поддерживает Direct IO, Virt-Manager в настоящее время выдаст не очень полезное сообщение об ошибке «Что-то... Недопустимый аргумент» и откажется запустить гостевую виртуальную машину.

Одним из примеров такой файловой системы, не поддерживающей Direct IO, является tmpfs. Еще одна такая файловая система, в которой, возможно, можно отключить Direct IO, — это GlusterFS (о которой я раньше не слышал. Я также столкнулся с той же проблемой, что и Сергей, и изучал ошибку). Для tmpfs отсутствие поддержки Direct IO в настоящее время, похоже, является техническим ограничением или конфликтом дизайна, и я не знаю, будет ли это исправлено в будущем.

В моем случае я установил Ramdisk на 3,6 ГБ для гостевой виртуальной машины Win7Pro, работающей на CentOS7, и установил cache=NONE для ramdisk в Virt-Manager. Другие параметры, которые использовал tmpfs img, были virtio и raw. Виртуальная машина отказывалась запускаться с той же/похожей ошибкой, говорящей "... Invalid Argument".

Технические подробности и заметки непосредственно от инженера и разработчика Redhat, который написал патч для функции cache=NONE и поддерживает (?) Virt-Manager (Дэниел Берранж), см. в обсуждении по следующей ссылке:

https://bugs.launchpad.net/nova/+bug/959637

Процитирую Дэниела из URL выше: " > не удалось открыть образ диска /mnt/vmstore/instances/instance-0000001a/disk: Недопустимый аргумент

вероятно, означает, что файловая система не поддерживает Direct IO. Насколько мне известно, все файловые системы, кроме tmpfs, должны это поддерживать.."

Дэниел также продолжает: «- Итак, то, что мы хотим сделать, это [....] проверить, поддерживает ли том хранилища прямой ввод-вывод. Если поддерживает, то используйте cache=none, в противном случае откатитесь к cache=writethrough, который не использует прямой ввод-вывод, но все еще защищен от сбоев».

В моем случае я смог убедиться, что установка cache=NONE для файла tmpfs img НЕ запускала виртуальную машину и показывала ошибку, как обсуждалось. Она БЫЛА способна успешно запустить виртуальную машину, если кэш был установлен либо на "Default", либо явно на "Write-through". Нет смысла использовать "Write-back", поскольку эта файловая система и расходуемая, и в любом случае полностью находилась в оперативной памяти, поэтому, очевидно, я не использовал Write-back.

Надеюсь, это поможет!

решение2

Почему бы просто не дать гостю больше оперативной памяти, чтобы ему не пришлось ее менять?

srv-vh1:/mnt/tmpfs # ls -la
total 196
drwxrwxrwt 2 root root     60 сен  9 11:42 .
drwxrwxr-x 4 qemu qemu   4096 сен  8 19:39 ..
-rw-rw-rw- 1 root root 197120 сен  9 11:42 tserver-tmp.qcow2

Я заметил, что у вас установлен владелец папки qemu:qemu. Если вы запускаете qemu как другой пользователь, то вам, возможно, захочется изменить владельца файла образа с root на qemu.

решение3

Это ошибка. tmpfs не поддерживает cache=none.

Связанный контент