Как написать виртуальную машину

Как написать виртуальную машину

Автор: turtle

В данной статье мы рассмотрим, как можно написать виртуальную машину (довольно простую), которую необходимо было реализовать на международной олимпиаде по функциональному программированию 2009 года. Сам отчёт можно посмотреть здесь. Выступали мы на Common Lisp и в статье будет рассказано, как это сделать именно на Common Lisp. Конечно, реализация виртуальной машины лишь верхушка айсберга всего задания, но реализация виртуальной машины сама по себе есть довольно практическая задача, что и будет продемонстрировано.

Спецификация ВМ

Оригинал спецификации приведён в задании, приложенному к данной статье.

Виртуальная машина состоит из области программы с 32-битными инструкциями, области данных с 64-битными дробными числами двойной точности одного однобитного статусного регистра и портов ввода/вывода, состоящих из 64-битных дробных чисел двойной точности. Доступ к область памяти и данных осуществляется с использованием 14-битного регистра указателя памяти. Порты ввода/вывода отделены друг от друга и также индексированы 14-битным значением.

Виртуальная машина начинает свою работу начиная с 0-ой инструкции и далее до окончания области памяти. Во время выполнения она читает с портов и также пишет на порты. После завершения своего шага контроллер может опять запустить виртуальную машину, которая произведёт ещё один шаг с новыми значениями на портах ввода и изменит значения портов вывода.

Инструкции подразделены на две группы: D-типа, которым необходимо два операнда, и S-типа, которым необходим лишь один операнд. Как правило, при выполнении инструкции по адресу idest значение сохраняется в памяти по адресу rdest соответственно idest. По факту индекс адреса назначения rdest равен индексу указателя инструкций idest.

Таблица операторов для cmpz:

МнемоникаКодОперация
LTZ0x0=
EQZ0x2=
GEZ0x3>
GTZ0x4>=

Чтение программы для ВМ

Интерпретируемая ВМ

Для начала определимся с тем, что мы собираемся изменять внутреннее состояние нашей виртуальной машины. Для хранения внутреннего состояния и возможности его передачи определим структуру виртуальной машины. Определим указатель памяти (ip) в начальное значение 0. Также определим значения по умолчанию статусный регистр (reg-status) в значение ложь (nil), а также массивы портов ввода/вывода, заполненными в значения 0. Область программ (program-memory) и область данных (data-memory) будет инициализирована результатами чтения из файла OBF.

Итак, машина есть. Определим главный цикл (vm-run). Определим условие завершения цикла по значению nil с функции шага интерпретации (vm-step-interpret). Перед началом цикла обнулим указатель инструкций (ip) у виртуальной машины.

На каждом шаге будем считывать инструкцию по указателю памяти и, в зависимости от её значения вызывать определённые функции. На шаге будем возвращать nil если значение указателя вышло за пределы памяти. Для сопоставления инструкций и их параметров будем использовать библиотеку cl-match. Далее при совпадении условий будем вызывать определённые действия согласно спецификации. Для обобщения арифметических операций создадим функцию vm-arith-op, которая будет принимать в качестве аргумента функцию (арифметическую).

Компилируемая

Идея заключается в том, что все операции по манипуляции с состоянием виртуальной машины производить определённой функцией, не интерпретируя на каждом шаге инструкцию и не производя сопоставления. То есть нам необходимо будет преобразовать область программ в эквивалентную функцию на языке лисп. Сделаем так, что функция будет принимать в себя структуру виртуальной машины, состояние которой она будет изменять. Таким образом пуск виртуальной машины будет заключаться в вызове созданной функции:

Функция будет стандартна языку лисп и представлять собой список s-выражений, которые будут оперировать виртуальной машиной. После того, как список выражений будет сгенерирован на основании кода виртуальной машины, то функцию необходимо будет скомпилировать.

Пилотируемый запуск

Таким образом, чтобы запустить первое задание, нужно выполнить следующее:

Выводы

Файл задачиНомер сценарияstart-vmc (сек)start-vmi (сек)
../task/bin1.obf100118.4131.48
../task/bin1.obf100218.2731.75
../task/bin1.obf100319.2831.62
../task/bin1.obf100418.5531.70
../task/bin2.obf200130.4948.06
../task/bin2.obf200230.9048.42
../task/bin2.obf200334.0048.13
../task/bin2.obf200432.3848.16
../task/bin3.obf300131.0749.10
../task/bin3.obf300232.4549.50
../task/bin3.obf300338.7249.57
../task/bin3.obf300442.2849.34
../task/bin4.obf4001294.37280.14
../task/bin4.obf4002324.38280.49
../task/bin4.obf4003404.75279.84
../task/bin4.obf4004456.48280.50

