كيفية تحويل صورة القرص الخام المسطحة إلى vmdk لـ virtualbox أو vmplayer؟

StackOverflow https://stackoverflow.com/questions/454899

سؤال

لدي بعض الصور القديمة لأنظمة ملفات Linux القديمة بتنسيق ملف ثابت.يمكن استخدامها من قبل بوش, ، لكني بحاجة لتشغيلها الصندوق الافتراضي.لا يمكن لـ Virtual Box استخدام الصور بهذا التنسيق، لذا أحتاج إلى تحويل هذه الصور من ملف ثابت إلى تنسيق ملف ‎.vmdk.هل هناك أي طريقة للقيام بذلك؟

هل كانت مفيدة؟

المحلول

وapt-get install qemu (تثبيت كيمو على ديبيان / أوبونتو)

وبعد ذلك قم بتشغيل الأمر التالي: qemu-img convert -O vmdk imagefile.dd vmdkname.vmdk

وأفترض صورة قرص مسطحة هي صورة على غرار د د. عملية تحويل أيضا يعالج العديد من الأشكال الأخرى.

نصائح أخرى

ومنذ السؤال يذكر فيرتثلبوإكس، وهذا واحد يعمل حاليا:

VBoxManage convertfromraw imagefile.dd vmdkname.vmdk --format VMDK

وتشغيله بدون وسائط لبعض التفاصيل المثيرة للاهتمام (لا سيما العلم --variant):

VBoxManage convertfromraw

في النوافذ واستخدام https://github.com/Zapotek/raw2vmdk لتحويل ملفات الخام التي تم إنشاؤها بواسطة د د أو winhex إلى VMDK. v0.1.3.2 raw2vmdk لديه علة - مرة واحدة يتم إنشاء ملف VMDK، تحرير الملف VMDK وإصلاح المسار إلى ملف الخام (في حالتي بدلا من D: \ الحرارة \ flash_16gb.raw (تم إنشاؤه بواسطة winhex) الذي تم إنشاؤه كان مسار D: Tempflash_16gb.raw). ثم فتحه في فمور الإصدار الجهاز الظاهري 6،5-7 (5.1 تم رفض إرفاق طوة VMDK). howgh!

للإجابة على TJJ: ولكن هل من الممكن أيضًا القيام بذلك دون نسخ الملف بأكمله؟ لذا، فقط لإنشاء ملف تعريف vmdk إضافي بطريقة أو بأخرى، يشير إلى صورة dd الأولية.

نعم, ، انه ممكن.إليك كيفية استخدام صورة قرص مسطحة في VirtualBox:

أولاً، تقوم بإنشاء صورة باستخدام dd بالطريقة المعتادة:

dd bs=512 count=60000 if=/dev/zero of=usbdrv.img

ثم يمكنك إنشاء ملف لـ VirtualBox يشير إلى هذه الصورة:

VBoxManage internalcommands createrawvmdk -filename "usbdrv.vmdk" -rawdisk "usbdrv.img"

يمكنك استخدام هذه الصورة في VirtualBox كما هي، ولكن اعتمادًا على نظام التشغيل الضيف، قد لا تكون مرئية على الفور.على سبيل المثال، قمت بتجربة استخدام هذه الطريقة مع نظام التشغيل Windows Guest وكان علي القيام بما يلي لمنحه حرف محرك أقراص:

  • انتقل إلى لوحة التحكم.
  • انتقل إلى الأدوات الإدارية.
  • انتقل إلى إدارة الكمبيوتر.
  • انتقل إلى Storage\Disk Management في اللوحة الجانبية اليسرى.
  • سترى القرص الخاص بك هنا.قم بإنشاء قسم عليه وتهيئته.استخدم FAT للكميات الصغيرة، أو FAT32 أو NTFS للكميات الكبيرة.

قد ترغب في الوصول إلى ملفاتك على Linux.قم أولاً بإلغاء تحميله من نظام التشغيل الضيف للتأكد وإزالته من الجهاز الظاهري.نحتاج الآن إلى إنشاء جهاز افتراضي يشير إلى القسم.

sfdisk -d usbdrv.img

إجابة:

label: dos
label-id: 0xd367a714
device: usbdrv.img
unit: sectors

usbdrv.img1 : start=          63, size=       48132, type=4

يحيط علما بموضع بداية القسم:63.في الأمر أدناه استخدمت حلقة 4 لأنه كان أول جهاز حلقة متاح في حالتي.

sudo losetup -o $((63*512)) loop4 usbdrv.img
mkdir usbdrv
sudo mount /dev/loop4 usbdrv
ls usbdrv -l

إجابة:

total 0
-rwxr-xr-x. 1 root root 0 Apr  5 17:13 'Test file.txt'

ياي!

وربما عليك أن تحاول استخدام ستارويند V2V تحويل، يمكنك الحصول عليه من هنا - HTTP: //www.starwindsoftware كوم / تحويل . كما أنها تدعم تنسيق القرص IMG ويقوم القطاع عن طريق تحويل القطاع بين IMG، VMDK أو VHD من وإلى أي منها دون إجراء أية تغييرات على مصدر الصورة. هذه الأداة المجانية:)

ألهمت إجابة krosenvold النص التالي الذي يقوم بما يلي:

  • الحصول على تفريغ dd عبر ssh من خادم بعيد (كملف gz)
  • بفك التفريغ
  • تحويله إلى إم وير

