Создаем образ жесткого диска, на который далее будем ставить Windows
mkdir /home/user/qemu
qemu-img create /home/user/qemu/windows.img 4096M
Устанавливаем Windows (если машина без Х-ов графики не будет)
$ qemu -localtime -m 512 -boot d -cdrom /home/user/windows_install.iso -hda /home/user/qemu/windows.img -name “Windows”
-localtime устанавливает время в Windows равным времени FreeBSD
-m задает размер памяти в мегабайтах, которая будет выделена для Windows
-boot говорит QEMU откуда нужно загружаться (d - компакт-диск, c - жесткий диск)
-cdrom указывает путь к компакт-диску
-hda указывет путь к жесткому диску
-name выводит в заголовке окна QEMU название запущенной в нем операционной системы (необязательная опция, чисто для красоты)
Запускаем Windows
$ qemu -localtime -m 512 -boot c /home/user/qemu/windows.img -name “Windows”
загрузка Windows выполняется с образа жесткого диска (опция -boot c).
Запускаем Windows в консоли с выводом в VNC
qemu -M pc -m 1024 -localtime -hda /home/user/qemu/windows.img -boot d
-net nic,vlan=0,macaddr=00:ce:53:e9:71:cf -net user,vlan=0 -name "test" -vnc :1
Заходить gvncviewer host:1 (на самом деле порт 5900+1)
Запускаем Windows с поддержкой сети
$ qemu -localtime -m 512 -boot c /home/user/windows.img -name “Windows” -net nic -net tap,ifname=tap0
к параметрам обычного запуска добавились два параметра -net.
Первый -net со значением nic создает “внутри” QEMU сетевую карту, которую дальше увидит и будет использовать Windows.
Второй -net со значением tap подключает эту сетевую карту к виртуальному интерфейсу tap0. Указываемая через запятую опция ifname=tap0 говорит о том, что подключиться нужно именно к интерфейсу tap0. В принципе, это не обязательная опция, но иногда, по каким-то своим соображениям, QEMU пытается подключится не с дефолтному tap0, а, скажем, к tap1 или к tap4. В этом случае можно явно указать нужный интерфейс, добавив эту опцию.
Загрузившись, Windows обнаружит сетевую карту и будет ходить в сеть через нее.
Использование: qemu [options] [disk_image]
$ qemu -localtime -m 512 -boot c /home/user/qemu/windows.img -name “Windows”
disk_image - это образ жёсткого диска для жёсткого диска 0 с интерфейсом IDE
Самые нужные:
-boot [a|c|d|n]
Загружаться с floppy (a), жёсткого диска (c), CD-ROM (d) или Etherboot (n). По умолчанию загрузка выполняется с жёсткого диска.
-snapshot
Выполнять запись во временные файлы вместо фалов образа диска. В этом случае на используемый образ диска запись не выполняется. Запись можно выполнить принудительно нажатием C-a s.
-m megs
Задаёт объём виртуальной памяти равным megs мегабайтов. По умолчанию 128 MiB.
-localtime
Установить часы реального времени (real time clock) по локальному времени (по умолчанию устанавливается в UTC). Опция необходима для того, чтобы время шло правильно в системах MS-DOS и Windows.
-name name
Задать имя гостевой системы. Имя будет отображаться в заголовке окна SDL. Имя также используется для VNC-сервера.
Опции сети
-net nic[,vlan=n][,macaddr=addr][,model=type]
Создать новую сетевую карту и подсоединить её к VLAN n (n = 0 по умолчанию). По умолчанию на PC в качестве сетевой карты используется ne2k_pci. MAC-адрес сетевой карты можно поменять при помощи macaddr. Если опция -net не задана, создаётся одна карта. Qemu может эмулировать несколько различных моделей сетевых карт. Допустимые значения для type: "i82551", "i82557b", "i82559er", "ne2k_pci", "ne2k_isa", "pcnet", "rtl8139", "smc91c111", "lance" и "mcf_fec". Не все устройства поддерживаются на всех платформах. Просмотреть список поддерживаемых устройств можно при помощи -net nic,model=?.
-net user[,vlan=n][,hostname=name]
Использовать пользовательский (user mode) сетевой стек, которому для работы не требуются привилегии администратора. Можно использовать опцию hostname=name, которая укажет встроенному DHCP-серверу, какое имя отправить клиенту.
-net tap[,vlan=n][,fd=h][,ifname=name][,script=file]
Подключить TAP-интерфейс хост-системы к заданному VLAN n и настроить его с помощью сетевого скрипта. По умолчанию используется сетевой скрипт /etc/qemu-ifup. Чтобы отключить исполнение скрипта, нужно указать script=no. Если имя не задано, оно автоматически задаётся при помощи операционной системы. Для того чтобы подключиться к уже открытому интерфейсу, используется fd=h, который указывает его дескриптор (handle).
Пример:
qemu linux.img -net nic -net tap
Более сложный пример (две сетевые карты, каждая подключена к TAP-устройству)
qemu linux.img -net nic,vlan=0 -net tap,vlan=0,ifname=tap0 \
-net nic,vlan=1 -net tap,vlan=1,ifname=tap1
-net socket[,vlan=n][,fd=h][,listen=[host]:port][,connect=host:port]
Соединяет VLAN n с VLAN другой виртуальной машины QEMU. Если задана опция listen, QEMU будет ждать входящего соединения на порту port (поле host опционально). Опция connect указывает, что нужно подсоединиться к другому QEMU, который использует опцию listen. Опция fd=h задаёт уже открытый TCP-сокет.
Пример:
# launch a first QEMU instance
qemu linux.img -net nic,macaddr=52:54:00:12:34:56 \
-net socket,listen=:1234
# connect the VLAN 0 of this instance to the VLAN 0
# of the first instance
qemu linux.img -net nic,macaddr=52:54:00:12:34:57 \
-net socket,connect=127.0.0.1:1234
-net socket[,vlan=n][,fd=h][,mcast=maddr:port]
Создаёт VLAN n, разделяемый с другими QEMU через сокет многоадресной рассылки. Получается общая шина для всех QEMU, которые используют один и тот же адрес и maddr и порт port.
Общие опции
-M machine Выбрать эмулируемую машину ("-M ?" покажет список)
-hda file -hdb file -hdc file -hdd file
Использовать file как образ жёсткого диска 0, 1, 2 или 3.
-cdrom file
Использовать файл как образ CD-ROM (нельзя использовать -hdc и -cdrom одновременно). Для того чтобы использовать CD-ROM хост-системы, нужно указать в качестве имени файл /dev/cdrom.
-drive option[,option[,option[,...]]]
Описать новый диск. Допустимые опции:
"file=file" Опция определяет, какой образ использовать для какого диска.
"if=interface" Опция указывает через интерфейс какого типа подключён диск. Доступные типы: ide, scsi, sd, mtd, floppy, pflash.
"bus=bus,unit=unit"
Опция указывает куда именно подключён диск, к какой шине (bus) и под каким номером (unit).
"index=index"
Опция указывает куда подключен диск при помощи номера в списке доступных коннекторов интерфейса заданного типа.
"media=media"
Опция определяет тип носителя: disk или cdrom.
"cyls=c,heads=h,secs=s[,trans=t]"
У этих опций такой же смысл, как при использовании с -hdachs.
"snapshot=snapshot"
snapshot включен ("on") или выключен ("off"), позволяет включить создание снапшотов для заданных дисков (см. -snapshot).
"cache=cache"
кэш включен или выключен ("on" или "off"), что указывает нужно ли использовать кэш хост-системы при доступе к данным.
"format=format"
Указать явным образ формат дисков и не использовать автоопределение. Может использоваться для того чтобы указать format=raw, чтобы не интерпретировать заголовок формата, когда в нём нет уверенности.
Вместо -cdrom можно использовать:
qemu -drive file=file,index=2,media=cdrom
Вместо -hda, -hdb, -hdc, -hdd можно использовать:
qemu -drive file=file,index=0,media=disk
qemu -drive file=file,index=1,media=disk
qemu -drive file=file,index=2,media=disk
qemu -drive file=file,index=3,media=disk
CDROM можно подключать как slave на ide0:
qemu -drive file=file,if=ide,index=1,media=cdrom
Если аргумент "file=" не указывается, привод считается пустым:
qemu -drive if=ide,index=1,media=cdrom
Можно подсоединить SCSI-диск с ID 6 на шине #0:
qemu -drive file=file,if=scsi,bus=0,unit=6
Вместо -fda, -fdb можно использовать:
qemu -drive file=file,index=0,if=floppy
qemu -drive file=file,index=1,if=floppy
По умолчанию используется интерфейс IDE, а индекс автоматически увеличивается:
qemu -drive file=a -drive file=b"
интерпретируется как:
qemu -hda a -hdb b
-smp n
Симулирует многопроцессорную систему с n процессорами. Для PC поддерживается до 255 процессоров; для Sparc32 Linux ограничивает количество процессоров, которые можно использовать, четырьмя.
-audio-help
Показывает справку по аудио-подсистеме: список драйверов и настраиваемых параметров.
-soundhw card1[,card2,...] or -soundhw all
Включить поддержку выбранного звукового устройства. Для того чтобы посмотреть список всех доступных устройств, используйте ?
qemu -soundhw sb16,adlib hda
qemu -soundhw es1370 hda
qemu -soundhw all hda
qemu -soundhw ?
-startdate date
Установить начальное значение для часов реального времени (real time clock). Допустимые форматы даты: "now" или "2006-06-17T16:01:21", или "2006-06-17". Значение по умолчанию: "now".
-pidfile file
Сохранить PID процесса QEMU в файле file. Полезно при запуске QEMU из скрипта.
-daemonize
Демонизировать процесс QEMU после инициализации. QEMU не будет отключаться от стандартных потоков, до тех пор пока не будет готов к соединениям через другие устройства. Опция полезна в случаях, когда QEMU запускается другими процессами, которые не хотят заниматься устранением гонок в ходе инициализации.
-win2k-hack
Используется при инсталляции Windows 2000, для того чтобы обойти баг с переполнением диска (disk full bug). После того как инсталляция завершена, эту опцию можно не использовать (при её использовании передача данных по IDE замедляется).
-option-rom file
Загружает содержимое файла как опциональный ROM. Опция может быть полезной для загрузки таких вещей как EtherBoot.
Опции визуализации
-nographic
В нормальном режиме QEMU использует SDL для VGA-вывода. Используя эту опцию, можно вообще отключить графический вывод как таковой, так чтобы QEMU стало обычным консольным приложением. Эмулируемый последовательный порт перенаправляется на консоль. Следовательно, QEMU в этом режиме можно использовать для отладки ядра Linux через последовательную консоль.
-curses
В нормально режим QEMU использует SDL для визуализации. С этой опцией QEMU будет выводить VGA-вывод в текстовом режиме, используя интерфейс curses/ncurses. В графическом режиме ничего не выводится.
-no-frame
Не делать декоративное оформление вокруг SDL-окон. Использовать доступное пространство по максимуму. Это делает использование QEMU в выделенном окружении более удобным.
-full-screen
Запустить в полноэкранном режиме.
Опции VNC
-vnc display[,option[,option[,...]]]
По умолчанию, QEMU использует SDL для VGA-вывода. Используя эту опцию, можно заставить QEMU работать как VNC-сервер для экрана display и перенаправлять на этот сервер VGA-экран. Особенно полезно в этом режиме включить USB-планшет (опция -usbdevice tablet). При использовании VNC-дисплея нужно использовать ключ -k, для того чтобы указать какая раскладка клавиатуры используется (при условии, что это не en-us). Допустимый синтаксис параметра display такой:
"interface d"
Будут разрешены только TCP-соединения через интерфейс interface к экрану d. По соглашению используется TCP-порт с номером 5900+d. Интерфейс можно не указывать, тогда сервер привязывается ко всем интерфейсам.
"unix path"
Разрешаются соединения через доменные гнёзда UNIX, где path указывает местоположение соответствующего файла, через который прослушиваются соединения.
"none"
VNC инициализируется, но не запускается. VNC-сервер можно будет запустить позже при помощи команды монитора change.
После значения display могут указываться опциональные флаги, разделённые запятыми. Допустимые опции такие:
"password"
Требует обязательной парольной аутентификации для клиентских соединений.
Пароль устанавливается отдельно с помощью команды change в pcsys_monitor.
"tls"
Требует чтобы клиент при взаимодействии с VNC-сервером использовал TLS. В этом случае используются анонимные TLS-credentials, поэтому сеанс уязвим для man-in-the-middle-атак. Рекомендуется сочетать эту опцию с опциями x509 или x509verify.
"x509=/path/to/certificate/dir"
Может использоваться только в сочетании с опцией tls. Обозначает, что при установке TLS-сеанса необходимо использовать x509-credentials. Сервер отправит свой x509-сертификат клиенту. Рекомендуется чтобы на VNC-сервере был установлен пароль, который будет вводиться клиентом при подключении. Путь, который идёт за опцией, указывает откуда должны загружаться x509-сертификаты. Подробнее о том, как генерируются сертификаты описано в разделе "vnc_security".
"x509verify=/path/to/certificate/dir"
Может использоваться только в сочетании с опцией tls. Обозначает, что при установке TLS-сеанса необходимо использовать x509-credentials. Сервер отправит свой x509-сертификат клиенту и попросит чтобы клиент прислал свой сертификат. Сервер проверит подлинность сертификата по сертификату CA, и если проверка не пройдёт, откажет клиенту. Если к CA есть доверие, то этого механизма аутентификации достаточно. В качестве дополнительного уровня аутентификации можно использовать пароль. Путь, идущий за опцией, указывает откуда должны загружаться сертфикаты. Подробнее о том, как генерируются сертификаты описано в разделе "vnc_security".
-k language
Использовать раскладку клавиатуры language (например, "fr" для французской). Эта опция нужна только в тех случаях, когда не удаётся получить сырые коды клавиш (raw keycodes), например, на маке с некоторыми X-серверами или на VNC. Обычно в Linux и Windows этот ключ не используется.
Доступные раскладки:
ar de-ch es fo fr-ca hu ja mk no pt-br sv
da en-gb et fr fr-ch is lt nl pl ru th
de en-us fi fr-be hr it lv nl-be pt sl tr
По умолчанию "en-us".
Опции USB
-usb
Включить USB (скоро будет включено по умолчанию)
-usbdevice devname
Добавить USB-устройство devname.
mouse
Виртуальная мышь. Перекрывает эмуляции мыши PS/2.
tablet
Устройство позиционирования, имеющее абсолютные координаты (как тачскрин). Это означает, что qemu сможет показывать правильные координаты мыши без её захвата. Перекрывает эмуляцию мыши PS/2.
disk:file
Устройства хранения (Mass storage device), основанные на файле file
host:bus.addr
Пробросить внутрь устройство, имеющее в хост-системе идентификатор bus.addr (только для Linux).
host:vendor_id:product_id
Пробросить внутрь устройство, имеющее в хост-системе идентификатор vendor_id:product_id (только для Linux).
serial:[vendorid=vendor_id][,productid=product_id]:dev
serial-конвертер в символьное устройство хост-системы. О том какие устройства можно конвертировать см. в -serial.
braille
Устройство Брайля. Использует BrlAPI для вывода на настоящее или подложное устройство Брайля.
ЗАМЕЧАНИЯ:
1. Можно запустить несколько QEMU на разных хостах, и сделать чтобы все они использовали общую шину (только для этого нужно выполнить настройку многоадресной рассылки, multicast, для этих хостов).
2. Поддержка mcast совместима с User Mode Linux (аргумент ethN=mcast), подробнее:
http://user-mode-linux.sf.net3. Для того чтобы указать уже открытый multicast-сокет UDP используется fd=h
Пример:
# launch one QEMU instance
qemu linux.img -net nic,macaddr=52:54:00:12:34:56 \
-net socket,mcast=230.0.0.1:1234
# launch another QEMU instance on same "bus"
qemu linux.img -net nic,macaddr=52:54:00:12:34:57 \
-net socket,mcast=230.0.0.1:1234
# launch yet another QEMU instance on same "bus"
qemu linux.img -net nic,macaddr=52:54:00:12:34:58 \
-net socket,mcast=230.0.0.1:1234
Пример (совместим с User Mode Linux):
# launch QEMU instance (note mcast address selected
# is UML's default)
qemu linux.img -net nic,macaddr=52:54:00:12:34:56 \
-net socket,mcast=239.192.168.1:1102
# launch UML
/path/to/linux ubd0=/path/to/root_fs eth0=mcast
-net none
Указывает, что сетевые устройства конфигурироваться не должны. Используется чтобы перекрыть настройки по умолчанию (-net nic -net user), активирующиеся, если опцию -net не указывать вообще.
-tftp dir
При использовании пользовательского сетевого стека (user mode network stack), активировать встроенный TFTP-сервер. Файлы в каталоге dir/ будут представлены в корне сервера. TFTP-клиент в гостевой системе должен быть настроен на бинарный режим (используется команда "bin" TFTP-клиента Unix). IP-адрес гостевой системы, как и обычно, 10.0.2.2.
-bootp file
При использовании пользовательского сетевого стека (user mode network stack), передавать файл как имя файла для BOOTP. В сочетании с -tftp, опция может использоваться для сетевой загрузки гостевой системы из локального каталога.
Пример (с использованием pxelinux):
qemu -hda linux.img -boot n -tftp /path/to/tftp/files -bootp /pxelinux.0
-smb dir
При использовании пользовательского сетевого стека (user mode network stack), активировать встроенный SMB-сервер, так чтобы Windows внутри гостевой системы могла прозрачно обращаться к файлам хост-системы.
В гостевой Windows-системе строку
10.0.2.4 smbserver
нужно добавить в файл C:\WINDOWS\LMHOSTS (для Windows 9x/Me) или C:\WINNT\SYSTEM32\DRIVERS\ETC\LMHOSTS (Windows NT/2000).
Каталог доступен как \\smbserver\qemu.
Обратите внимание, что SAMBA-сервер должен быть установлен в хост-системе в /usr/sbin/smbd. QEMU тестировался с smbd версии 2.2.7a из Red Hat 9 и с smbd версии 3.0.10-1.fc3 из Fedora Core 3.
-redir [tcp|udp]:host-port:[guest-host]:guest-port
При использовании пользовательского сетевого стека (user mode network stack), перенаправлять входящие на хост и порт host-port обращения TCP и UDP на гостевые хост guest-host и порт guest-port. Если guest-host не задан, его значение принимается равным 10.0.2.15 (адресу, который по умолчанию выдаётся встроенным DHCP-сервером).
Например, для того чтобы перенаправить соединение X11 с экрана 1 на гостевой экран 0, нужно использовать такие опции:
# on the host
qemu -redir tcp:6001::6000 [...]
# this host xterm should open in the guest X11 server
xterm -display :1
Для того чтобы перенаправить telnet-соединения с порта 5555 хоста на telnet-порт на гостевой системе, используйте опции:
# on the host
qemu -redir tcp:5555::23 [...]
telnet localhost 5555
Теперь, когда на хост-системе вы даёте "telnet localhost 5555", вы попадаете на telnet-сервер гостевой системы.
Для Linux: При указании этой опции можно использовать заданное ядро Linux без его инсталляции на диск. Это удобно для тестирования разных ядер Linux.
-kernel bzImage
Использовать bzImage в качестве ядра.
-append cmdline
Использовать cmdline как командную строку ядра
-initrd file
Использовать file как initrd (начальный виртуальный диск).
Если работаем со снапшотом
-snapshot
сохранить изменения в образ с помощью Ctrl-a s
ИЛИ в консоли QEMU (нужно нажать Ctrl+Alt+2) ввести commit то изменения будут записаны в снапшот
В ходе графической эмуляции можно использовать такие комбинации клавиш:
Ctrl-Alt-f
Переключиться в полноэкранный режим
Ctrl-Alt-n
Переключиться на виртуальную консоль n. Стандартная привязка консолей такая:
1 Дисплей эмулируемой системы
2 Монитор QEMU
3 Последовательный порт
Ctrl-Alt
Включить/выключить захват мыши и клавиатуры.
В виртуальных консолях, для того чтобы просмотреть более ранние записи, нужно использовать Ctrl-Up, Ctrl-Down, Ctrl-PageUp и Ctrl-PageDown.
В ходе эмуляции, если используется опция -nographic, список терминальных команд можно получить при помощи Ctrl-a h:
Ctrl-a h
Показать эту справку
Ctrl-a x
Завершить эмулятор
Ctrl-a s
Сохранить данные диска в файл (если -snapshot)
Ctrl-a t
включить/выключить временные пометки при записи в консоли (console timestamps)
Ctrl-a b
Отправить break (magic sysrq в Linux)
Ctrl-a c
Переключиться между монитором и консолью
Ctrl-a Ctrl-a
Отправить Ctrl-a