Исходный код

К данной статье приложен исходный код, оформленный в виде пакета asdf. Типичный запуск из корня проекта под sbcl будет:

Источник

Как я делал из физического сервера виртуальный

Был у бухгалтеров bit2000 и всё их устраивало, ну, почти всё. Не устроило то, что нужно было бы привязать ещё склады в программу, но сделать такое не вышло. И переехали мы на 1с, и закуплен был сервер и было это хорошо, а старый сервер оказался не сильно нужен, но железо нужно.

И задумался я, а как бы мне физическую машину сделать виртуальной. Начал рыть интернет и даже на хабре в поиске — p2v, ничего стоящего нет, что могло бы помочь.

Как сделать слепок системы так, чтобы он запустился без проблем?

Интернет подсказывал несколько решений, вот только у меня исходная система windows server 2003, и даже с кряком не всё работает, нужен кряк под сервер. Скажу сразу, Акронис не подойдёт, Парагон диск менеджер серверный может сделать слепок системы, но выгружает его не на локальные диски, а только на физические диски. Имейте это ввиду, когда решите их использовать.

Интернет подсказал. В блоге Андрея Бешкова была ссылка на бесплатную утилиту disk2vhd. Маленькая, да удаленькая, позволяет сделать снимок работающей системы и выгрузить его на локальный диск.

Описание, как первоначальный раздел на 300 гигабайт был поделён на 3 раздела, можно пропустить.

Как написать виртуальную машину

Утилита очень простая, выбираете диски на которых стоит нужная вам система, и выбираете путь — его придётся прописать вручную. Я не пробовал, но, вероятно, программа может и на сетевые диски и папки перекидывать снапшот системы. Отметил также галочку «Prepare for use in Virtual PC», хоть и вместо Virtual PC, у меня Hyper-V. Help не работает.

После создания виртуального диска, создаём виртуальную машину.

Как написать виртуальную машину

Выбираем 1 поколение.

Как написать виртуальную машину

Устанавливаем нужный объём оперативной памяти — она будет выделятся из физической, в моём случае виртуальная машина крутится на 1 гигабайте оперативки, если выставить больше она просто не запускается — не хватает памяти, не только она одна работает на сервере.
Учитывайте этот момент.

Как написать виртуальную машину

Сетевой адаптер пока не выбираем.

Как написать виртуальную машину

Указываем виртуальной машине использовать нами созданный виртуальный диск.

Как написать виртуальную машину

В такой конфигурации работает моя виртуальная машина.

Переходим к настройке виртуальной машины.

Как написать виртуальную машину

Удаляем имеющийся сетевой адаптер — он не будет работать на сервере, сервер который был завиртуален просто не увидит его.

Как написать виртуальную машину

Выставляем количество ядер процессора которые выделяем под данную виртуальную машину.

Как написать виртуальную машину

Можно установить желаемый объём оперативной памяти.

Как написать виртуальную машину

Загружаемся с диска, установка новой системы не требуется.

Как написать виртуальную машину

Устанавливаем новое оборудование — «Устаревший сетевой адаптер», его наш windows server 2003 увидит.

Как написать виртуальную машину

Выбираем нужный виртуальный адаптер. В моём случае, так как ещё одной виртуальной машиной выступает прокси сервер и под интернет выделена отдельная сетевая карта и своя сеть недоступная из обычной локальной сети, я выбрал виртуальный адаптер созданный для второй сетевой карты использующей нашу локальную сеть.

Всё готово, можно запускать.

Как написать виртуальную машину

После запуска скорее всего вас будет ждать несколько сюрпризов — мышка может не работать. Настраивать сетевую карту придётся с помощью клавиатуры. После настройки сетевой карты — удалось подключиться с помощью Radmin, напрямую к нашей новой виртуальной машине.

Кстати, при попытке увеличить разрешение экрана с 800х600 система выдала синий экран смерти, скорее всего, это связано с небольшим количеством оперативной памяти, которой я выделил под виртуальную машину.

Источник

Что такое виртуальная машина и как её создать

В этой статье мы расскажем, что называется виртуальной машиной и для чего предназначена эта программа, а также покажем, как устанавливать VirtualBox.

