8/02/2006

QEMU в Linux: тонкости и настройки

Итак, эмулятор QEMU мы поставили, запустить Windows смогли, но это ещё не всё. Есть несколько тонкостей, о которых в Сети пишут мало или совсем ничего - это, вроде как, очевидно.
Дальнейшее изложение предполагает, что вы дали себе за труд хотя бы пробежать глазами man qemu (на русском - здесь), который открывает много интересного пользователю.

Тонкость №1. Как получить доступ к файлам внутри "жёсткого диска" QEMU?
Поставили Windows в эмуляторе, программы и теперь хочется иметь доступ к его файлам. Это можно. Создаём точку монтирования, даём ей нужные права и прописываем в конфиге /etc/fstab:
/opt/qemu/images/win2k.img /mnt/windows vfat rw,user,loop,noauto,offset=32256 0 0
Точки монтирования и имя образа, естественно, в вашем случае замените на те, которые существуют. Теперь можно монтировать и отмонтировать Windows диск как и любой другой.

Примечание: будьте внимательны при монтировании диска Windows при запущенном эмуляторе с Windows. Этого вообще лучше не делать, а если и делать, то монтировать диск в режиме "только-чтение". И не удивляйтесь, что некоторые свежие файлы (только что созданные Windows в эмуляторе) не будут видны даже на FAT. Партизанская система, как говорит мой хороший друг.

Тонкость №2. Графическая оболочка в Windows тормозит. Как её ускорить?
Для этого тыкаем правой кнопкой мыши по рабочему столу, заходим в Свойства экрана, поставим 16-битный цвет, тыкаем в кнопку Дополнительно, заходим в расширенные настройки и убираем все "ускоряющие" свистелки Windows: выводим бегунок "аппаратное ускорение" в крайнее левое положение и отключаем "Совмещённые записи". Linux управляет оборудованием на порядок лучше, так что умничать Windows теперь не обязательно.

И естественно, выключаем все спецэффекты: тени, затухания и прочую белиберду. Ставим классический интерфейс и по CTRL+ALT+F переключаемся в полноэкранный режим. После данных манипуляций Windows должен отзываться радикально шустрее.

Тонкость №3. Сколько ресурсов надо операционной системе Windows для приемлемой работы?
1. Обязательно работать с ускоряющим модулем kqemu - ради него, собственно, всё и затевалось (без него можно было просто поставить QEMU из дистрибутива по apt-get qemu).
2. Памяти Windows много не давать - всё равно не умеет ей пользоваться, лезет в своппинг (что под эмулятором очень медленно).
3. Объём "жёсткого диска" - вот тут чем больше, тем лучше. Разрастается Windows быстро - у меня со всеми необходимыми программами занимает 8Гб и уже тесно - приходится подключать новые "диски". Диски лучше делать в FAT - меньше проблем с чтением/записью.
4. Через bridge в сети лучше не пускать - нахватается вирусов. Правда, хост-системе (Debian, например) на это плевать, но всё-таки неприятно.
Как ни странно, но Windows XP работает в эмуляторе заметно стабильнее, чем на реальной аппаратуре. Программы вылетают только от недостатка памяти/своппинга. Так что "форточки" работают стабильно только в окне эмулятора :-)

Тонкость №4. А сколько ресурсов надо давать другим системам?
Здесь всё куда предсказуемее. Linux и FreeBSD памяти - чем больше, тем лучше. Особенно это касается LiveCD - быстрее работать будут и отзываться живее. Если хотите ставить на жёсткий диск - 3Гб максимум, 4Гб - если очень щедры. Больше не надо.

Тонкость №5. Запускаю BeOS/Haiku, Reactos, Syllable с ускоряющим kqemu, а оно виснет. Что делать?
Соответственно, не использовать kqemu :-) Делается это добавлением в строку параметров -no-kqemu
Запускается немного медленнее (особенно тормоза заметны на графической оболочке), но идёт. Лично запускал и Haiku, и ReactOS, и Syllable - идёт отлично, но без ускорения.