البرنامج النصي قابل لإعادة التشغيل ويتحقق من وجود الملفات الوسيطة.ويستخدم أيضًا pv و qemu-img -p لإظهار التقدم المحرز في كل خطوة.

في بيئتي 2 x Ubuntu 12.04 LTS تم اتباع الخطوات:

  • 3 ساعات للحصول على تفريغ قرص بسعة 47 جيجابايت من قسم بسعة 60 جيجابايت
  • 20 دقيقة لتفريغ ملف dd بحجم 60 جيجابايت
  • 45 دقيقة لإنشاء ملف vmware
#!/bin/bash
# get a dd disk dump and convert it to vmware
#  see http://stackoverflow.com/questions/454899/how-to-convert-flat-raw-disk-image-to-vmdk-for-virtualbox-or-vmplayer
#  Author: wf  2014-10-1919

#
# get a dd dump from the given host's given disk and create a compressed
#   image at the given target 
#
#  1: host e.g. somehost.somedomain
#  2: disk e.g. sda
#  3: target e.g. image.gz
#
# http://unix.stackexchange.com/questions/132797/how-to-use-ssh-to-make-a-dd-copy-of-disk-a-from-host-b-and-save-on-disk-b
getdump() {
  local l_host="$1"
  local l_disk="$2"
  local l_target="$3"
  echo "getting disk dump of $l_disk from $l_host"
  ssh $l_host sudo fdisk -l  | egrep "^/dev/$l_disk"
  if [ $? -ne 0 ]
  then
    echo "device $l_disk does not exist on host $l_host" 1>&2
    exit 1
  else
    if [ ! -f $l_target ]
    then
      ssh $l_host "sudo dd if=/dev/$disk bs=1M | gzip -1 -" | pv | dd of=$l_target
    else
      echo "$l_target already exists"
    fi
  fi
}

#
# optionally install command from package if it is not available yet
# 1: command
# 2: package
#
opt_install() {
  l_command="$1"
  l_package="$2"
  echo "checking that $l_command from package $l_package  is installed ..."
  which $l_command
  if [ $? -ne 0 ]
  then
    echo "installing $l_package to make $l_command available ..."
    sudo apt-get install $l_package 
  fi
}

#
# convert the given image to vmware
#  1: the dd dump image
#  2: the vmware image file to convert to
#
vmware_convert() {
  local l_ddimage="$1"
  local l_vmwareimage="$2"
  echo "converting dd image $l_image to vmware $l_vmwareimage"
  #  convert to VMware disk format showing progess
  # see http://manpages.ubuntu.com/manpages/precise/man1/qemu-img.1.html
  qemu-img convert -p -O vmdk "$l_ddimage" "$l_vmwareimage"
}

#
# show usage
#
usage() {
  echo "usage: $0 host device"
  echo "      host: the host to get the disk dump from e.g. frodo.lotr.org"  
  echo "            you need ssh and sudo privileges on that host"
  echo "
  echo "    device: the disk to dump from e.g. sda"
  echo ""
  echo "  examples:
  echo "       $0 frodo.lotr.org sda"
  echo "       $0 gandalf.lotr.org sdb"
  echo ""
  echo "  the needed packages pv and qemu-utils will be installed if not available"
  echo "  you need local sudo rights for this to work"
  exit 1
}

# check arguments
if [ $# -lt 2 ]
then
  usage
fi

# get the command line parameters
host="$1"
disk="$2"

# calculate the names of the image files
ts=`date "+%Y-%m-%d"`
# prefix of all images
#   .gz the zipped dd
#   .dd the disk dump file
#   .vmware - the vmware disk file
image="${host}_${disk}_image_$ts"

echo "$0 $host/$disk ->  $image"

# first check/install necessary packages
opt_install qemu-img qemu-utils
opt_install pv pv

# check if dd files was already loaded
#  we don't want to start this tedious process twice if avoidable
if [ ! -f $image.gz ]
then
  getdump $host $disk $image.gz
else
  echo "$image.gz already downloaded"
fi

# check if the dd file was already uncompressed
# we don't want to start this tedious process twice if avoidable
if [ ! -f $image.dd ]
then
  echo "uncompressing $image.gz"
  zcat $image.gz | pv -cN zcat > $image.dd
else
  echo "image $image.dd already uncompressed"
fi
# check if the vmdk file was already converted
# we don't want to start this tedious process twice if avoidable
if [ ! -f $image.vmdk ]
then
  vmware_convert $image.dd $image.vmdk
else
  echo "vmware image $image.vmdk already converted"
fi

وفقط لإعطائك خيار آخر، هل يمكن استخدام https://sourceforge.net/projects/dd2vmdk / كذلك. dd2vmdk هو * برنامج يستند إلى لا شىء التي تسمح لك لتحميل الصور القرص الخام (تم إنشاؤه بواسطة د د، dcfldd، dc3dd، فتك تصوير، الخ) عن طريق أخذ صورة الخام، وتحليل سجل التمهيد الرئيسي (قطاع البدني 0)، والحصول محددة المعلومات التي يتم تحتاج إلى إنشاء ملف VMDK.

وشخصيا، المنظمة البحرية الدولية كيمو وأدوات raw2vmdk وZapotek هم أفضل الخيارات الشاملة لتحويل دد لvmdks.

والإفصاح: أنا صاحب هذا المشروع

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top