Оглавление

Эмуляция в QEMU

QEMU очень помогает, если вы разрабатываете софт и хотите проверить, как он будет себя вести на другой системе. С другими библиотеками, архитектурой процессора, в условиях дефицита памяти…

Далее все размеры дисков, названия файлов, имена дистрибутивов можно подставлять свои.

Этот текст написан довольно давно, Qemu с тех пор поменялось, какие-то советы могут требовать корректив. Пишите, если есть неточности.

Использовать ли KVM

У QEMU есть два варианта: с KVM, и без KVM.

Первым делом проверьте, поддерживает ли ваш процессор KVM:

grep -E "(vmx|svm)" --color=always /proc/cpuinfo

Если не поддерживает, — выбирайте QEMU без KVM и переходите к следующему пункту.

Если процессор поддерживает KVM, то проверьте, поддерживается ли KVM в вашем ядре:

zgrep KVM /proc/config.gz

Если KVM у вас везде поддерживается, то у вас есть выбор. Довод за KVM — большая производительность этой технологии. Довод против — вы не сможете эмулировать весь сектор архитектур, которые поддерживает QEMU.

Я всегда выбираю вариант без KVM, так как скорость мне не важна, а гибкость важна.

Установка гостевой ОС

Создаём образ диска

qemu-img create Arch 4G

Загружаемся с образа CD-ROM и устанавливаем ОС:

LANG=C qemu-system-x86_64 -cdrom archlinux-2012.12.01-dual.iso \
   -m 768 -boot order=d -vga std \
   -net user -net nic,model=rtl8139 Arch

Рекомендую выполнить только самые минимальные настройки: (1) Завести пользователя (кстати, установить пустой пароль — passwd -d user). (2) Настроить сеть eth0/DHCP. (3) Установить/настроить/запустить sshd (PermitEmptyPasswords yes и UsePAM no). (4) Полезно ещё установить sudo (a ALL = (ALL) NOPASSWD: ALL). Теперь с виртуальной машиной можно работать по ssh, что на много удобней, чем в окне QEMU.

Кстати, не забудьте, что у вас есть возможность сохранить образ «чистой» системы, чтобы иметь потом возможность к нему вернуться.

Доступ к виртуальной машине QEMU

Запускаемся так:

LANG=C qemu-system-x86_64 -m 768 -vga std \
 -net user -net nic,model=rtl8139 -redir tcp:2122::22 Arch

Теперь внешний порт 2122 транслируется в 22 порт гостевой системы. И мы можем сделать так:

ssh -p 2122 user@localhost

Если всё настроено, как у меня, без паролей, то вы сразу получите доступ к гостевой системе.