Наши партнеры








Книги по Linux (с отзывами читателей)

Библиотека сайта rus-linux.net

Ошибка базы данных: Table 'a111530_forumnew.rlf1_users' doesn't exist

Приемы работы в Ubuntu.
Глава 9: Виртуализация и эмуляция

Оригинал: "Ubuntu Hacks: Chapter 9 - Virtualization and Emulation"
Авторы: Кайл Ранкин, Джонатан Оксер, Билл Чайлдерс (Kyle Rankin, Jonathan Oxer, Bill Childers)
Дата публикации: June 2006
Перевод: Н.Ромоданов
Дата перевода: октябрь 2010 г.

Совет # 91: Создаем виртуальную машину Ubuntu используя Xen

Устанавливаем Ubuntu в образ виртуальной машины и загружаем его с помощью Xen.

В предыдущем совете вы увидели, как настроить сервер Xen [Совет # 90]. Чтобы можно было воспользоваться только что установленным хостом Xen, вам необходимо создать несколько виртуальных машин DomU и запустить их на хосте. В этом совете вы настроите базовую виртуальную машину (VM) с системой Dapper.

Подготавливаем файловые системы виртуальной машины

Для виртуальной машины необходима как корневая файловая система, так и файловая система подкачки. В условиях производства они, вероятно, должны размещаться в файловой системе общего доступа, такой как SAN или аналогичной, но, для простоты, создадим их сейчас на локальном диске в виде образов дисков loopback. Итак, начните с создания пары директориев для их хранения:

$ sudo mkdir -p /vm/vm_base
$ sudo mkdir /vm/images

Корневая файловая система

Корневой файловой системой будет образ размером в 2 ГБ, поэтому сначала используйте dd чтобы создать образ диска, а затем используйте mkfs чтобы создать в нем файловую систему. Объема в 2 Гб должно быть достаточно для первоначального тестирования, но если вы хотите изменить размер, просто укажите другое значение аргумента count, которое, умноженное на значение аргумента bs (размер блока), определяет общий размер диска.

Как только mkfs будет запущен, он пожалуется, что vm_base.img не является специальным блочным устройством, и попросит подтвердить, хотите ли вы независимо от этого продолжить выполнять работу. Ответьте y (да):

$ sudo dd if=/dev/zero of=/vm/images/vm_base.img bs=1024k count=2000
$ sudo mkfs.ext3 /vm/images/vm_base.img        

Файловая система подкачки

Аналогичным образом вы можете создать образ раздела подкачки размером в 200 MB:

$ sudo dd if=/dev/zero of=/vm/images/vm_base-swap.img bs=1024k count=200
$ sudo mkswap /vm/images/vm_base-swap.img        

Монтируем образ корневой файловой системы

Смонтируйте образ корневой файловой системы как устройство loopback, что позволит использовать его как отдельный том несмотря на то, что это только образ, запомненный на локальном диске:

$ sudo mount -o loop /vm/images/vm_base.img /vm/vm_base

Устанавливаем Ubuntu внутри корневой файловой системы

Теперь у вас есть эквивалент чистого диска, который просто ожидает, чтобы на нем был установлен Linux. Система, которую вы установите, будет виртуальной машиной domU, которая будет загружена с помощью Xen. Установка на другой том может оказаться сложным упражнением, но к счастью, Debian предоставляет очень полезный инструмент, называемый debootstrap, который берет на себя всю сложную часть такой работы. Во-первых, получите пакет debootstrap:

$ sudo apt-get install debootstrap

Затем, используйте его для создания в корневой файловой системе новой базовой системы Breezy. Для Dapper инсталляционный процесс был существенно изменен, так что сейчас легче сначала установить Breezy, а затем использовать dist-upgrade для ее обновления до Dapper:

$ sudo debootstrap --arch i386 breezy /vm/vm_base/ \\
                 http://archive.ubuntu.com/ubuntu

Подсказка

Если вам интересно, почему вы устанавливаете Breezy, то это из-за того, что в Dapper больше нет базовой конфигурации (процесс инсталляции в значительной степени переписан в виде одноэтапной процедуры и мы еще не выяснили, какой именно будет начальная конфигурация). Обойти это просто — сначала установите Breezy, а затем обновите ее до Dapper.

В предыдущем примере мы определили архитектуру как i386 (32-битный процессор Intel). Возможно, вы, в зависимости от архитектуры вашей системы, захотите указать другие варианты, например, powerpc или amd64.

Работа debootstrap может занять довольно длительное время, поскольку нужно будет скачать все пакеты, и, если через этот процесс требуется пройти несколько раз, вы, возможно, захотите создать локальный кэш пакетов [Совет # 61] или заменить адрес зеркала ссылкой на file:///media/cdrom и использовать установочный компакт диск Ubuntu. Если у вас уже есть работающий локальный apt-cacher, вы можете добавит адрес кэша, например, следующим образом:

$ sudo debootstrap --arch i386 breezy /vm/vm_base/  \\
                 http://localhost/apt-cacher/archive.ubuntu.com/ubuntu

Конфигуриование виртуальной машины

На данный момент, у вас есть установленная базовая система Ubuntu, но она абсолютно не сконфигурирована. Если ваша хостовая машина работает под управлением Ubuntu, вы можете сэкономить немного своих усилий за счет копирования вашего файла /etc/apt/sources.list:

$ sudo cp -a /etc/apt/sources.list /vm/vm_base/etc/apt/

Затем отредактируйте файл /vm/vm_base/etc/apt/sources.list и измените в нем все ссылки с dapper на breezy, поскольку вы запускаете базовую инсталляцию Breezy.

Теперь необходимо отредактировать файл /vm/vm_base/etc/network/interfaces и указать адрес устройства loopback и виртуального интерфейса eth0. Вам нужно указать те значения, которые соответствуют вашей сети. Адрес, выделенный под eth0, должен указываться, хотя он не используется:

auto lo
iface lo inet loopback
      address 127.0.0.1
      netmask 255.0.0.0

auto eth0
iface eth0 inet static
      address 192.168.0.101
      netmask 255.255.255.0
      gateway 192.168.0.1

Отредактируйте файл /vm/vm_base/etc/hostname и укажите в нем значение vm01.

Отредактируйте файл /vm/vm_base/etc/hosts и добавьте в него следующие строки:

127.0.0.1 localhost.localdomain   localhost  vm01

# The following lines are desirable for IPv6 capable hosts
::1    ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
ff02::3 ip6-allhosts

Виртуальной машине также необходимо знать конфигурацию файловой системы. Обратите внимание, что она не обязательно должна совпадать с конфигурацией хоста, и имена томов не имеют ничего общего с с вашим локальным фактически существующим диском. Тома, которые будет видеть виртуальная машина при запуске, являются виртуальными томами, которые определяются в конфигурации Xen, так что сейчас просто отредактируйте файл /vm/vm_base/etc/fstab и укажите в нем следующее:

/dev/hda1       /           ext3    defaults  1   2
/dev/hda5       none        swap    sw        0   0
/dev/pts        devpts      gid=5,mode=620    0   0
none            /dev/shm    tmpfs   defaults  0   0

Запускаем настройку внутри образа виртуальной машины

Используйте команду chroot для того, чтобы переключиться в корень файловой системы виртуальной машины:

$ sudo chroot /vm/vm_base

Теперь все, что вы делаете, будет осуществляться в контексте виртуальной машины, поэтому вы можете вручную обратиться к инструментальным средствам, которые обычно используются на последней стадии обычной установки Ubuntu. Убедитесь, что у вас в файле sources.list добавлен доступ к репозитарию universe [Совет # 60] (для Breezy также есть репозитарий universe), и сообщите apt о том, что нужно обновить список пакетов, а затем настроить локали:

# apt-get update
# apt-get install localeconf
# dpkg-reconfigure localeconf

Вам будет задан ряд вопросов, когда будет устанавливаться пакет localeconf, а затем еще дополнительные вопросы, когда вы будете его перенастраивать:

Manage locale configuration files with debconf? (Управлять конфигурационными файлами локали с помощью debconf?). Ответьте - Yes (Да).

Replace existing locale configuration files? (Заменить существующие конфигурационные файлы локали?) Ответьте - Yes (Да).

Default system locale (Системная локаль по умолчанию) - Выберите подхолдящую, например, en_US ISO-8859-1.

Environment settings that should override the default locale (Настройки среды окружения, которые должны заменить значения, используемые по умолчанию для локали) - Не выбирайте никаких вариантов; просто нажмите OK для того, чтобы продолжить.

На данный момент, многие стандартные устройства не существует и генерация локали не выполняется, так что смонтируйте виртуальную файловую систему proc и создайте устройства, используемые по умолчанию:

# mount -t proc proc /proc
# cd /dev
# ./MAKEDEV generic

Когда выполнение MAKEDEV будет завершено, запустите base-config для того, чтобы загрузить систему:

# base-config

Команда base-config задаст вам все обычные вопросы, которые вам задаются при запуске инсталлятора Ubuntu Breezy, так что, как и обычно, отвечайте на все эти вопросы, но с одним исключением: когда вас просят указать метод доступа для apt, выберите "edit sources list by hand" ("Изменить список источников вручную"), в результате чего вы перейдете в редактор vim, в котором будет открыт файл sources.list. Поскольку он уже правильно настроен, просто наберите ZZ чтобы его сохранить и выйти из vim, а затем позвольте apt выполнить процесс верификации репозитариев и установки всех базовых пакетов.

Как только инсталлятор Breezy закончит работу, снова отредактируйте файл /etc/apt/sources.list и на этот раз измените все ссылки с breezy на dapper. Затем снова обновите список пакетов и с помощью dist-upgrade выполните обновление до системы Dapper:

# apt-get update
# apt-get dist-upgrade

Теперь у вас внутри файловой системы loopback установлена система Dapper и вы можете выйти из chroot:

# exit

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

Виртуальная машина domU будет загружена с помощью ядра Xen, установленного на хосте dom0, так что скопируйте модули ядра в свою файловую систему, отключите TLS и размонтируйте образ:

$ sudo cp -dpR /lib/modules/2.6.12.6-xenU /vm/vm_base/lib/modules/
$ sudo mv /vm/vm_base/lib/tls /vm/vm_base/lib/tls.disabled
$ sudo umount /vm/vm_base

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

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

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

$ sudo cp -a /vm/images/vm_base.img /vm/images/vm01.img
$ sudo cp -a /vm/images/vm_base-swap.img /vm/images/vm01-swap.img

Конфигурируем виртуальную машину в Xen

Вам нужно для каждой виртуальной машины domU создать конфигурационный файл для того, чтобы Xen знал, как ее загружать. Начните с копирования в нужное место примера конфигурационного файла:

$ sudo cp /etc/xen/xmexample1 /etc/xen/vm01.conf

Пример конфигурационного файла очень хорошо прокомментирован, и большинство его настроек, указанных по умолчанию, отлично подходят в качестве отправной точки, так что откройте в вашем любимом редакторе файл /etc/xen/vm01.conf и начинайте с ним работать. Особое внимание уделите следующим настройкам:

Kernel (Ядро) - Параметр kernel указывает путь к ядру domU в хост-системе. Обратите внимание, что ядра dom0 и domU практически идентичны, поэтому вы, если захотите, можете использовать образ ядра dom0 для того, чтобы загрузить гостевую систему domU. Ядро domU является, в сущности, ядром dom0, но из ядра domU удалены модули работы с сетью и многими другими сервисами, которые поддерживаются на хосте dom0 и виртуальной машине нет необходимости самостоятельно ими управлять. Это делает ядро domU примерно на 30 процентов меньше, чем ядро dom0.

Memory (Память) - Хост dom0 выполняет предварительное распределение оперативной памяти под каждую виртуальную машину в соответствие со значением параметра memory, имеющимся в файле конфигурации, поэтому для начала установите для него некоторое разумное значение, например, 128. Вы должны убедиться, что после того, как гостевые системы domU займут отведенное для них адресное пространство, для хоста dom0 останется достаточно памяти, и если, например, у вас есть 512 Мб оперативной памяти на хосте, на котором вы, возможно, будете запускать три гостевые системы, и выделите для каждой по 128 МБ, еще 128 МБ останется для хоста.

Name (Имя) - Хост требует, чтобы у каждой системы domU было уникальное имя, которое будет использоваться для ее идентификации. Выберите сейчас в качестве имени vm01.

Virtual network interfaces (Виртуальные сетевые интерфейсы) - Вы можете непосредственно в файле конфигурации указать настройки виртуального сетевого интерфейса, либо оставить это значение пустым с тем, чтобы гостевая система указала их в своих собственных настройках. Сейчас, просто оставьте это поле пустым, поскольку вы ранее уже сконфигурировали виртуальный интерфейс eth0: vif = [ '' ].

Disk (Диск) - Хост dom0 позволяет работать в гостевых системах domU с виртуальными файловыми системами точно так, как если бы это были реальные файловые системы, а параметр disk позволяет вам указать, что будет использоваться гостевой системой. Сейчас, вы должны использовать образы дисков loopback, которые были созданы ранее, то если вы создали гостевые файловые системы /etc/fstab так, как предлагалось ранее, вам следует в качестве параметра disk использовать следующее:

disk = [ 'file:/vm/images/vm01.img,hda1,w','file:/vm/images/vm01-swap.img,hda5,w' ]

Образы дисков не должны быть смонтированы: аргумент file указывает Xen, что он должен рассматривать указанный объект как образ диска loopback и он должен позаботится обо всем вместо вас.

Загружаем вашу виртуальную машину

Управление виртуальными машинами осуществляется с помощью xm, Xen Manager, который позволяет загружать виртуальные машины, останавливать их, выдавать список виртуальных машин и переносить их на другие физические хосты. Запустите вашу только что созданную виртуальную машину следующим образом:

$ sudo xm create -c /etc/xen/vm01.conf

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

$ cat /proc/cpuinfo
$ cat /proc/meminfo
$ uname -r

Все должно выглядеть так, как если бы вы находились на совершенно отдельной машине - должен функционировать сетевой интерфейс, причем пакеты должны перенаправляться на физическую карту Ethernet через ядро dom0 и вы даже можете установить несколько пакетов с помощью команды apt-get install или делать все, что еще нужно, чтобы настроить виртуальную машину так, как вам нужно.

Пока ваша виртуальная машина все еще работает, откройте на хосте dom0 еще одну сессию и попробуйте запустить:

$ sudo xm list

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

$ sudo xm top

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

$ sudo xm shutdown vm01

Когда вы закончите опробовать вашу новую виртуальную машину, вы можете отключить ее из хоста dom0 либо с помощью xm, либо закрыть ее изнутри виртуальной машины, использовав как и в любом другом случае команду sudo shutdown.

Создаем другие гостевые системы

Чтобы создать еще несколько гостевых систем, вам нужно повторить несколько предыдущих шагов. Еще раз скопируйте шаблоны:

$ sudo cp -a /vm/images/vm_base.img /vm/images/vm02.img
$ sudo cp -a /vm/images/vm_base-swap.img /vm/images/vm02-swap.img

Смонтируете копию как базовый образ:

$ sudo mount -o loop /vm/images/vm02.img /vm/vm_base

Отредактируйте файлы /vm/vm_base/etc/network/interfaces, /vm/vm_base/etc/network/hostname и /vm/vm_base/etc/network/hosts — установите в них соответствующие значения хоста и адреса IP.

Размонтируйте базовый образ:

$ sudo umount /vm/vm_base

Сделайте копию конфигурации Xen:

$ sudo cp /etc/xen/vm01.conf /etc/xen/vm02.conf

Затем отредактируйте его - измените пути к образам дисков и имя компьютера и вы готовы запустить вторую виртуальную машину.


Назад Оглавление Вперед



Средняя оценка 1 при 1 голосовавших

Комментарии