Bir Linux canlı sistemden VHD disk görüntüsü nasıl oluşturulur?


29

Bir kez daha, SuperUser'daki uzmanlara başvurmam gerekiyor, çünkü diğer kaynaklarım (çoğunlukla Google ;-)) çok yardımcı olmadı ...

Bu yüzden temelde, arşivlenecek / erişilebilecek / hatta sanal bir makineye monte edilecek bir fiziksel diskin VHD görüntüsünü oluşturmak istiyorum. Şimdi, bunun web üzerinde nasıl yapılacağına dair düzinelerce makale ve öğretici var, ancak elde etmek istediğim koşulları tam olarak karşılayan hiçbiri:

  • Hedef dosyanın bir VHD görüntüsü olmasını istiyorum , çünkü Windows 7 yerel olarak bağlayabilir, hatta ağ üzerinden ve diğer birçok program tarafından da kullanılabilir (VirtualBox, ...)
  • Görüntülemeye çalıştığım disk bir Windows XP yüklemesi içeriyor, bu nedenle teoride disk2vhdyardımcı programı kullanabilirim , ancak Windows XP yüklemesinin başlatılmasını gerektirmeyen bir çözüm bulmak istiyorum (örn. Diski salt okunur halde tutmak) )
  • Böylece bir tür canlı sistem içeren (bir USB stic veya ağdan çalışan) bir çözüm arıyordum.

Bununla birlikte, karşılaştığım tüm çözümler linux altında disk2vhdbu ddkomutu kullanır ya da kullanır , bu da diskin tam bir kopyasını yapar (yani boş bloklar bile) ve bir VHD dosyası vermez. Linux altında doğrudan VHD dosyası oluşturabilecek bir araç / program var mı? Veya boş bloklar için yer ayırmadan, dd kullanılarak oluşturulan ham disk görüntüsünü bir VHD dosyasına dönüştürmek mümkün mü? Nasıl devam edersiniz?

Her zaman olduğu gibi, herhangi bir öneri veya yorum çok takdir edilmektedir!


BSD'ler, diğer formatlar arasında vhd görüntüsü oluşturabilen mkimg adlı bir araca sahiptir.
julian

Yanıtlar:


30

Gelecekte referans olması için, işte karşılaştığım çeşitli sorunlar veya tuzaklar hakkında birkaç yorumla nihayet ilerlediğim:

1. Makineyi Linux canlı sistemiyle önyükleyin

İlk adım, diski içeren makineyi Linux canlı sistemi kullanarak önyüklemekti.

NOT: İlk fikrim bir Ubuntu Live USB disk kullanmaktı, ancak makine USB'den önyüklemeyi desteklemedi, bu yüzden eski bir Knoppix live CD'sini kullanmayı daha kolay buldum .

2. Diski kullanarak ddgörüntüyü yerleştirin ve verilerissh

Sonra tüm disk içeriğini yerel sunucumdaki bir dosya görüntüsüne kopyalayıp ddverileri kullanarak kopyaladım ssh:

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