Виртуальные машины с каждым годом все больше набирают популярность. Такой рост объясняется двумя основными причинами:

Что такое виртуальная машина

Иногда требуется установить программу, созданную для ОС, которой нет на устройстве. Для этого можно воспользоваться технологией виртуализации. Виртуализация ― это возможность запуска нескольких операционных систем на одном физическом устройстве. То есть виртуальная машина позволяет создать на одном компьютере ещё один компьютер. Технология использует ресурсы устройства (память, процессор, устройство ввода и вывода), но при этом работает как отдельный компьютер.

Операционная система, на базе которой создаётся новая среда, называется хост-системой (host), а дополнительная операционная система — гостевой.

Виртуализация создается при помощи двух элементов: виртуальной машины и гипервизора.

Виртуальная машина (ВМ или VM) — программа, с помощью которой можно создать гостевую операционную систему на компьютере.

Гипервизор — программа, которая управляет физическими ресурсами вычислительной машины и распределяет эти ресурсы между несколькими различными операционными системами, позволяя запускать их одновременно. Благодаря гипервизору операционные системы не мешают друг другу.

Есть три вида гипервизоров:

Аппаратный. Такие гипервизоры используют Hyper-V, KVM, ESXi. Xen. Аппаратный гипервизор устанавливается прямо на «железо» и выполняет функции эмуляции физического аппаратного обеспечения. То есть такой гипервизор является минимальной операционной системой.

Хостовый гипервизор запускается на обычной ОС, как и другие приложения в системе. В этом случае гостевая ОС выполняется как процесс на хосте, а гипервизор разделяет гостевую ОС и ОС хоста. Примеры гипервизоров этого типа: VMware, VirtualBox и Parallels Desktop для macOS.

Гибридный. Смесь аппаратного и хостового гипервизора. Аппаратными средствами управляет первый тип гипервизора. Хостовый работает с остальными аппаратными компонентами. Такой вид управления имеет Hybrid, Type-1+.

Зачем нужна виртуальная машина и виртуализация

Для чего используют виртуализацию:

Преимущества и недостатки использования виртуальной машины

Сохранение текущего состояния машины. Если нужно выключить ПК или перейти к другой задаче, то машина сохранит все настройки. При следующей загрузке ВМ откроется в том состоянии, в котором находилась в момент выключения.

Создание снапшота при тестировании нестабильной программы. Если при тестировании софта произошла критическая ошибка, можно откатить ВМ до предыдущего состояния. По сравнению с основной системой, для виртуальной машины выделяется меньше места на дисковом пространстве, благодаря этому откат системы происходит быстрее.

Машину можно сохранять или дублировать как изолированную среду. Её можно будет запустить позднее или скопировать на другой ПК со всеми заданными конфигурациями.

Для переподключения на другую ОС не нужно перезагружать компьютер.

Для одновременного запуска на ВМ нескольких операционных систем, нужно иметь соответствующие аппаратные ресурсы.

ОС в виртуальных машинах работают медленнее. Несмотря на постоянное развитие ВМ, работа виртуальных ОС ниже традиционных.

Виртуальная платформа поддерживает не весь функционал устройства. Например, VMware поддерживает USB 3.0, контроллеры портов COM и LPT и приводы CD-ROM, но виртуализация видеоадаптеров и поддержка функций ускорения трехмерной графики пока малодоступны.

Популярные виртуальные машины

Самыми популярным виртуальным машинам являются:

VMware

VMware — одна из самых популярных виртуальных машин для крупных задач. VMware имеет 2 вида: Player (бесплатная версия) и Workstation (платная версия). Для macOS есть специальная версия VMware Fusion и VMware Fusion Pro.

VirtualBox

VirtualBox — простой и бесплатный инструмент для виртуализации от компании ORACLE. Можно установить самые популярные операционные системы (Windows, Linux-подобные ОС, FreeBSD, macOS). Также VirtualBox может работать с VM, которые были созданы в платной версии VMware Workstation.

Microsoft Hyper-V

Microsoft Hyper-V — VM для Windows 10. Не работает на других ОС.

Parallels Desktop

Несмотря на развитость всех программ для виртуализации, самым часто используемым инструментом является VirtualBox. Он нашел свое применение частными лицами и организациями. Далее мы рассмотрим, как создать VM и установить операционную систему в программе VirtualBox.

