У меня есть образ существующего раздела, созданного с помощью dd if=/dev/sdXN of=image.bin
. Теперь я хочу использовать этот образ в качестве основы для виртуальной машины. Я знаю, как преобразовать изображение в формат, который может использовать VirtualBox.
Проблема в том, что образ «диска» на самом деле представляет собой просто образ одного раздела и, следовательно, не содержит MBR или таблицы разделов. Это очень затрудняет загрузку виртуальной машины.
Существует ли простой способ с учетом образа раздела создать правильный образ диска, включая таблицу разделов?
источник
Я уверен, что первоначальная проблема была решена давно, но для тех, кто с подобной проблемой:
Один из способов избежать копирования всего изображения - создать изображение в формате .vmdk, которое ссылается на отдельные файлы экстентов для таблицы разделов и для содержимого раздела.
У меня есть этот фрагмент в файле .vmdk из теста, который я провел некоторое время назад:
Это означает, что 63 сектора, начиная со смещения 0, считываются из необработанного файла "parttable.bin", но сектор 63 и выше поступает из необработанного дампа раздела "partition-image.bin". (Конечно, замените 63 фактическим смещением на первый раздел, обычно 2048 в эти дни).
Конечным результатом является то, что изнутри VBox выглядит так, будто вы добавили таблицу разделов в начало образа раздела без необходимости выполнять длительную операцию копирования.
Разбейте диск внутри виртуальной машины, и, если вы правильно настроили смещения, вы должны увидеть содержимое образа вашего раздела во вновь созданном разделе.
источник
Интересная проблема. Вот что я бы сделал:
После этого вам нужно обновить загрузчик. Предполагая, что вы используете GRUB, смонтируйте только что созданный раздел, затем выполните chroot в нем и запустите его
update-grub
(будьте осторожны, возможно, вам придется настроить его файлы конфигурации, прежде чем он будет работать правильно).Удачи!
источник
Вы можете изменить размер файловой системы с помощью GParted.
Создайте тестовое изображение:
Я не использую resize2fs, потому что он изменяет размер файла, а не оставляет свободное место.
Бесплатно 1 МБ в начале.
Наконец, создайте таблицу разделов.
Установите для первого сектора значение 2048 (2048 секторов * 512 В / сектор = 1 МБ), последний сектор по умолчанию (т. Е. Конец изображения).
источник
Я лично предпочитаю добавлять, используя
dd
.Я предполагаю, что 512-байтовые сектора здесь. Там может быть случай для 2048-байтовых секторов, так что просто поменяйте местами числа и сделайте математику.
В каждом случае я использую тестовый файл 512 МБ, например:
dd if=/dev/zero of=testfs.img bs=512 count=1M mkfs.ext4 testfs.img
MBR
Составление изображения
Я лично предпочитаю добавить первый MB (2048 секторов) в его начало:
dd if=testfs.img skip=2048 bs=512 of=full.img
Наконец, запустив fdisk, чтобы создать таблицу разделов (или скопировать ее самостоятельно), я создал 1 раздел, используя значения по умолчанию.
Проверка
Чтобы проверить, создайте разделы цикла и автоопределите:
sudo losetup -fP full.img
И запустить
file
на результирующем многораздельном кольцевом устройстве:sudo file -s /dev/loop2p1 /dev/loop2p1: Linux rev 1.0 ext4 filesystem data, UUID=ae2945fd-54b5-486f-8dd0-9b18d6ae01b4 (extents) (large files) (huge files)
GPT
Составление изображения
Лично я предпочитаю добавить первый МБ (2048 секторов, поскольку gdisk по умолчанию будет указывать это число, так как он выровнен на 1 МБ) к его началу для начала MBR и 34 сектора к его концу (или 2048 для полного МБ) для конца GPT (конечный сектор может отличаться). Пропуск конечного GPT может привести к потере данных:
dd if=testfs.img skip=2048 bs=512 of=full.img dd if=/dev/zero seek=1050624 bs=512 of=full.img count=34
Наконец, запустив gdisk, чтобы создать таблицу разделов (или скопировать ее самостоятельно), я создал 1 раздел, используя значения по умолчанию.
Проверка
Чтобы проверить, создайте разделы цикла и автоопределите:
sudo losetup -fP full.img
И запустить
file
на результирующем многораздельном кольцевом устройстве:sudo file -s /dev/loop2p1 /dev/loop2p1: Linux rev 1.0 ext4 filesystem data, UUID=ae2945fd-54b5-486f-8dd0-9b18d6ae01b4 (extents) (large files) (huge files)
Этот метод гарантирует отсутствие угадывания, изменения размера или выравнивания вручную.источник
sudo file -s /dev/loop11p1
я получил/dev/loop11p1: data
. Который ранее был файловой системой ext4. И в результате full.img меньше. Я думаю, что у вас есть обратное решение.seek=2048
в виду в этой команде dd if = testfs.img skip = 2048 bs = 512 of = full.img