Тонкость №6. Хочу поставить операционную систему Windows в QEMU - какая пойдёт быстрее?
Запускал Windows с 95 по XP включительно. Опыт:
1. Windows 95 идёт быстрее всех (не удивительно - там тормозить просто нечему), но из-за низкого IQ грузит процессор на 100%. Отличилось тем, что выпадало в синий экран при простом запуске Photoshop 4.
2. Windows 98 тормозит не детским образом. Те же проблемы с IQ.
3. Windows ME я не ставил.
4. Windows 2000 идёт нормально, но в некоторых версиях эмулятора есть проблемы с его установкой. По причине IQ менее 40 процессор под завязку грузит только когда что-то делает, в простое - простаивает.
5. Windows XP - тоже самое, что и 2000, если выключить большинство его рюшечек.
Всё перечисленное выше NTёвое поделие работает с kqemu без проблем.
6. Windows Vista - пробовал по настоятельными просьбам трудящихся... Но оно не пошло. Сказало, что "ошибка 0хс0000225 Да у тебя, отец, ACPI нет? Как же ты живёшь? Иди ты к ... вендору за новым компом".

Тонкость №7. Хочу эмулировать дискетку/жёсткий диск - сколько их можно всего подсунуть?
Два флоппи-диска и четыре IDEшных харда. В man qemu это подробненько растолковано (а здесь ещё и на русском), причём прямо на первой странице. Но на всякий случай приведу цитату:
использование: qemu [опции] [образ_диска] 
disk_image
- это "сырой" образ жёсткого диска, соответствующий нулевому жёсткому IDE-диску.

Общие параметры:

`-fda файл'
`-fdb файл'

Здесь файл - образ дискеты для дисковода 0/1 соответственно. Вы можете использовать дискету системы-хозяина, указав `/dev/fd0' в качестве файла.

`-hda файл'
`-hdb файл'
`-hdc файл'
`-hdd файл'

Здесь файл - образ жёсткого диска 0, 1, 2 или 3 соответственно.

`-cdrom файл'

