У меня 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
.