Назад | Перейти на главную страницу

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: 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