Как создать виртуальную машину VirtualBox

Скачайте и установите VirtualBox на компьютер.

Откройте панель управления Oracle и нажмите Создать:

Как написать виртуальную машину

3. Введите название виртуальной машины (имя может быть любое). Кликните Далее:

Как написать виртуальную машину

4. Укажите объём памяти для машины. Для этого сдвиньте ползунок вправо. Нажмите Далее:

Как написать виртуальную машину

5. Выберите пункт «Создать новый виртуальный жёсткий диск» и кликните Создать:

Как написать виртуальную машину

6. Укажите тип файла «VDI (VirtualBox Disk Image)» и нажмите Далее:

Как написать виртуальную машину

7. Выберите формат хранения «Динамический виртуальный жёсткий диск». Нажмите Далее:

Как написать виртуальную машину

8. Укажите объём жёсткого диска 20 ГБ. Кликните Создать:

Как написать виртуальную машину

Готово, вы создали ВМ на VirtualBox. Теперь переходите к установке операционной системы:

Как написать виртуальную машину

Как установить операционную систему в VirtualBox

Рассмотрим, как установить операционную систему на примере Ubuntu 20.04.

Скачайте дистрибутив Ubuntu на компьютер.

Откройте панель управления Oracle и нажмите Настроить:

Как написать виртуальную машину

3. Перейдите в раздел Система. На вкладке «Материнская плата» поставьте галочку напротив пункта «Гибкий диск»:

Как написать виртуальную машину

4. На вкладке «Процессор» выберите 2 ядра:

Как написать виртуальную машину

5. Перейдите в раздел Дисплей. Поставьте галочку напротив пункта «Включить 3D-ускорение» и передвиньте ползунок вправо, чтобы выделить максимально возможный объём видеопамяти:

Как написать виртуальную машину

6. Перейдите в раздел Носители и выберите «Пусто». Затем нажмите на иконку ДискВыбрать образ оптического диска. Загрузите дистрибутив Ubuntu, который вы скачали на первом шаге.

7. После загрузки кликните Ок:

Как написать виртуальную машину

8. На главной странице нажмите Запустить:

Как написать виртуальную машину

9. Подождите, пока загрузится машина:

Как написать виртуальную машину

10. В приветственном окне выберите язык:

Как написать виртуальную машину

11. Нажмите установить Ubuntu:

Как написать виртуальную машину

12. Выберите раскладку клавиатуры «Russian». Нажмите Продолжить:

Как написать виртуальную машину

13. Выберите пункты «Обычная установка» и «Загрузить обновления во время установки Ubuntu». Затем кликните Продолжить:

Как написать виртуальную машину

14. Выберите тип установки «Стереть диск и установить Ubuntu» и нажмите Установить:
Как написать виртуальную машину

Затем кликните Продолжить:

Как написать виртуальную машину

15. Назначьте нужный регион и нажмите Продолжить:

16. Зарегистрируйтесь. Задайте имя и пароль, остальные поля будут заполнены автоматически. Нажмите Продолжить:

Как написать виртуальную машину

17. Дождитесь окончания установки и кликните Перезагрузить:

18. Дождитесь перезагрузки и нажмите Enter:

Как написать виртуальную машину

19. Выберите учётную запись, которую вы создали на шаге 15:

Как написать виртуальную машину

20. Введите пароль, который вы задали при создании учётной записи:

Как написать виртуальную машину

21. Примите предлагаемые настройки или нажмите Далее в правом верхнем углу экрана:

Как написать виртуальную машину

Готово, вы установили ОС Ubuntu 20.04 и можете приступать к работе:

Как написать виртуальную машину

Теперь вы знаете, что делает виртуальная машина и какими ресурсами виртуальной машины можно управлять с помощью программы VirtualBox.

Источник

Опыт использования виртуализации на VirtualBox

Введение

Несколько лет назад я начал разбираться с вируализацией, и у меня получились своего рода путевые заметки, которые я сейчас оформил и выкладываю сюда. Никаких откровений тут не будет, статья адресована начинающим админам. Задача которую я здесь решаю состоит в том, чтобы виртуализовать уже имеющиеся не виртуальные сервера на Linux и FreeBSD.

Как написать виртуальную машину

Причины, по которым я тогда выбрал VirtualBox

Причины, по которым я не выбрал бы его сейчас

Подготовка ОС для работы с виртуальными машинами