Здесь file - образ CD-ROM (вы не можете одновременно использовать `-hdc' и `-cdrom'). Вы можете использовать CD-ROM системы-хозяина, указав `/dev/cdrom' в качестве файла.

`-boot [a|c|d]'

Загрузка с дискеты (a), жёсткого диска (c) или CD-ROM (d). По умолчанию выполняется загрузка с жёсткого диска.


Тонкость №8. Указал в QEMU вместо сидюка ISO-образ, а надо его сменить на другой исошник. Как?
Подсвечиваем (выделяем мышкой) окно эмулятора и ударом в волшебный бубен CTRL+ALT+2 - попадаем в служебный терминал эмулятора. Дальше пишем: info block - получаем список всего, чего прикручено к эмулятору в качестве "устройств ввода-вывода". Вспоминаем, что мы в эмуляторе компьютера - пишем eject. Так наш исошник освобождается эмулятором. Далее, переходим в консольку xterm (ну, в нормальный линуксовый терминал) и как обычно монтируем исошник:
#mount -t iso9660 my.iso /mnt/loop -o loop
При этом (если ничего больше на петлю не прикручено) наш исошник закрепится за /dev/loop0 (не забываем, что у настоящих программистов отсчёт идёт с нуля, а не с единицы). Возвращаемся в служебный терминал эмулятора и пишем там: change cdrom /dev/loop0

Переключаемся в эмулятор ударом в бубен CTRL+ALT+1 - всё, теперь работаем дальше.
Добавление: как выяснилось, можно просто в терминале QEMU указывать имя и путь к ISO-образу и сразу его монтировать командой:
change cdrom /path/to/image.iso
и образ сразу становится доступным для работы.

Внимание!
Прежде, чем вы с радостным воплем побежите дальше, на вашем пути будут небольшие грабельки. Именно: если при уже примонтированном iso-шнике вы сделаете change cdrom, ваша петля прикипит - то есть ядро будет продолжать считать, что loop0 в работе и не даст его размонтировать даже после закрытия эмулятора. Очень неприятно, учитывая, что потом надо будет писать другое устройство - /dev/loop1 и далее. Их всего 8. Чтобы отодрать "прикипевшую" таким образом петлю, пишем от рута:
# losetup -d /dev/loop0
Петля с радостным звоном отлетает и на неё можно снова монтировать. Спасибо Шурику с форума

Тонкость №9. Послать сочетание клавиш в эмулируемую ОС.
Вариант: вы захотели в эмулируемом линуксе переключиться на консоль из графического режима, и по привычке нажимаете CTRL+ALT+F1 и... вываливаетесь в консоль основной системы. Чтобы этого не случалось, можно послать комбинацию клавиш, которую нажмёт за вас эмулятор. Для переключения виртуальных консолей в гостевой Linux-системе следует переключиться в монитор и использовать команды вида:

sendkey ctrl-alt-f2

Регистр важен: например, "sendkey ctrl-alt-delete" работает, а вот "sendkey CTRL-ALT-DELETE" не будет работать. Хотя в документации говорят, что должно работать оба варианта.

20 комментариев:

  1. Чо-то я не понял, зачем нужны пляски с бубном вокруг /dev/loop при монтировании исошников из qemu. Всю жизь делал просто
    change /path/to/image.iso
    из консоли qemu - проблем не замечено.

    ОтветитьУдалить
  2. При создании двух виртуальных машин с установленными Зло Server 2003, использовал ключик model=rtl8139.
    Для чипа 8029 нет в ней дров! Я в первый раз был в шоке.
    В Зло ХР SP2 есть.
    При запуске сетевухам назначается один и тот же MAC, что лечится ключиком macaddr=xx:xx:xx:xx:xx:xx.
    Но не лечится! При просмотре мака в самой винде они те которые ты задал.
    Но конфликт всё равно есть.
    Компы не пингуются между собой и с хозяйской ОС пингуется только один из них (тот который первым запущен).
    Вот так.

    ОтветитьУдалить
  3. Правильно было указать версию QEMU ,
    ну и версию используемой Debian .
    И вообще слово "Sarge" раедко у Вас встречается :)
    Удачи :)

    ОтветитьУдалить
  4. И еще, Зло тож бывает разного разлива :)
    win98 - попадались две легальные версии
    абсолютно разного поведения в установке.
    win2000 - минимум 3 различных версии встречал

    ОтветитьУдалить
  5. "Всю жизь делал просто change /path/to/image.iso"
    Хм... попробую. :-) Век живи, век учись, чёрт возьми!


    "Компы не пингуются между собой и с хозяйской ОС пингуется только один из них (тот который первым запущен)."
    Что-то подобное было, т.к. использую Зло ХП Сервиспук2. Думал, у меня руки кривые, оказывается - вроде нет :-)

    "Правильно было указать версию QEMU"
    В принципе, это должно действовать и на новых версиях QEMU. На всякий слуачй - 0.7.2
    У народа есть геморрой с новыми версиями. Разберусь с работой - буду пытаться запалить новую 0.8.2

    "И вообще слово "Sarge" раедко у Вас встречается"
    А что, это имеет решающее значение? Этч вышел!? ;-)

    ОтветитьУдалить
  6. "А что, это имеет решающее значение? Этч вышел!? ;-)"
    В яблочко!
    Вот так.

    ОтветитьУдалить
  7. http://tokkee.org/debian/
    Здесь есть qemu 8.0 & gcc 4.0
    bacpordeb http://debian.tokkee.org/debian/ sarge qemu
    deb-src http://debian.tokkee.org/debian/ sarge qemu

    bacpordeb http://debian.tokkee.org/debian/ sarge gcc
    deb-src http://debian.tokkee.org/debian/ sarge gcc

    aka elipse :)

    ОтветитьУдалить
  8. http://tokkee.org/debian/
    Здесь есть qemu 8.0 & gcc 4.0
    deb http://debian.tokkee.org/debian/ sarge qemu
    deb-src http://debian.tokkee.org/debian/ sarge qemu

    deb http://debian.tokkee.org/debian/ sarge gcc
    deb-src http://debian.tokkee.org/debian/ sarge gcc


    aka elipse :)

    ОтветитьУдалить
  9. Скоро выйдет Etch ,а вы работаете
    с QEMU 0.6 двухлетней давности.
    По вашим градациям тоже просто Debian - а так же и Woody ,...
    Просто можно все указать ,а другим не занимиатся дедуктивным анализом.
    Ведь речь о тонкостях поведения QUEMU , а не о впечатлениях.
    Мне показалось что вы серьезно подходите
    к таким вопросам , а если я ошибся - тогда прошу прощения
    elipse

    ОтветитьУдалить
  10. Так, вносим ясность, ув.тов. elipse. :-)

    "Скоро выйдет Etch ,а вы работаете
    с QEMU 0.6 двухлетней давности."
    Во-первых, не 0.6, а 0.7.2 - который у меня поставился, на таком и работаю. Мне на нём именно РАБОТАТЬ, а не ловить глюки и проблемы новых версий и компиляторов. Мне деньги платят не за это, грубо говоря. Через два года мне защищать кандидатскую - и тема там отнюдь не "Эмуляторы в Дебиан" :-)

    "По вашим градациям тоже просто Debian - а так же и Woody"
    Ну и что с того!? Переименовывать блог каждый раз, как выйдет новый релиз? Ну знаете...
    У меня на одной машине до сих пор стоит часть Woody - с которого я и начинал. И ничего, работает.

    Ещё раз: я работаю в Дебиан, потому что мне это удобно. Я пишу о том, что мне кажется интересным\полезным. За последними новинками могу не поспевать - при том, что приходится работать над двумя научными темами сразу. Не забывая о личной жизни :-)

    "Ведь речь о тонкостях поведения QUEMU , а не о впечатлениях."
    Найду время - поставлю новую версию. То, что я описал в этом посте, будет работать и на более старших версиях.

    "Мне показалось что вы серьезно подходите
    к таким вопросам"
    Вам виднее. Если вам помогает то, что здесь написано - я очень рад. Если нет - заведите свой блог. Поверьте, я буду там частым гостем :-)

    ОтветитьУдалить
  11. Тонкость №8. Хочу дать море памяти и/или запустить кучу ОС, а оно работает медленно. Отчего?
    Автор, Фабрис Беллард, разрешает использовать kqemu бесплатно, но с ограничениями и без исходников. Дело в том, что то, что он даёт бесплатно, стоит кучу мегабаксов - люди целыми компаниями бьются за эти технологии. Это его, Белларда, ноу-хау. Поэтому kqemu можно запустить только с четырьмя ОС и выделить 1.3ГБ памяти суммарно.

    kqemu уже давно GPL

    ОтветитьУдалить
  12. 2 GQ пишет...
    kqemu уже давно GPL
    Ваша правда, не успел исправить. Поправлено, текст ещё немножко причёсан. Спасибо!

    ОтветитьУдалить
  13. Для 100% загруженности под Win9x есть лекарство, ставится специальный драйвер в этой системе. Вроде как было описано в документации к qemu (не man, а html-файлы которые идут с qemu)

    ОтветитьУдалить
  14. Баян с монтированием диска, если бьешь его на партишены и логические диски, т.е. не форматируешь диск полностью на vfat, особенно это чувствительно, когда юзаешь виртуальные машины с линухом, там свап раздел выделять надо...

    ОтветитьУдалить
  15. "там свап раздел выделять надо..." - его надо выделять не на отдельный раздел внутри виртуального диска, а на отдельный "диск", причём положить этот "диск" в ramfs на хостсистеме, всёравно одноразовый.
    SirYorik.

    ОтветитьУдалить
  16. 2 Анонимный комментирует...
    "там свап раздел выделять надо..." - его надо выделять не на отдельный раздел внутри виртуального диска, а на отдельный "диск", причём положить этот "диск" в ramfs
    Ммм... остроумно :-) Надо будет попробовать. Спасибо за мысль.

    ОтветитьУдалить
  17. Спасибо, с вашего позволения скопирую к себе в загашник

    ОтветитьУдалить
  18. 2 virens комментирует...

    2 Анонимный комментирует...
    "там свап раздел выделять надо..." - его надо выделять не на отдельный раздел внутри виртуального диска, а на отдельный "диск", причём положить этот "диск" в ramfs
    Ммм... остроумно :-) Надо будет попробовать. Спасибо за мысль.


    Вы не поверите, но для Выня это тоже помагает, и решает описанную вами проблему Памяти этому богомерзкому редмонтовскому созданию много не давать - всё равно не умеет ей пользоваться, лезет в своппинг (что под эмулятором очень медленно). : pagefile.sys помещается на отдельный диск(Мой компутер->Свойства->Дополнительно->Параметры быстродействия->Дополнительно-Виртуальная память-Изменить), диск на хостсистеме в раму. Короче, при недостатке оперативы свопинг перекладывается на линукс(и слава богу), что для виртуализации вын-серверов важно.

    ОтветитьУдалить
  19. отчего-то change cdrom /path/to/image.iso не работает
    приходится вместо cdrom писать ide1-cd0 (название подглядел в info block)
    это как-то лечится или это нормально?

    ОтветитьУдалить
  20. Для перехода в консоль гостевой Linux-системы есть и такой путь:
    - жмём мышкой в окно qemu (чтобы произошёл захват мыши);
    - между консолями можно переключаться с помощью Alt+F1-F...

    ОтветитьУдалить