1. Вы находитесь в архивной версии форума xaker.name. Здесь собраны темы с 2007 по 2012 год, большинство инструкций и мануалов уже неактуальны.
    Скрыть объявление

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

Тема в разделе "FAQ", создана пользователем Jason Bourne, 30 авг 2011.

  1. Jason Bourne

    Jason Bourne [email protected]:~# Модератор

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

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

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

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

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

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

    Код:
    $ apt-get clean
    Теперь посмотрим, сколько у нас свободного пространства на диске:

    Код:
    [COLOR="Red"]df
    
    Filesystem           1K-blocks      Used Available Use% Mounted on
    /dev/hda1              7360760   3409528   3577324  49% /
    tmpfs                   126644         0    126644   0% /lib/init/rw
    udev                     10240        80     10160   1% /dev
    tmpfs                   126644         0    126644   0% /dev/shm[/COLOR]
    
    В приведенном примере размер свободного пространства составляет 3577324 блоков (каждый по 1 Кб).
    Чтобы удалить свободное пространство, создадим файл, заполненный нулями, размером немного меньше размера свободного пространства. Для верности, чтобы избежать ошибок, примем его размер равным 3577324 - 1000 = 3576324 блоков:


    Код:
    $ dd if=/dev/zero of=/zeroes.bin bs=1024 count=3576324
    Теперь удалим этот файл:

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

    Код:
    [COLOR="Red"]freespace=`df | grep ' /$' | perl -ple 's/^[^ ]+ +[^ ]+ +[^ ]+ +([^ ]+) .*/$1/'`
    mycount=$(( $freespace - 1000 ))
    dd if=/dev/zero of=/zeroes.bin bs=1024 count=$mycount
    rm /zeroes.bin[/COLOR]
    
    Копирование виртуального диска в файл

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

    Код:
    [COLOR="Red"]fdisk -l /dev/hdb
    
    Disk /dev/hdb: 8053 MB, 8053063680 bytes
    255 heads, 63 sectors/track, 979 cylinders
    Units = cylinders of 16065 * 512 = 8225280 bytes
       Device Boot      Start         End      Blocks   Id  System
    /dev/hdb1   *           1         931     7478226   83  Linux
    /dev/hdb2             932         979      385560    5  Extended
    /dev/hdb5             932         979      385528+  82  Linux swap / Solaris[/COLOR]
    
    Мы хотим скопировать все с начала диска до конца первого раздела, т.е. первый 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 Гб.

    Код:
    [COLOR="Red"]fdisk -l /dev/hda
    
    Disk /dev/hda: 400.0 GB, 400088457216 bytes
    255 heads, 63 sectors/track, 48641 cylinders
    Units = cylinders of 16065 * 512 = 8225280 bytes
    Disk identifier: 0x0004a22d
       Device Boot      Start         End      Blocks   Id  System
    /dev/hda1   *           1         931     7478226   83  Linux
    /dev/hda2             932        1175     1959930   82  Linux swap / Solaris
    /dev/hda3            1176       48641   381270645   83  Linux[/COLOR]
    

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

    Код:
    $ 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:

    Код:
    [COLOR="Red"]# /etc/fstab: static file system information.
    #
    # <file system> <mount point>   <type>  <options>       <dump>  <pass>
    proc            /proc           proc    defaults        0       0
    /dev/hda1       /               ext3    errors=remount-ro 0       1
    /dev/hda2       none            swap    sw              0       0
    /dev/hda3       /home           ext3    errors=remount-ro 0       0[/COLOR]
    
    Имя хоста и настройки сети

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

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

    Код:
    Оригинал: [url=http://kpweb.homelinux.org/blog/index.php?id=10]How to make a virtual computer real[/url] 
    Автор: Paul Zarucki 
    Дата публикации: 15 мая 2009 года 
    Перевод: А. Кривошей 
    Дата перевода: август 2011 г.
    
    [B][COLOR="DarkOrange"](C)[/COLOR][/B] [COLOR="Green"]http://rus-linux.net/nlib.php?name=/MyLDP/vm/perenos-virtualnoi-mashini-v-real.html[/COLOR]
    
     
    3 пользователям это понравилось.
  2. big-hearted

    big-hearted Новичок

    Регистрация:
    7 ноя 2011
    Сообщения:
    13
    Симпатии:
    5
    Баллы:
    0
    Интересный способ, наверняка правильный. Но как по мне, то немного сложноват процесс переноса на живой компьютер. Тоже приходится все манипуляции с Линуксами делать в виртуалке, т.к. из соображений безопасности на всех хостовых машинах отключены все сетевые интерфейсы. Однако я из лени переношу Акронисом, fstab везде унифицировал изначально, прокатывает отлично :)
     
  3. Jason Bourne

    Jason Bourne [email protected]:~# Модератор

    Регистрация:
    28 ноя 2009
    Сообщения:
    0
    Симпатии:
    96
    Баллы:
    0
    Я думаю этот способ переноса нужно иметь как лишнюю карту в рукаве, на случай того если что то не удастся или не будет возможности сделать по другому :)
     

Поделиться этой страницей