VirtualBox можно установить практически на любую ОС, однако стабильная работа и все его возможности (например, RDP-подключение к консоли гостевой системы) доступны только на Линуксе, поэтому был выбран Debian Linux. Для самого VirtualBox специальной настройки ОС не требуется, достаточно выделить отдельный раздел для хранения образов дисков гостевых систем и образов установочных дисков для чистой установки гостевых систем.

Однако для управления VirtualBox через Веб-интерфейс (phpvirtualbox) требуется веб-сервер (выбран Apache 2) и PHP 5. В Debian конфигурация по умолчанию PHP 5 и Apache 2 удовлетворяет требованиям phpvirtualbox, специальным образом настраивать ничего не нужно.

Установка phpvirtualbox

Для Virtualbox существует бесплатный web-интерфейс, реализованный на PHP и использующий встроенную в virtualbox службу удаленного управления virtualbox web service.

Внимание! Для успешных подключений на сервере должны быть открыты входящие порты, по умолчанию начиная с 3389 (TCP), по одному порту на гостевую систему.

5. Настраиваем virtualbox web service, для чего создаем файл /etc/vbox/vbox.cfg со следующим содержанием:
VBOXWEB_USER=’vbox’
VBOXWEB_HOST=127.0.0.1
VBOXWEB_LOGFILE=/srv/log/vboxwebservice

6. Запускаем virtualbox web service, перед этим нужно убедиться в том, что файл /srv/log/vboxwebservice доступен для чтения и записи пользователю vbox:
/etc/init.d/vboxweb-service start.

phpvirtualbox теперь доступен по адресу virtbox.site/phpvirtualbox.

Создание виртуальных машин

Управление виртуальными машинами

Управление через веб-интерфейс

Управление виртуальными машинами через web-интерфейс тривиально, достаточно выделить нужную машину в phpvirtualbox и выбрать в интерфейсе требуемое действие, например Start, Stop (безусловное выключение, отправка сигнала о нажатии кнопки выключения питания, перезагрузка, сохранение состояние гостевой системы с возможностью впоследствии откатить ее состояние и приостановка работы гостевой системы с сохранением ее памяти на диск и возможностью впоследствии загрузки памяти с диска и продолжения работы).

По щелчку на гостевой системе правой кнопкой машины доступны операции ее настроек, удаления, просмотра логов и т.д.

Также стоит отметить возможность подключения к консоли гостевой системы, что аналогично подключению к реальной машине мыши и клавиатуры. Для этого нужно выделить нужную гостевую систему, выбрать вкладку Console в phpvirtualbox, задать размер экрана (для текстовых режимов работы гостевых ОС достаточно 800х600), нажать Connect и щелкнуть мышью по клиенту удаленного подключения (в котором выводится содержимое консоли гостевой системы). Управлять гостевой системой можно с момента включения.

Управление через консоль

Для управления гостевыми система в VirtualBox используются утилиты VBoxManage и VBoxHeadless, подробное описание которых доступно в руководстве.

Запускать команды нужно от пользователя vbox, под которым работает сам VrtualBox, в случае запуска от другого пользователя или root VirtualBox не сможет найти файлы конфигурации виртуальных машин, которые хранятся в домашней директории пользователя Vbox, и выдаст ошибку.

Оболочку нужно указывать явно, потому что по умолчанию у пользователя vbox стоит оболочка /bin/false.

Ниже для примера приведены команды для включения, выключения и работы с образами дисков.

Если не указывать sleep 30 некоторые машины могут не запуститься из-за очень интенсивного чтения с жесткого диска сервера при запуске и некоторые гостевые системы решат, что у них ошибка чтения с жесткого диска.

Практически все машины понимают нажатие на кнопку выключения питания и смогут корректно завершиться.

4. Преобразование образа диска из формата VirtualBox в формат, понятный другим виртуальным машинам:
VBoxManage internalcommands converttoraw test1.vdi test1.raw

Подключение через RDP

К консоли виртуальных машин можно подключиться через RDP. В Windows нужно открыть Пуск->Все программы->Стандартные->Подключение к удаленному рабочему столу и указать адрес virtbox.test и порт, сопоставленный конкретной гостевой системе, который можно посмотреть в phpvirtualbox. Для удобства использования в параметрах подключения можно указать разрешение экрана 1024х768, тогда окно с подключением не будет занимать весь экран и перехватывать системные сочетания клавиш, такие как Alt+Tab.

