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








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

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

Перенос виртуальной машины на физический жесткий диск

Оригинал: How to make a virtual computer real
Автор: Paul Zarucki
Дата публикации: 15 мая 2009 года
Перевод: А. Кривошей
Дата перевода: август 2011 г.

Если мне хочется побыстрее установить на компьютер какой-либо дистрибутив GNU/Linux, хорошим способом для этого может быть установка его в виртуальной машине с последующим преобразованием виртуального компьютера в реальный путем копирования виртуального диска на физический жесткий диск (этот процесс, в противоположность виртуализации, можно назвать "реализацией").
Вы можете использовать виртуальный диск как шаблон для быстрого и простого развертывания системы на нескольких компьютерах. У меня имеется целый набор шаблонов для различных конфигураций, например для десктопов и серверов, для 32 и 64-битных машин, для различных дистрибутивов Linux. Все они готовы к установке в любой момент. В этой заметке приведен мой рецепт для конвертирования виртуального компьютера в реальный. Я работал с дистрибутивами Debian 4 и 5 (серверы и десктопы) и floppyfw (маршрутизаторы и брандмауэры). Этот метод должен работать с большинством (если не со всеми) дистрибутивами Linux. Для создания виртуальных машин я применял VirtualBox, но любое другое решение для виртуализации (VMware, QEMU, Parallels и т.д.) также должно подойти. Я ни в коем случае не гарантирую успеха - используйте этот метод на свой страх и риск!

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

Я предполагаю, что вы уже знаете, как создать виртуальную машину и установить в ней GNU/Linux, поэтому не буду подробно описывать этот процесс. Обычно я создаю виртуальный компьютер с небольшим жестким диском, вся файловая система расположена на первом разделе. Если необходимы дополнительные разделы для /home, /var и т.д., я предпочитаю создавать их позже, на реальной машине, что будет описано ниже. Для десктопов и серверов достаточно виртуального диска размером около 8 Гб.
Установите GNU/Linux и все необходимые приложения в виртуальной машине, а также произведите все необходимые вам настройки.

Очистка (необязательно)

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

$ apt-get clean

Теперь посмотрим, сколько у нас свободного пространства на диске:

В приведенном примере размер свободного пространства составляет 3577324 блоков (каждый по 1 Кб).
Чтобы удалить свободное пространство, создадим файл, заполненный нулями, размером немного меньше размера свободного пространства. Для верности, чтобы избежать ошибок, примем его размер равным 3577324 - 1000 = 3576324 блоков:

$ dd if=/dev/zero of=/zeroes.bin bs=1024 count=3576324

Теперь удалим этот файл:

$ rm /zeroes.bin

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

Копирование виртуального диска в файл

Мы хотим извлечь данные из виртуального диска в таком виде, чтобы они были пригодны для копирования на физический диск. Для этого я подключил виртуальный диск вторым диском к другой виртуальной машине. Запустите эту виртуальную машину и просмотрите таблицу разделов второго диска.

Мы хотим скопировать все с начала диска до конца первого раздела, т.е. первый 931 цилиндр. Находим количество блоков размером по 512 байт, которые необходимо скопировать: 931 * 16065 = 14956515. Приведенная ниже команда копирует данные в сжатый файл.

$ dd if=/dev/hdb bs=512 count=14956515 | gzip > /mnt/nfs/template.bin.gz

здесь template.bin.gz - сжатый файл с данными, /mnt/nfs - расшаренная директория, в которой я его сохраняю. Разумеется, директория может быть любой.

Копирование файла на физический жесткий диск

Загрузите физический компьютер с GNU/Linux. Я использовал USB-флешку с установленным на ней Debian, но подойдет любой GNU/Linux live CD. Для того, чтобы получить доступ к файлу, содержащему данные для жесткого диска (в моем случае template.bin.gz), необходимо подключиться к сетевой папке, в которой он находится, либо скопировать его на любой носитель.
Копируем данные на жесткий диск:

$ cat /mnt/nfs/template.bin.gz | gunzip > /dev/hda

В вашем случае замените "/mnt/nfs" на путь к директории, в которой у вас лежит файл с данными. Кроме того, замените /dev/hda на свой жесткий диск (например, это может быть /dev/sda)/

Разбиение диска

Теперь жесткий диск имеет точно такую же таблицу разделов, как виртуальный диск. Если вы хотите, чтобы разделы реального жесткого диска имели точно такой же размер, как на виртуальном диске, то можете пропустить следующие разделы до настройки имени хоста и сети. Однако обычно физический диск имеет намного больший размер, чем виртуальный, и если вы хотите использовать имеющееся свободное место, например для расширения раздела подкачки или увеличения пространства под домашнюю директорию, читайте дальше.
Используем fdisk или любой его аналог для редактирования таблицы разделов жесткого диска (в моем случае /dev/hda).
Я обычно удаляю все существующие разделы, за исключением первого (/dev/hda1). Затем я создаю раздел подкачки на 2 Гб (/dev/hda2), а оставшееся место использую для создания большого раздела под /home (вместо этого можно создать отдельные разделы под /home и /var). Сохраните изменения и выйдите из fdisk.
Ниже приведено разбиение для моего жесткого диска на 400 Гб.

Форматируем второй раздел для подкачки:

$ mkswap /dev/hda2

Обычно я форматирую раздел /home в файловую систему ext3:

$ mke2fs -j -m 1 /dev/hda3

Перемещение домашних директорий

Смонтируйте первый и третий разделы ("/" и "/home" соответственно):

$ mkdir /mnt/hda1
$ mount -t ext3 /dev/hda1 /mnt/hda1
$ mkdir /mnt/hda3
$ mount -t ext3 /dev/hda3 /mnt/hda3

Переместите домашние директории с /dev/hda1 на /dev/hda3:

$ mv /mnt/hda1/home/* /mnt/hda3

Редактируем fstab

Отредактируйте /mnt/hda1/etc/fstab, чтобы отразить тот факт, что /home у нас теперь находится на отдельном разделе. Ниже мой отредактированный fstab:

Имя хоста и настройки сети

Описываемые ниже настройки относятся к Debian 5. Для других систем возможно необходимо будет редактировать другие файлы, расположенные в других местах. Если вы хотите, чтобы реальная система имела другое имя хоста, отличное от имевшегося у виртуальной машины, отредактируйте файл /mnt/hda1/etc/hostname, заменив в нем имя хоста.
Сетевой интерфейс может получить имя, отличное от имевшегося в виртуальной машине, например "eth1" вместо "eth0". Чтобы избежать этого, например, если вы настраивали сеть вручную, отредактируйте файл /mnt/hda1/etc/udev/rules.d/70-persistent-net.rules и удалите строку, которая относится к существующему сетевому интерфейсу. Если вам необходимо изменить настройки сети, редактируйте файл /mnt/hda1/etc/network/interfaces.

Выключите компьютер и удалите флешку или CD. Снова включите компьютер. Если все прошло удачно,вы увидите реальную версию вашей виртуальной машины.



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