Перейти к содержимому

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

Выполнение резервных копий физических носителей является довольно распространённой задачей. Но что если нужно сделать копию рабочей операционной системы (любой), например со старого ноутбука, чтобы с ней можно было работать через VirtualBox? Несколько команд в Linux позволяют это сделать без особых усилий, остаётся только запастись терпением.

Шаг 0. Что нужно?

Нам понадобится Live USB с каким-нибудь дистрибутивом Linux: Ubuntu, Mint или любым другим. С неё нужно будет загрузиться с той машины, копию которой мы собираемся делать. Как создавать загрузочную флешку мы здесь описывать не будем, поскольку в интернете полно руководств.

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

Загружаемся с Live USB. Подключаем внешний жёсткий диск и монтируем его, если этого не сделала наша Live система автоматически. Аналогично поступаем с диском с системой, которую собираемся конвертировать в виртуальную.

Шаг 1. Заполняем нулями пустое пространство

Часто встречается ситуация, когда реально используемое пространство на диске намного меньше размеров всего диска. Например, все файлы занимают на диске 100 Гб, а полный объём диска 1 ТБ. В этом случае нецелесообразно делать образ всего диска и от свободного пространства хорошо бы избавиться. Есть несколько способов сделать это, но наиболее хитрым и простым является заполнение пустого пространства нулями, которые очень хорошо сжимаются.

Для этого в терминале перейдём в какую-нибудь директорию диска с копируемой системой и воспользуемся командой dd следующим образом (скорее всего, понадобятся привилегии sudo):

dd bs=4096 if=/dev/zero of=zeros.txt

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

rm zeros.txt

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

Шаг 2. Создаем raw образ

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

Пусть диск, образ которого мы создаём, имеет файл устройства /dev/sdx. Для создания образа системы снова воспользуемся командой dd :

dd conv=sparse status=progress if=/dev/sdx of=image.img

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

Во-первых, входным в опции if= должен быть файл всего копируемого устройства, а не какого-то раздела. Например, если на компьютере есть диск /dev/sda и у него есть разделы /dev/sda1 и /dev/sda2, то в команду dd должен подаваться именно весь диск /dev/sda.

Во-вторых, выходной файл в опции of= должен находиться на внешнем жёстком диске. Дабы не прописывать весь путь полностью, можно сначала перейти командой cd в корень внешнего диска и запустить dd оттуда.

Наконец, в-третьих, опция conv=sparse создаст специальный разрежённый файл, в котором нули, которые мы создали на предыдущем шаге, не запишутся в явном виде, а будут заменены на информацию о них. В результате, размер образа будет равен размеру реально существующих на диске файлов, но при этом файловая система, если она способна работать с разрежёнными файлами, распознает, что реальный объём образа равен полному объёму физического диска. Эту опцию можно опустить, если свободного пространства на диске не очень много.

Шаг 3. Создаем VDI образ

На последнем шаге нам требуется преобразовать raw образ в один из форматов, который воспринимает VirtualBox. Пусть это будет Virtual Disk Image (VDI) с расширением *.vdi. Для преобразования воспользуемся консольной утилитой VBoxManage и её подкомандой convertfromraw:

VBoxManage convertfromraw image.img image.vdi --format VDI

В результате получим образ VDI с именем image.vdi. Команду можно выполнить как с Live USB, предварительно установив VirtualBox на неё, либо с любой другой машины с VirtualBox.

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

Два последних шага можно объединить, воспользовавшись конвеером (pipe), минуя процесс создания сырого образа. Тогда команда выглядела бы так:

dd conv=sparse status=progress if=/dev/sdx | VBoxManage convertfromraw stdin SIZE image.vdi --format VDI

Здесь вместо SIZE должен быть указан размер входного диска в байтах, который можно узнать в выводе команды fdisk -l в столбце End последнего раздела на диске.

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

Опубликовано вLinux