Важное замечание: возможно одновременное подключение к одной гостевой системе нескольких пользователей. При этом все видят одно и то же, и все совершенные кем-либо действия видны остальным подключившимся. Для включения этой настройки нужно в настройках виртуальной машины в phpvirtualbox в разделе Display на вкладке Remote Display установить галочку Allow Multiple Connections.

Создание снимков гостевых систем

Создание дампа

Debian Linux

Процедуры клонирования и восстановления приведены на примере сервера test1 на котором установлена Debian Linux (любой версии, начиная с 5 Lenny точно). Предполжим, что у нас имеются три раздела с тремя файловыми системами: /, /var, /usr

Сначала нужно установить dump:
aptitude install dump

Далее, для создания дампа клонируемого сервера на Debian необходимо от суперпользователя (root) или с помощью sudo дать следующие команды (как сделать так, чтобы не сдампило дампы, думайте сами):
dump 0af test1.root /
dump 0af test1.var /var
dump 0af test1.usr /usr

FreeBSD

Процедуры клонирования и восстановления приведены на примере сервера test1 на котором установлена FreeBSD (любой версии, начиная с 6 точно). Предполжим, что у нас имеются три раздела с тремя файловыми системами: /, /var, /usr

Для создания дампа клонируемого сервера на FreeBSD необходимо от суперпользователя (root) или с помощью sudo дать следующие команды (опять напоминаю про дампание дампов):
dump 0aLf test1.root /
dump 0aLf test1.var /var
dump 0aLf test1.usr /usr

Развертывание дампа

Debian Linux

1. Нужно сделать виртуальную машину, прицепить к ней диск и загрузочный LiveCD Debian.

4. Поправить UUID в /etc/fstab

6. Проверить /var/spool/cron/crontabs, /etc/crontab и отключить то, что ненужно.

FreeBSD

Созданные дампы нужно развернуть на образе диска, выделенного под гостевую систему. В настоящие время поддержка файловых систем UFS используемых во FreeBSD ограниченна, поэтому для развертывания дампов создается виртуальная машина FreeBSD, к ней подключается раздел для хранения дампов, на который с помощью scp и пересылаются дампы с клонируемых серверов. Потом к этой машине подключается образ диска выделенный под гостевую систему, на этом образе создается файловая система FreeBSD и разворачивается полученный дамп.

Далее предполагается, что раздел tmp примонтирован в /mnt, образ диска для гостевой ОС размечен под два слайса, первый из которых примонтирован в mnt1, а второй отдан под swap и не примонтирован. Тогда развернуть дамп можно следующим образом:

Здесь && нужно для того, что следующая команда выполнится только в случае успешного завершения предыдущий, и таким образом исключаются ситуации, когда например каталог var не будет создан, переход в него не осуществится и разворачивание дампа произойдет не туда, т.к. разворачивание дампа производится относительно текущей директории.

Необходимые изменения в конфигурации гостевой ОС клонированного сервера

До загрузки гостевую ОС нужно перенастроить для работы в виртуальной машине. Количество требуемых действий как правило минимально и сводится к следующему:

1. Находясь в директории mnt1 (см. выше) удаляем файлы конфигурации загрузчика. Это особенно актуально, если виртуализуем какой-нибудь продукционный сервер, чтобы исключить использование COM-порта в качестве консоли по умолчанию, что приводит к зависанию загрузчика.
rm /mnt1/boot.config
rm /mnt1/boot/device.hints

2. Заменить содержимое файла /mnt1/etc/fstab следующим:
/dev/ad0s1b none swap sw 0 0
/dev/ad0s1a / ufs rw 2 2

При этом предполагается, что образ диска гостевой ОС разбит на 2 слайса, первый из которых отдан под хранение данных и второй под swap.

3. Если нужно, сказать клонированной системе о необходимости загрузки модуля ядра для работы с эмулированной сетевой картой, для чего нужно в файле /boot/loader.conf добавить строчку if_em_load=»YES»

4. Указать клонированное системе выделенный для нее IP-адрес, для чего в /etc/rc.conf нужно закомментировать строчку текущих настроек сетевого адаптера и добавить новую строчку следующего вида:

7. Выключить FreeBSD, использованную для разворачивания дампа, и загрузить гостевую систему с клоном сервера. В случае проблем при загрузке возможно, что ядро на системе было пересобрано с измененной конфигурацией, это можно исправить сказав загрузчику загрузить ядро по умолчанию, которое я надеюсь вы сохранили в системе во время пересборки:
unload
load boot/kernel.GENERIC/kernel
boot