Burada birkaç yorum: Bu yöntem tüm disk içeriğini okuyacak, bu yüzden çok uzun sürebilir (80Gb'lik bir disk için 5 saatimi aldı). Darboğaz ağ değil, ama gerçekten disk okuma hızı. Kopyayı başlatmadan önce, diskin ve anakartın mümkün olan en yüksek hızda çalıştığından emin olmak için BIOS / disk / sistem parametrelerini kontrol etmenizi öneririm (bu, komut kullanılarak hdparm -ive bir test yapılarak kontrol edilebilir hdparm -Tt /dev/hdX).

NOT: ddişlemin ilerlemesini vermez, ancak USR1 sinyalini ddPID işlemine başka bir terminalden göndererek bunu yapmaya zorlayabiliriz :

$ kill -USR1 PIDofdd

3. Kullanılmayan alanı geri kazanın

Bu noktada, kaynak makineye artık ihtiyaç duyulmaz ve sadece hedef sunucu üzerinde çalışacağız (Linux da çalıştıran). VirtualBox, ham disk görüntüsünü VHD formatına dönüştürmek için kullanılacaktır, ancak bunu yapmadan önce kullanılmayan blokları sıfırlayabiliriz, böylece VirtualBox nihai dosyada onlar için yer ayırmaz.

Bunu yapmak için, görüntüleri bir geridöngü aygıtı olarak monte ettim:

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

NOT: Disk görüntüsü içindeki bölümün başlangıcını gösteren ofset partedgörüntü dosyası kullanılarak elde edilebilir :

$ 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

NOT2: Varsayılan Linux çekirdeği NTFS sürücüsü salt okunur erişim sağlar, bu nedenle kullanıcı ntfs-3gsürücüsünü kurmak ve kullanmak ya da diske yazmak bir hataya neden olacaktır!

4. VBoxManage kullanarak VHD görüntüsünü oluşturun.

Bu noktada, ham görüntüyü bir VHD dosyasına dönüştürmek için VirtualBox yardımcı programlarını kullanabiliriz:

VBoxManage convertfromraw myfile.dd myfile.vhd --format VHD

Kullandığınız vhd görüntü montaj mümkün olmalıdır vdfuseveya qemu-nbd(daha fazla bilgi: ya bir .img dosyalarını dönüştürerek askubuntu.com/questions/19430/... )
Francesco

1
Yavaş bir makinede, ssh şifrelemesi bir darboğaz olabilir. Şifrelemeye ihtiyacınız yoksa bunun yerine netcat (man nc) kullanmayı düşünün.
Jeremy

2
Sıfır dosyasını oluşturmadan önce takılan diske cd yazmayı unuttun: mount -o loop, rw, offset = 26608813056 -t ntfs-3g / mnt/mydisk/myfile.dd / mnt / tmp_mnt; cd / mnt / tmp_mnt; cat / dev / zero> sıfır. dosya; rm sıfır. dosya; Ayrıca anlık ilerleme göstermek için gd yerine pv kullanabilirsiniz.
Smeterlink

1
bs=4MSüreci önemli ölçüde hızlandırmak için, muhtemelen dd ile daha büyük bir blok boyutu kullanmalısınız .
Fritz,

13

OP ile aynı şeyi yapmaya çalışıyordum (bir Windows kurulumunu kurtarırken) ve bunun için yeni bir araç yaratıyordum ntfsclone2vhd.

O zaman basitçe böyle bir şey yaparsınız:

ntfsclone --save-image -o - /dev/sdXX | ntfsclone2vhd - /mnt/usb/output.vhd

1
Oyuna 3 yıl geç kaldı, ancak bu sayfa Google’ın alakalı anahtar kelimeler için en çok vurduğu bölüm, bu nedenle gelecekte bazı fakir ruhlara yardımcı olabilir.
Yirkha

2
BU ÇÖZÜMÜN TOPLANMASI GEREKENLER. Bugüne kadar makearadığım en kolay çözüm (bar , Linux kopyalarına sahip olmak zorunda ), aradığım saatlerce buldum. İnisiyatif Yirkha'yı almak için Bravo!
user66001

3

Bir yaklaşım birkaç kullanışlı teknolojiyi kullanmaktır: VirtualBox ve ntfsprogspaket.

VirtualBox'un son sürümleri, VHD sabit disk dosyalarını oluşturmanıza olanak sağlarken ntfsprogs, ntfscloneyardımcı programı sağlar. Adından da anlaşılacağı gibi, ntfscloneNTFS dosya sistemlerini klonlar ve kullanılmayan disk bloklarını atlayarak bunu dosya sistemi düzeyinde yaptığına inanıyorum.

Bu nedenle, başlamak için, VirtualBox'ta yeni bir VM oluşturun ve bunun için yeni, boş bir VHD dosya sürücüsü sağlayın. VHD sürücünün yalnızca, klonlamak istediğiniz fiziksel sürücüde kullanılan verilerin boyutu kadar büyük olması gerekir (aslında, biraz kıkırdama odasına izin vermek için biraz daha büyük hale getirin).

Daha sonra, ntfsprogspaketi içeren bir Linux canlı CD'si de bulun openssh-server. Bunun için System Rescue CD'sini seviyorum , ancak hemen hemen herhangi bir Debian veya Ubuntu tabanlı canlı CD de çalışmalı.

VirtualBox VM'yi Linux canlı CD'si ile önyükleyin ve sshdüzerinde uzaktan komutlar yürütebilmek için VM'den başlayın . Tercih ettiğiniz bölümleme aracını kullanarak boş VHD sürücüsünü uygun şekilde bölümleyin (eskileri severim fdiskama biraz eski okuldayım).

Linux canlı CD'sinin başka bir kopyasıyla, klonlamak istediğiniz fiziksel diski içeren makineyi önyükleyin. VirtualBox VM'ye ve bu makineye ağ üzerinden birbirine erişilebildiğini varsayıyorum. Bu makinede, aşağıdaki komutu çalıştırın (hepsi bir satırda):

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

nerede:

  • /dev/sdXX kopyalamak istediğiniz fiziksel sürücünün cihaz adı (yerel makinede) ve
  • /dev/sdYY VHD hedef sürücüsünün cihaz adıdır (VM'de).

Açıklama: ntfscloneBoru hattındaki ilk komut, kaynak NTFS dosya sisteminin bir görüntüsünü çıkarır ve ssh tüneli üzerinden gönderir, ikinci ntfsclonekomut ise görüntüyü alır ve VHD sürücüsüne geri yükler.

İşlem tamamlandığında, VHD dosyası, orijinal fiziksel diskin tam dosya klonunu içermelidir (işlemin erken kesilmesine neden olabilecek kötü sektörler gibi donanım hatalarını engeller).

Yapmak isteyebileceğiniz son bir şey chkdsk, klonlamanın herhangi bir sorun yaratmadığından emin olmak için VHD sürücüsünde bir Windows çalıştırmaktır (olmamalıydı, ama hey, bu şeyler hakkında biraz paranoyaklık yapıyorum).


Merhaba, önerdiğiniz çözüm için çok teşekkür ederiz! Sonunda, diskte yedekleme yapmak için birkaç bölüm bulunduğum ve yedekleme yapmak için kolayca makinedeki VirtualBox'ı kullanamadığım için başka bir yöntem kullandım (ayrıntılar için cevabımı inceleyin), ancak VirtualBox ve ssh kullanma öneriniz çok yararlı oldu!
Federico

1

(Bunun eski bir gönderi olduğunu biliyorum, ama belki bu en azından başkalarına yardım edebilir.)

Görüntüyü Linux altında oluşturabilmek için gerçekten ihtiyacınız var mı? Windows sabit disklerini VHD'ye yedeklemeye çalıştığınızı düşünüyorum. Linux dosya sistemlerinin bir VHD kabına alınabileceğini sanmıyorum.

Disk2vhd adlı ücretsiz bir SysInternals yardımcı programı , şu anda çalışan Windows XP veya daha yeni bir sistemin VHD'lerini oluşturacaktır. Bu, USB bağlantılı sürücüleri görüntülemek için de çalışmalıdır.


0

Ayrıca son zamanlarda canlı bir linux sistemini klonlamaya çalışıyorum.

Hala mükemmel çözümler yok. Deneyebileceğiniz 2 yol önerin:

(1) VMware vConverter (ücretsiz)

Hedef olarak vsphere hypervisor'ı (ücretsiz) yüklemeniz gerekir.

Bunu günler önce yaptım, başarılı olmak için hiçbir şans yok. Sanırım bir VirtualBox'a vSphere kurdum.

Buraya bakın: http://xrubenx.blogspot.com.au/2010/01/vmware-converter-standalone.html

(2) Bunu kullanın http://www.r1soft.com/tools/linux-hot-copy/

Bu haftasonu R1Soft hotcopy'yi deneyeceğim.


Bu nedenle hot- copy'i
denemeyeceğim

0

Ayrıca pencereleri olan bir canlı cd de kullanabilirsiniz. Microsoft'tan resmi değil, çalışıyor. Bir cd veya usb sürücüye koyabilirsiniz.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.