Як створити образ диска VHD з живої системи Linux?


29

Ще раз мені доводиться звертатися до експертів у SuperUser, оскільки інші мої джерела (в основному Google ;-)) не виявилися дуже корисними ...

Таким чином, я хотів би створити VHD-зображення фізичного диска, який потрібно архівувати / отримувати доступ / може бути навіть встановлений у віртуальній машині. Зараз є десятки статей та навчальних посібників про те, як це зробити в Інтернеті, але жодна, яка не відповідає саме умовам, які я хотів би досягти:

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

Однак усі рішення, на які я стикався, використовують disk2vhdабо використовують ddкоманду під Linux, яка робить повну копію диска (тобто навіть порожні блоки) і не виводить файл VHD. Чи є інструмент / програма під Linux, який може безпосередньо створити VHD-файл? Або можливо перетворити необроблений образ диска, створений за допомогою dd, у файл VHD, не виділяючи місця для порожніх блоків? Як би ви діяли?

Як завжди, будь-яка порада чи коментар високо цінується !!


У BSD є інструмент під назвою mkimg, який може створювати зображення vhd серед інших форматів.
липень

Відповіді:


30

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

1. Завантажте машину за допомогою живої системи Linux

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

ПРИМІТКА. Першою моєю ідеєю було використовувати USB-диск Ubuntu Live, але машина не підтримувала завантаження з USB, тому мені було легше використовувати старий живий компакт-диск Knoppix .

2. Зобразіть диск, використовуючи ddта передайте дані наскрізьssh

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

$ dd, якщо = / dev / hdX bs = 4k conv = noerror, синхронізація | ssh -c міхур myuser @ myserver 'dd of = myfile.dd'

Кілька коментарів тут: цей метод прочитає весь вміст диска, тому він може зайняти дуже багато часу (на диск 80 Гбіт мені знадобилося 5 годин). Вузьким місцем не є мережа, а дійсно швидкість читання диска. Перш ніж запустити копію, я раджу перевірити параметри 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

ви повинні мати змогу монтувати зображення 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

1
На гру запізнилися на 3 роки, але ця сторінка є головним хітом Google для відповідних ключових слів, тому вона може все-таки допомогти бідним душам у майбутньому.
Yirkha

2
ЦЕ РІШЕННЯ НЕОБХІДНО БУДЬ ГОЛОВНЕ ДО ТОПУ. Це, безумовно, найпростіше рішення (смуга з makeкопіями Linux), яку я знайшов за багато годин пошуку. Браво за ініціативу Ірха!
user66001

3

Один із підходів полягає у використанні декількох зручних технологій: VirtualBox та ntfsprogsпакета.

Останні версії VirtualBox дозволяють створювати VHD-файли на жорсткому диску, ntfsprogsнадаючи ntfscloneутиліту. Як випливає з назви, ntfscloneклонує файлові системи NTFS, і я вважаю, що це робиться на рівні файлової системи, пропускаючи невикористані дискові блоки.

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

Далі знайдіть живий компакт-диск Linux, який містить ntfsprogsпакет, а також openssh-server. Мені подобається компакт-диск System Rescue для цього, але майже будь-який живий компакт-диск на базі Debian або Ubuntu також повинен працювати.

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

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

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

де:

  • /dev/sdXX - це ім'я пристрою (на локальній машині) фізичного диска, який потрібно клонувати, і
  • /dev/sdYY - ім'я пристрою (у VM) накопичувача VHD.

Пояснення: Перша ntfscloneкоманда в конвеєрі витягує зображення вихідної файлової системи NTFS і відправляє його через тунель ssh, тоді як друга ntfscloneкоманда отримує зображення і відновлює його на VHD-накопичувач.

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

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


Привіт, дуже дякую за запропоноване рішення! Зрештою, я застосував інший метод, оскільки у мене було декілька розділів на диску для резервного копіювання, і я не міг легко використовувати VirtualBox на машині для резервного копіювання (детальну інформацію див. У моїй відповіді), але ваша пропозиція використовувати VirtualBox та ssh виявилася дуже корисною!
Федеріко

1

(Я знаю, що це стара публікація, але, можливо, це допоможе принаймні іншим.)

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

Безкоштовна утиліта SysInternals під назвою Disk2vhd створить VHD дистрибутива 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 у ці вихідні.


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

0

Ви також можете використовувати живий компакт-диск з Windows. Це не офіційно від Microsoft, але працює. Ви можете помістити його на компакт-диск або usb-накопичувач.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.