У меня 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: could not open disk imag│ 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: Invalid argument
Хост-система:
#uname -a Linux srv-vh1.su.local 3.7.10-1.16-default #1 SMP Fri May 31 20:21:23 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux srv-vh1:/mnt/tmpfs # virsh version Compiled against library: libvirt 1.0.2 Using library: libvirt 1.0.2 Using API: QEMU 1.0.2 Running hypervisor: QEMU 1.3.0 srv-vh1:/mnt/tmpfs # free total used free shared buffers cached Mem: 24627548 5084724 19542824 0 60640 138792 -/+ buffers/cache: 4885292 19742256 Swap: 8384444 0 8384444 srv-vh1:/mnt/tmpfs # cat /etc/mtab | grep tmpfs devtmpfs /dev devtmpfs rw,relatime,size=12296608k,nr_inodes=3074152,mode=755 0 0 tmpfs /dev/shm tmpfs rw,relatime 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,relatime 0 0 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ tmpfs /tmp tmpfs rw,relatime 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 # df Filesystem 1K-blocks used Avaible Used% Mountpoint 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 Name: tmpfs UUID: 6287028a-9faf-f762-20de-d36d63657be3 Status: working Persistent: yes Autostart: yes Capacity: 11,74 GiB Выделение: 0,00 Avaible: 11,74 GiB 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
Что я делаю не так ?
Очевидно, если вы установите cache = NONE для файла образа диска в любой файловой системе хоста, которая не поддерживает Direct IO, Virt-Manager в настоящее время выдаст не очень полезное сообщение об ошибке «Something something ... Invalid Argument» и откажется запускаться Гостевая ВМ.
Одним из примеров такой файловой системы, которая не поддерживает Direct IO, является tmpfs. Другая такая файловая система, в которой, возможно, вы можете дополнительно отключить Direct IO, - это GlusterFS (о которой я не слышал, прежде чем столкнулся с той же проблемой, что и Сергей, и исследовал ошибку). Для tmpfs отсутствие поддержки Direct IO кажется техническим ограничением. или проектный конфликт в настоящее время, и я не знаю, будет ли / можно ли исправить это в будущем.
В моем случае я поставил RAM-диск объемом 3,6 ГБ для гостевой виртуальной машины Win7Pro, работающей на CentOS7, и установил cache = NONE для RAM-диска в Virt-Manager. Другие параметры, которые использовал tmpfs img, были virtio и raw. ВМ откажется запускаться с такой же / похожей ошибкой, говоря «... Недействительный аргумент».
Технические подробности и замечания непосредственно от инженера и разработчика Redhat, который закодировал патч для функции cache = NONE и поддерживает (?) Virt-Manager (Daniel Berrange), см. В обсуждении по следующей ссылке:
https://bugs.launchpad.net/nova/+bug/959637
Процитирую Даниэля из URL-адреса выше: "> не удалось открыть образ диска / mnt / vmstore / instance / instance-0000001a / disk: недопустимый аргумент
вероятно, означает, что файловая система не поддерживает Direct IO. AFAIK, все файловые системы, кроме tmpfs, должны поддерживать это .. "
Кроме того, Даниэль продолжает: «Итак, что мы хотим сделать, это [....] проверить, поддерживает ли том хранилища Direct IO. Если это так, то используйте cache = none, иначе откатитесь к cache = Writethrough, который не использует Direct I / O, но все же безопасен от сбоев ".
В моем случае я смог убедиться, что установка cache = NONE для файла img tmpfs НЕ запускала виртуальную машину и показывала ошибку, как описано выше. Он БЫЛ в состоянии успешно запустить виртуальную машину, если для кэша было установлено значение «По умолчанию» или явно «сквозная запись». Нет смысла использовать «обратную запись», поскольку эта файловая система и расходная, и в любом случае полностью находилась в ОЗУ, поэтому, очевидно, я не использовал обратную запись.
Надеюсь, это поможет!
Это ошибка. tmpfs не поддерживает cache=none
.
Почему бы просто не дать гостю больше барана, чтобы его не нужно было менять местами?
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