Как создать образ диска VHD из живой системы Linux?

29

Еще раз, я должен прибегнуть к экспертам здесь в SuperUser, так как мои другие источники (в основном Google ;-)) не оказались очень полезными ...

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

  • Мне бы хотелось, чтобы конечный файл представлял собой образ VHD , поскольку Windows 7 может монтировать его непосредственно, даже по сети, и многие другие программы могут его использовать (VirtualBox, ...)
  • Диск, на котором я пытаюсь создать образ, содержит установку Windows XP, поэтому теоретически я мог бы использовать эту disk2vhdутилиту, но я бы хотел найти решение, которое не требует загрузки при установке Windows XP (то есть оставить диск доступным только для чтения )
  • Поэтому я искал решение, включающее какую-то живую систему (работающую с USB-накопителя или по сети).

Однако все решения, с которыми я сталкивался, либо используют, disk2vhdлибо используют ddкоманду под linux, которая делает полную копию диска (то есть даже пустые блоки) и не выводит файл VHD. Есть ли инструмент / программа под Linux, которая может напрямую создавать VHD-файл? Или возможно преобразовать необработанный образ диска, созданный с помощью dd, в файл VHD, не выделяя место для пустых блоков? Как бы вы поступили?

Как всегда, любой совет или комментарий высоко ценится!

Federico
источник
BSD имеют инструмент под названием mkimg, который может создавать образ VHD среди других форматов.
Джулиан

Ответы:

30

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

1. Загрузите машину с работающей системой Linux

Первым шагом была загрузка компьютера, содержащего диск в образ, с использованием живой системы Linux.

ПРИМЕЧАНИЕ. Моей первой идеей было использование USB-диска Ubuntu Live, но машина не поддерживала загрузку с USB, поэтому мне было проще использовать старый Knoppix live CD .

2. Создайте образ диска ddи передайте данные через негоssh

Затем я скопировал все содержимое диска в образ файла на локальном сервере, используя ddи передавая данные через ssh:

$ dd if = / dev / hdX bs = 4k conv = noerror, sync | ssh -c blowfish myuser @ myserver 'dd of = myfile.dd'

Несколько комментариев здесь: этот метод будет читать все содержимое диска, поэтому это может занять очень много времени (мне потребовалось 5 часов для диска 80 Гб). Узким местом является не сеть, а скорость чтения с диска. Перед запуском копии я советую проверить параметры BIOS / диска / системы, чтобы убедиться, что диск и материнская плата работают с максимально возможной скоростью (это можно проверить с помощью команды hdparm -iи с помощью теста hdparm -Tt /dev/hdX).

ПРИМЕЧАНИЕ: ddне выводит ход операции, но мы можем заставить его сделать это, отправив сигнал USR1 в ddPID процесса с другого терминала:

$ kill -USR1 PIDofdd

3. Восстановите неиспользуемое пространство

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

Для этого я смонтировал изображения как устройство с обратной связью:

$ mount -o loop,rw,offset=26608813056 -t ntfs-3g /mnt/mydisk/myfile.dd /mnt/tmp_mnt
$ cat /dev/zero > zero.file
$ rm zero.file

ПРИМЕЧАНИЕ. Смещение, обозначающее начало раздела в образе диска, можно получить с помощью partedфайла образа:

$ parted /mnt/mydisk/myfile.dd
(parted) unit
Unit?  [compact]? B
(parted) print
Model:  (file)
Disk /mnt/mydisk/myfile.dd: 80026361856B
Sector size (logical/physical): 512B/512B
Partition Table: msdos

Number  Start         End           Size          Type      File system  Flags
 1      32256B        21936821759B  21936789504B  primary   ntfs         boot
 2      21936821760B  80023749119B  58086927360B  extended               lba
 5      26608813056B  80023749119B  53414936064B  logical   ntfs

ПРИМЕЧАНИЕ 2. Драйвер NTFS для ядра Linux по умолчанию обеспечивает доступ только для чтения, поэтому необходимо установить и использовать ntfs-3gдрайвер пространства пользователя, иначе запись на диск вызовет ошибку!

4. Создайте образ VHD с помощью VBoxManage

На этом этапе мы можем использовать утилиты VirtualBox для преобразования необработанного изображения в файл VHD:

VBoxManage convertfromraw myfile.dd myfile.vhd --format VHD
Federico
источник
Вы должны быть в состоянии смонтировать образ VHD, используя vdfuseили qemu-nbdпреобразуя его в файлы .img (подробнее: askubuntu.com/questions/19430/… )
Francesco
1
На медленной машине шифрование ssh может быть узким местом. Попробуйте вместо этого использовать netcat (man nc), если вам не нужно шифрование.
Джереми
2
Вы забыли вставить компакт-диск в смонтированный диск перед созданием нулевого файла: mount -o loop, rw, offset = 26608813056 -t ntfs-3g /mnt/mydisk/myfile.dd / mnt / tmp_mnt; cd / mnt / tmp_mnt; cat / dev / zero> zero.file; rm zero.file; Также вы можете использовать PV вместо DD, чтобы показать мгновенный прогресс.
Smeterlink
1
Вы, вероятно, должны использовать больший размер блока с dd, например, bs=4Mчтобы значительно ускорить процесс.
Фриц
13

Я пытался сделать то же самое, что и OP (спасая установку Windows), и закончил тем, что создал для нее новый инструмент ntfsclone2vhd.

Вы бы тогда просто сделали что-то вроде этого:

ntfsclone --save-image -o - /dev/sdXX | ntfsclone2vhd - /mnt/usb/output.vhd
Yirkha
источник
1
3 года до начала игры, но эта страница - самый популярный в Google по релевантным ключевым словам, так что в будущем она может помочь некоторым беднягам.
Йирха
2
ЭТО РЕШЕНИЕ НЕОБХОДИМО ГОЛОСОВАТЬ НА ТОП. Это, безусловно, самое простое решение (без makeкопий Linux), которое я нашел за много часов поиска. Браво за инициативу Йиркха!
user66001
3

Одним из подходов является использование нескольких удобных технологий: VirtualBox и ntfsprogsпакета.

Последние версии VirtualBox позволяют создавать файлы жесткого диска VHD, в то время как ntfsprogsпредоставляет ntfscloneутилиту. Как следует из названия, ntfscloneклонирует файловые системы NTFS, и я считаю, что это происходит на уровне файловой системы, пропуская неиспользуемые блоки диска.

Итак, для начала создайте новую виртуальную машину в VirtualBox и предоставьте для нее новый пустой диск VHD-файла. Диск VHD должен иметь размер, равный размеру данных, используемых на физическом диске, который вы хотите клонировать (ну, на самом деле, сделайте его немного больше, чтобы обеспечить некоторое пространство для маневра).

Затем найдите Linux live CD, который содержит ntfsprogsпакет, а также openssh-server. Мне нравится System Rescue CD для этого, но почти все живые CD на основе Debian или Ubuntu также должны работать.

Загрузите виртуальную машину VirtualBox с живого компакт-диска Linux и запустите ее sshdна виртуальной машине, чтобы вы могли выполнять команды на ней удаленно. Разделите пустой VHD-диск по назначению, используя любой инструмент для создания разделов, который вы предпочитаете (мне нравится старый fdisk, но я немного староват).

Загрузите компьютер, содержащий физический диск, который вы хотите клонировать, с другой копией живого компакт-диска Linux. Я предполагаю, что виртуальная машина VirtualBox и эта машина доступны друг другу по сети. На этом компьютере выполните следующую команду (все в одной строке):

ntfsclone --save-image -o - /dev/sdXX |
    ssh root@VirtualBox-VM 'ntfsclone --restore-image --overwrite /dev/sdYY -'

где:

  • /dev/sdXX является именем устройства (на локальной машине) физического диска, который вы хотите клонировать, и
  • /dev/sdYY это имя устройства (в виртуальной машине) целевого диска VHD.

Объяснение: Первая ntfscloneкоманда в конвейере извлекает образ исходной файловой системы NTFS и отправляет его через туннель ssh, а вторая ntfscloneкоманда получает образ и восстанавливает его на диск VHD.

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

Последнее, что вы можете захотеть сделать, - это запустить Windows chkdskна VHD-диске, просто чтобы убедиться, что клонирование не принесло никаких проблем (этого не должно быть, но эй, я немного параноидален в этих вещах).

Стивен Понедельник
источник
Привет, большое спасибо за предложенное решение! В конце концов, я использовал другой метод, поскольку у меня было несколько разделов на диске для резервного копирования, и я не мог легко использовать VirtualBox на компьютере для резервного копирования (см. Мой ответ для подробной информации), но ваше предложение использовать VirtualBox и ssh оказалось очень полезным!
Федерико
1

(Я знаю, что это старый пост, но, возможно, это поможет другим.)

Вы действительно должны иметь возможность создавать образ под Linux? Я думаю, что вы пытаетесь сделать резервную копию жестких дисков Windows на VHD. Я не думаю, что файловые системы Linux могут быть заключены в контейнер VHD.

Бесплатная утилита SysInternals под названием Disk2vhd создаст виртуальные жесткие диски работающей в настоящее время Windows XP или более новой системы. Это также должно работать для работы с USB-накопителями.

Бернард
источник
0

Я также пытаюсь клонировать живую систему Linux в последнее время.

По-прежнему нет идеальных решений. Предложите 2 способа, которыми вы можете попробовать:

(1) VMware vConverter (бесплатно)

Вам нужно установить гипервизор vsphere (бесплатно) в качестве места назначения.

Я сделал это несколько дней назад, не повезло, чтобы добиться успеха. Похоже, я установил vSphere на VirtualBox.

Ссылка здесь: http://xrubenx.blogspot.com.au/2010/01/vmware-converter-standalone.html

(2) Используйте этот http://www.r1soft.com/tools/linux-hot-copy/

Я попробую горячую копию R1Soft в эти выходные.

NelsonT
источник
Я не буду пробовать горячее копирование из-за этого, wiki.r1soft.com/display/LTR1D/hcp-setup
NelsonT
0

Вы также можете использовать Live CD с Windows. Это не официальный от Microsoft, но работает. Вы можете поставить его на CD или USB-накопитель.

Smeterlink
источник