Для отдачи этих команд необходимо включить гостевую систему, подключиться к ней по RDP и дождаться появления на экране сообщений о том, что можно нажать Enter для указания опций загрузчику.

Создание виртуальных сетей

Внутри VirtualBox можно создавать полностью изолированные виртуальные сети. Какие возможности это дает?

Минимизация необходимости перенастройки клонированных серверов
Создание тестовой среды для отработки взаимодействия серверов между собой

Создание виртуальной сети

Чтобы создать виртуальную сеть нужно в phpvirtualbox зайти в свойства гостевой системы, перейти в раздел Network, выбрать в поле «Attached to» опцию «Internal Network», а в выпадающем списке «Name» выбрать требуемую виртуальную сеть. Какие могут возникнуть сложности?

Нужно создать новую виртуальную сеть, а такой опции в интерфейсе нет. Есть два варианта решения:

Попробовать написать имя новой виртуальной сети прямо в выпадающем списке «Name». Однако в этом случае может возникнуть ошибка.
Тогда нужно привязать сетевой адаптер гостевой системы к виртуальной сети через CLI:

Здесь
nic1 — сетевой адаптер гостевой системы, где 1 это его порядковый номер. Количество адаптеров в гостевой системе не ограничено
intnet — виртуальная сеть, название может быть любым. Особенность работы VirtualBox заключается в том, что специально создавать виртуальные сети не нужно, достаточно указать нескольким гостевым системам одну и ту же виртуальную сеть и они окажутся связанными на (эмулированном) физическом уровне автоматически, что аналогично подключению нескольких реальных компьютеров к одному свитчу (коммутатору).

Более подробная информация находится в разделе 8.7.2 Networking setting руководства пользователя.

Управление недоступными снаружи машинами в виртуальной сети

Доступ по RDP

RDP-сервер работает на физическом сервере, поэтому для подключения к любой виртуальной машине справедливо написанное в разделе Управление через веб-интерфейс этой статьи.

Проброс портов

Существует возможность создать в гостевой системе виртуальную сетевую карту с подключением через NAT (реализуемый автоматически средствами VirtualBox) и пробросить (отобразить) произвольный порт гостевой системы на порт сервера VirtualBox. Для того, чтобы сделать это через phpvirtualbox, нужно:

1. Зайти в свойства гостевой системы, перейти в раздел «Network», выбрать в поле «Attached to» опцию «NAT»

2. Раскрыть опции, скрывающиеся в разделе «Advanced» этого же раздела, и нажать там кнопку Port Forwarding

3. В открывшемся окне «Port Forwarding Rules» указать следующие параметры:

4. Нужный протокол, путем щелчка мышью по именованию «TCP» в поле «Protocol»

5. Указать свободный порт на сервере VirtualBox в поле «Host Port»

6. Указать порт гостевой системы в поле «Guest Port».

Больше ничего указывать не нужно. После применения настроек порт гостевой системы станет немедленно (без перезагрузки) доступен через соответствующий порт сервера VirtualBox. Как пример, в случае с пробросом порта ssh (22 TCP) гостевой системы на 2200 порт VirtualBox нужно указать следующие параметры:
Параметр Значение
Name ssh (необязательный параметр)
Protocol TCP
Host IP Не указывать
Host Port 2200
Guest Port 22
Guest IP Не указывать

Количество отображаемых портов не ограничено, можно отобразить столько, сколько нужно.

Виртуальный маршрутизатор

В случае создание в VirtualBox группы взаимодействующих гостевых систем без внешних адресов имеет смысл установить еще одну гостевую систему, которая будет играть роль маршрутизатора. Какие цели при этом достигаются?

Конфигурацию сетевых адаптеров клонированных сервером можно не менять. При этом виртуальный маршрутизатор создает для остальных гостевых систем видимость того, что они настоящие и пользуются своими настоящими именами хостов и IP-адресами
К гостевым системам не имеющим ни внешних адресов, ни описанной выше возможности проброса портов, которая работает только в случае использования NAT опции VirtualBox, становится возможен прямой доступ по ssh.

При этом предполагается, что виртуальный маршрутизатор настроен правильно и имеет сетевой адаптер, настроенный на работу с виртуальной подсетью в которой находится гостевая система с адресом 192.168.0.2

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *