من Hyper-V إلى VMware والعكس: تحويل الأقراص الافتراضية



مرحبا يا هبر!

من وقت لآخر ، أسمع من المهندسين الممارسين شيئًا غريبًا: تعد VMDK و VHD و VHDX تنسيقات مختلفة تمامًا للقرص الظاهري ، ويتم إغلاقها تقريبًا ، كما أن التحويل من واحدة إلى أخرى يعد عملية طويلة ومؤلمة. اليوم سأوضح أن هذا ليس كذلك ، سأكتشف مدى ارتباط هذه التنسيقات ببعضها البعض وكيفية إجراء تحويل سريع عند الترحيل من Hyper-V إلى VMware والعكس.

قليلا من الناحية النظرية. من وجهة نظر الخصائص ، تنقسم الأقراص الافتراضية إلى نوعين:

  • رقيقة (القرص الحيوي) و
  • سميكة (القرص الثابت). كل شيء آخر - الفرق ، سميكة كسول صفر ركزت - فقط الاختلافات حول هذا الموضوع.

لن أتناول هذا بالتفصيل. لا يمكنني إلا أن أقول إننا سنتحدث عن الأقراص السميكة.

تنسيقات القرص


RAW - صورة "خام" لأي محرك أقراص. هذه حاوية عادية لا تحتوي على أي رؤوس وتذييلات محددة وتمثل صورة القرص "كما هي". إذا فتحنا هذه الصورة باستخدام محرر HEX ، فسوف نرى على الفور رؤوس GPT / MBR و / أو نظام الملفات. يتم الحصول على نفس الصورة الدقيقة من خلال الأمر dd على Linux. الخام في هذا الصدد صادق تماما معنا.


بداية ملف RAW.


نهاية ملف RAW.

VMDK. VMware ESXi هو RAW عادي ، حيث يتم وصف هندسة القرص في ملف واصف نص عادي (واصف). إنه اسمه الذي نراه في vSphere Console عندما نقوم بتوصيل قرص افتراضي بجهاز ظاهري أو تصفح محتويات الدليل على Datastore. برنامج VMware ESXi لا يفعل شيئًا مع الصورة. تماما. يقع القرص على نفسه ويتوسع حسب الحاجة. في أفضل تقاليد VMware ، يكون تنسيق الواصف بسيطًا جدًا:

# Disk DescriptorFile version=1 encoding="UTF-8" CID=fffffffe parentCID=ffffffff isNativeSnapshot="no" createType="vmfs"  # Extent description RW 15122560 VMFS "disk-example-flat.vmdk"  # The Disk Data Base #DDB ddb.adapterType = "lsilogic" ddb.geometry.cylinders = "941" ddb.geometry.heads = "255" ddb.geometry.sectors = "63" ddb.longContentID = "4f5dc83d0a5270bee54e2d85fffffffe" ddb.uuid = "60 00 C2 93 b4 38 ed dd-a3 85 88 48 68 40 2f c0" ddb.virtualHWVersion = "13" 

وهي ليست بسيطة فحسب ، ولكنها أيضًا عملية: فهي كافية لتدوين ملاحظات في ملف واصف لتوسيع القرص الظاهري ليشمل أي قيم مدعومة. يتيح لك ذلك ملء الأقراص بالأصفار أو وضع علامة عليها رفيعة ، دون الحاجة إلى الاحتفاظ بمعلومات الشكل الهندسي في رؤوس الأقراص.

فيما يلي بعض القيم القياسية لجميع أقسام الواصف:

قسم
معلمة
وصف
قيمة
رأس (# القرص DescriptorFile)
نص
يحدد رقم إصدار الواصف. عادة لا يتغير.
1 (افتراضي)
CID
معرف المحتوى معرف قرص 32 بت عشوائي يشارك في بناء شجرة لقطة. هو ParentCID لأقراص دلتا التابعة.
قيمة عشوائية 32 بت يتم إنشاؤها في وقت الإنشاء.
parentCID
إدارة البحث الجنائي من محرك الأقراص الأصل. إذا لم يكن هناك قرص أصل ، فسيتم تعيين علامة CID_NOPARENT (ffffffff).
Ffffffff (CID_NOPARENT)
إدارة البحث الجنائي من محرك الأقراص الأصل.
createType
مؤشر إلى نوع القرص الموصوف في الواصف (قد يكون قرصًا فعليًا ، وأقراصًا تفاضلية ، وحتى صفيفًا من أقراص VMDK). بالنسبة إلى ESXi ، تكون مجموعة الخصائص محدودة.
بالنسبة إلى ESXi ، vmfs (في حالة قرص افتراضي) أو vmfsRawDeviceMap و vmfsPassthroughRawDeviceMap (في حالة RDM).
isNativeSnapshot
يتم وضع علامة على اللقطة التي سيتم تنفيذها: VMkernel أو وسيلة التخزين (VAAI).
لا (VMkernel) ،
نعم (VAAI)
النطاقات (# وصف النطاق)

يحتوي القسم على المسار إلى القرص ونوع الوصول والحجم. في الشكل:
<نوع الوصول> <الحجم> <نوع المدى> <المسار إلى ملف VMDK أو إلى الجهاز> <offset>.

وصول
نوع الوصول إلى القرص.
RW (قراءة / كتابة)
ريال عماني (للقراءة فقط)
NOACCESS (تم رفض الوصول).
حجم
حجم القرص
يشار إلى عدد القطاعات المنطقية للقرص الظاهري. يتم حسابها بواسطة الصيغة:
<الحجم بالبايت> / <حجم القطاع المنطقي>
اقرأ المزيد حول حساب هندسة القرص هنا .
نوع المدى
المؤشر إلى وضع القرص.
قد تأخذ على القيمة
FLAT ، SPARSE ، ZERO ، VMFS ، VMFSSPARSE ، VMFSRDM ، VMFSRAW.
متصفحك
المسار إلى ملف VMDK.

عوض
يتم استخدامه إذا كنت بحاجة إلى تحديد إزاحة البدء لبيانات نظام التشغيل الضيف. للأقراص الافتراضية ، عادة ما تكون 0 (أو غير محددة). ل RDM قد يكون غير صفري.
الإزاحة بالبايت من بداية القرص إلى بداية كتلة البيانات.
قاعدة بيانات القرص (# قاعدة بيانات القرص)

وصف هندسة القرص الظاهري.

ddb.adapterType
نوع محول SCSI الظاهري VM.
يتم دعم 3 أنواع فقط:
بيئة تطوير متكاملة،
buslogic،
lsilogic.

علاوة على ذلك ، يتم تمييز المحول VMware Paravirtual دائمًا على أنه lsilogic.
ddb.geometry.cylinders
ddb.geometry.heads = "255"
ddb.geometry.sectors = "63"
عدد الاسطوانات والرؤوس والقطاعات لوصف هندسة القرص الظاهري.
تفاصيل حول حساب هندسة القرص هنا .
ddb.thinProvisioned
علم القرص رقيقة.
1 - القرص رقيق ،
0 أو غائب - قرص سميك
ddb.uuid
معرف واصف

ddb.virtualHWVersion
نسخة الأجهزة الافتراضية


يمكن العثور على وصف لجميع القيم في مواصفات التنسيق: VMware Virtual Disk Format 1.1

VHD. Thick VHD هو نفس RAW ، ولكن مع تذييل 512 بايت ، الذي يصف هندسة القرص. لا يحتوي الجهاز الظاهري لـ Microsoft Hyper-V على ملف واصف منفصل. وصف هندسة القرص يأخذ 4 بايت. في الواقع ، من هنا القيود المفروضة على حجم القرص من 2 تيرابايت.


تذييل الصفحة. 512 بايت الأخيرة من القرص.

الشيء الأكثر إثارة للاهتمام هو أنه إذا قمت بإنشاء ملف واصف وتسلقت قرص VHD مع تذييل الصفحة إلى ESXi ، فسيتجاهل برنامج Hypervisor VMware هذا التذييل ويقبل VHD باعتباره أصليًا.

عندما يحول Storage vMotion قرصًا إلى نحيف ، فإنه ببساطة يقطع هذه التذييل ، وفي الخرج نحصل على نفس RAW بدون أصفار في النهاية. وعند التحويل إلى قرص سميك - RAW صادق. هذا ما سأعرضه لاحقًا.

VHDX. يتم تخزين جميع معلومات هندسة القرص في 4096 كيلوبايت الأولى من القرص الظاهري - في منطقة الرأس.


المخطط العام للقرص السميك VHDX.

ما هو مثل هذا المجال؟ يحتوي على نسختين من الرؤوس مع سجلاتهما ، BAT ومنطقة البيانات الوصفية شائعة.


البنية المنطقية لرأس القرص.

في وحدة زمنية ، تكون نسخة واحدة فقط من الرأس نشطة. يوفر هذا مستوى معين من التسامح مع الخطأ في الرأس في حالة حدوث انقطاع غير مخطط له في عمليات القراءة / الكتابة. بعد كل عملية إدخال / إخراج ، يتم النسخ المتماثل ويتم إجراء التبديل إليها.


تخطيط منطقة الرأس.

لتحويل VHDX إلى RAW ، نحتاج فقط إلى خفض 4096 كيلو بايت الأول.


بدء البيانات في 5 ميغابايت.

بطبيعة الحال ، سيقول القارئ اليقظ: حسنًا ، Zhenya ، ولكن قم بتحويل RAW إلى VHDX بشكل ضعيف؟ الذي سأجيب عليه: يعتمد ذلك على نظام الملفات وعلى مقدار ما يسمح لك بكتابة البيانات إلى بداية الملف. يدوياً على نظام ملفات NTFS ، يمكن القيام بذلك عن طريق تحويل بداية الملف 4 ميغابايت للأمام في MFT وإلحاق الرأس إلى هذا المكان.

الأداة المساعدة vhdxtool.exe تعمل على نفس المبدأ . ومع ذلك ، مع هذا التحويل ، لن نحصل على صورة جميلة في شكل رأس 4 ميغابايت و RAW. سيكون القرص مرئيًا وسيعمل بشكل صحيح كـ VHDX ، ولكن سيكون هناك أيضًا الكثير من "القمامة" من الأصفار التي ظهرت بسبب التلاعب مع الإزاحة. لن يكون محرك الأقراص الأمثل. يوصى بترحيل VMs المزودة بمثل هذا القرص إلى وحدة تخزين أخرى أو تحسينها من خلال أسطوانات cmdlets Convert-VHD أو Optimize-VHD. إذا لم يتم ذلك ، فسيشغل القرص مساحة أكبر مما ينبغي ، وقد يعمل ببطء أكثر.

ومع ذلك ، في سيناريوهات الترحيل من VMware إلى Hyper-V ، لا غنى عن هذه الأداة المساعدة ، لأنها تتيح التحويل الموضعي دون الحاجة إلى بايت لقراءة القرص المصدر وإنشاء نسخة قريبة. سيتم تخفيف كل الخشونة في التخزين التخزيني المباشر الأول.

الخلاصة: الأقراص السميكة بتنسيقات VMDK و VHD و VHDX لا تختلف كثيرًا عن بعضها البعض. وتستند على RAW مع إضافات مختلفة. باستخدام نفس محرر HEX أو وظائف نظام التشغيل للعمل مع نظام الملفات ، يمكننا تحويل 10 Tb VMDK أو VHDX إلى القرص hypervisor الهدف في بضع ثوان.

دعونا نلقي نظرة على كيفية تعامل VMware Exsi مع VHD.

  1. على سبيل المثال ، قمت بإنشاء صورة Windows Server باستخدام Convert-WindowsImage مع حقن برامج VMware والمعلمات:

    • إصدار نظام التشغيل: Windows Server 2019 Standard،
    • نوع القرص: ثابت ،
    • تخطيط القرص: GPT ،
    • حجم القرص: 30GB.


    انتبه إلى المعلمات FileSize (الحجم الفعلي للملف) والحجم (حجم القرص من حيث VM). الفرق بين القيم هو بالضبط 512 بايت - حجم تذييل VHD.
  2. إعادة تسمية محرك الأقراص إلى Win2019-test2-flat.vmdk لتحميله على ESXi Datastore.
  3. بعد ذلك ، أقوم بإنشاء VM فارغ في VMware ESXi باستخدام قرص سميك (Eager Zeroed) بحيث يتم إنشاء واصف VMDK تلقائيًا ولا يلزم حساب الأسطوانات يدويًا.

  4. نحن نتصل بالمضيف عبر WinSCP ونستبدل الملف الموجود:

    كل شيء عادل: تذييل الصفحة في مكانه.
  5. قم بتشغيل جهاز VM وشاهد أن نظام التشغيل يقوم بالتمهيد دون أي مشاكل. يبقى فقط تثبيت أدوات VMware ، والتي ستكون بسيطة ، لأن Convert-WindowsImage يسمح لنا بتثبيت برامج تشغيل الأجهزة.

  6. انقل القرص إلى Datastore آخر عبر Storage vMotion وقم بتحويله إلى قرص رفيع.

  7. التحقق من حجم - أصبح القرص رقيقة.

  8. إذا قمنا بالتحويل إلى قرص سميك أو قمنا بترحيل VM إلى تخزين الملفات ، فسنحصل على أنقى RAW بدون رؤوس.


    قطعت تذييل الصفحة.

يعمل نفس التركيز على RAWs التي تم إنشاؤها من خلال dd. وحتى في الاتجاه المعاكس. بهذه الطريقة ترى أن VMware ESXi يقبل تذييل الطرف الثالث أو أقراص RAW.

إذا كنت لا تريد الحيل ، فيمكنك استخدام الأدوات أدناه.
تنسيق المصدر
شكل الهدف
الأدوات
مثال القيادة
VHD
VHDX
vhdxtool.exe
vhdxtool الترقية -f <اسم الملف> .vhd
VMDK (RAW)
VHD
vhdtool.exe
vhdtool / تحويل <اسم الملف مسطح> .vmdk
VMDK (RAW)
VHDX
vhdtool.exe
vhdxtool.exe
vhdtool / تحويل <اسم الملف مسطح> .vmdk

VHDX (الخام)
VHDX
vhdxtool الترقية -f <اسم الملف> .vhd

لتلخيص. التنسيقات المختلفة للأقراص الظاهرية الكثيفة لا تختلف كثيرًا. في قلب جميع RAW مع مختلف "إضافات".

إن تحويل تنسيقات القرص الظاهري ليس مخيفًا ، وكما أظهرت ، يمكنك أحيانًا الاستغناء عنه.

الربح الرئيسي من كل هذا هو تقليل وقت الترحيل من Hyper-V إلى VMware والعكس بالعكس و VM أثناء التوقف. في DataLine ، نمارس هذا مع وقت تعطل VM لمدة تقل عن 30 دقيقة. السجل هو 40 ثانية من تعطل VM أثناء الترحيل بين برامج Hypervisor.

فقط تذكر أنه عند الترحيل بين برامج Hypervisor مختلفة ، فإن التحويل الواحد لا يكفي. كحد أدنى ، يجب أولاً تثبيت مكونات تكامل برنامج Hypervisor الهدف ، وإزالة أو تعطيل تشغيل مكونات برنامج hypervisor المصدر ، وإزالة الأجهزة الافتراضية لبرنامج hypervisor المصدر ، إلخ. لكن هذه قصة مختلفة تمامًا ، ويمكنني أيضًا سردها.

روابط مفيدة:

Source: https://habr.com/ru/post/ar479894/


All Articles