إعداد Linux للتصوير في Azure
تنبيه
تشير هذه المقالة إلى CentOS، وهو توزيع Linux هو حالة نهاية العمر الافتراضي (EOL). يرجى مراعاة استخدامك والتخطيط وفقا لذلك. لمزيد من المعلومات، راجع إرشادات نهاية العمر الافتراضي CentOS.
ينطبق على: ✔️ أجهزة Linux الظاهرية ✔️ مجموعات مقياس مرنة
تنطبق اتفاقية مستوى خدمة النظام الأساسي Azure (SLA) على الأجهزة الظاهرية (VMs) التي تعمل بنظام التشغيل Linux فقط عند استخدام أحد التوزيعات المعتمدة. بالنسبة للتوزيعات المعتمدة، يوفر Azure Marketplace صور Linux المكونة مسبقا. لمزيد من المعلومات، راجع:
جميع التوزيعات الأخرى التي تعمل على Azure، بما في ذلك التوزيعات المدعومة من المجتمع وغير المعتمدة، لها بعض المتطلبات الأساسية.
تركز هذه المقالة على الإرشادات العامة لتشغيل توزيع Linux على Azure. لا يمكن أن تكون هذه المقالة شاملة، لأن كل توزيع مختلف. حتى إذا كنت تستوفي جميع المعايير التي تصفها هذه المقالة، فقد تحتاج إلى تعديل نظام Linux بشكل كبير لتشغيله بشكل صحيح.
ملاحظات تثبيت Linux العامة
لا يدعم Azure تنسيق القرص الثابت الظاهري Hyper-V (VHDX). يدعم Azure VHD الثابت فقط. يمكنك تحويل القرص إلى تنسيق VHD باستخدام Hyper-V Manager أو Cmdlet Convert-VHD . إذا كنت تستخدم VirtualBox، فحدد الحجم الثابت بدلا من الحجم الافتراضي (المخصص ديناميكيا) عند إنشاء القرص.
يدعم Azure الأجهزة الظاهرية Gen1 (تمهيد BIOS) وGen2 (تمهيد UEFI).
يجب تمكين الوحدة النمطية kernel لجدول تخصيص الملفات الظاهرية (VFAT) في النواة.
الحد الأقصى للحجم المسموح به لـ VHD هو 1,023 جيجابايت.
عند تثبيت نظام Linux، نوصي باستخدام الأقسام القياسية بدلا من إدارة وحدة التخزين المنطقية (LVM). LVM هو الافتراضي للعديد من التثبيتات.
سيؤدي استخدام الأقسام القياسية إلى تجنب تعارضات اسم LVM مع الأجهزة الظاهرية المستنسخة، خاصة إذا كان قرص نظام التشغيل متصلاً بجهاز ظاهري آخر مماثل لاستكشاف الأخطاء وإصلاحها. يمكنك استخدام LVM أو RAID على أقراص البيانات.
يعد دعم Kernel لتركيب أنظمة ملفات الدالة المعرفة من قبل المستخدم (UDF) ضروريا. في التمهيد الأول على Azure، يتم تمرير تكوين التوفير إلى Linux VM عبر وسائط بتنسيق UDF مرفقة بالضيف. يجب على عامل Azure Linux تحميل نظام ملفات UDF لقراءة تكوينه وتوفير الجهاز الظاهري.
لا تدعم إصدارات Linux kernel الأقدم من 2.6.37 الوصول غير الموحد للذاكرة (NUMA) على Hyper-V بأحجام أجهزة ظاهرية أكبر. تؤثر هذه المشكلة بشكل أساسي على التوزيعات القديمة التي تستخدم نواة Red Hat 2.6.32 الأولية. تم إصلاحه في Red Hat Enterprise Linux (RHEL) 6.6 (kernel-2.6.32-504).
يجب على الأنظمة التي تعمل على نواة مخصصة أقدم من 2.6.37 أو نواة تستند إلى RHEL أقدم من 2.6.32-504 تعيين معلمة
numa=off
التمهيد على سطر أوامر kernel في grub.conf. لمزيد من المعلومات، راجع Red Hat KB 436883.لا تقم بتكوين قسم مبادلة على قرص نظام التشغيل. يمكنك تكوين عامل Linux لإنشاء ملف تبديل على قرص المورد المؤقت، كما هو موضح لاحقا في هذه المقالة.
يجب أن يكون لجميع أقراص VHD على Azure حجم ظاهري محاذاته إلى 1 ميغابايت (1024 × 1024 بايت). عند التحويل من قرص خام إلى VHD، تأكد من أن حجم القرص الخام هو مضاعف 1 ميغابايت قبل التحويل، كما هو موضح لاحقا في هذه المقالة.
قم باستخدام أحدث إصدار توزيع وحزم وبرامج.
إزالة المستخدمين وحسابات النظام والمفاتيح العامة والبيانات الحساسة والبرامج والتطبيقات غير الضرورية.
إشعار
يزيل الإصدار 21.2 من Cloud-init أو أحدث متطلبات UDF. ولكن بدون تمكين الوحدة النمطية udf
، لن يتم تحميل CD-ROM أثناء التوفير، مما يمنع تطبيق البيانات المخصصة. الحل البديل هو تطبيق بيانات المستخدم. ومع ذلك، على عكس البيانات المخصصة، لا يتم تشفير بيانات المستخدم. لمزيد من المعلومات، راجع تنسيقات بيانات المستخدم في وثائق تهيئة السحابة.
تثبيت وحدات النواة دون Hyper-V
يعمل Azure على مراقب الأجهزة الظاهرية Hyper-V؛ لذلك يتطلب Linux تشغيل وحدات kernel نمطية معينة في Azure. إذا كان لديك جهاز ظاهري تم إنشاؤه خارج Hyper-V، فقد لا تتضمن مثبتات Linux برامج تشغيل Hyper-V في قرص ذاكرة الوصول العشوائي الأولي (initrd أو initramfs)، ما لم يكتشف الجهاز الظاهري أنه يعمل في بيئة Hyper-V.
عند استخدام نظام ظاهرية مختلف (مثل VirtualBox أو KVM) لإعداد صورة Linux، قد تحتاج إلى إعادة إنشاء initrd بحيث تتوفر على الأقل hv_vmbus
الوحدات النمطية و hv_storvsc
kernel على قرص ذاكرة الوصول العشوائي الأولي. هذه المشكلة المعروفة خاصة بالأنظمة القائمة على توزيع Red Hat المصدر، وربما أنظمة أخرى.
يمكن أن تختلف آلية إعادة بناء صورة initrd أو initramfs، اعتمادا على التوزيع. راجع وثائق التوزيع أو الدعم للإجراء المناسب. فيما يلي مثال واحد لإعادة إنشاء initrd باستخدام mkinitrd
الأداة المساعدة:
قم بعمل نسخة احتياطية من صورة initrd الموجودة:
cd /boot sudo cp initrd-`uname -r`.img initrd-`uname -r`.img.bak
إعادة إنشاء initrd باستخدام الوحدات النمطية
hv_vmbus
وhv_storvsc
kernel:sudo mkinitrd --preload=hv_storvsc --preload=hv_vmbus -v -f initrd-`uname -r`.img `uname -r`
تغيير حجم VHDs
يجب أن يكون لصور VHD على Azure حجم ظاهري يحاذي 1 ميجابايت. عادة ما تتم محاذاة VHDs التي تم إنشاؤها من خلال Hyper-V بشكل صحيح. إذا لم تتم محاذاة VHD بشكل صحيح، فقد تتلقى رسالة خطأ مشابهة للمثال التالي عند محاولة إنشاء صورة من VHD الخاص بك:
The VHD http://<mystorageaccount>.blob.core.windows.net/vhds/MyLinuxVM.vhd has an unsupported virtual size of 21475270656 bytes. The size must be a whole number (in MBs).
في هذه الحالة، قم بتغيير حجم الجهاز الظاهري باستخدام وحدة تحكم Hyper-V Manager أو Cmdlet Resize-VHD PowerShell. إذا لم تكن تعمل في بيئة Windows، فإننا نوصي باستخدام qemu-img
لتحويل VHD (إذا لزم الأمر) وتغيير حجمه.
إشعار
هناك خطأ معروف في qemu-img للإصدار 2.2.1 من QEMU وبعض الإصدارات الأحدث التي ينتج عنها VHD منسق بشكل غير صحيح. تم تصحيح المشكلة في QEMU 2.6. نوصي باستخدام الإصدار 2.2.0 أو إصدار سابق، أو استخدام الإصدار 2.6 أو أحدث.
تغيير حجم VHD مباشرة باستخدام أدوات مثل
qemu-img
أوvbox-manage
قد يؤدي إلى VHD غير قابل للتشطيب. نوصي أولا بتحويل VHD إلى صورة قرص أولي باستخدام التعليمات البرمجية التالية.إذا تم إنشاء صورة الجهاز الظاهري كصورة قرص أولي، يمكنك تخطي هذه الخطوة. إنشاء صورة الجهاز الظاهري كصورة قرص أولي هو الافتراضي في بعض برامج hypervisors، مثل KVM.
sudo qemu-img convert -f vpc -O raw MyLinuxVM.vhd MyLinuxVM.raw
احسب الحجم المطلوب لصورة القرص بحيث تتم محاذاة الحجم الظاهري إلى 1 ميجابايت. يستخدم
qemu-img info
البرنامج النصي Bash shell التالي لتحديد الحجم الظاهري لصورة القرص، ثم حساب الحجم إلى 1 ميغابايت التالية:rawdisk="MyLinuxVM.raw" vhddisk="MyLinuxVM.vhd" MB=$((1024*1024)) size=$(qemu-img info -f raw --output json "$rawdisk" | \ gawk 'match($0, /"virtual-size": ([0-9]+),/, val) {print val[1]}') rounded_size=$(((($size+$MB-1)/$MB)*$MB)) echo "Rounded Size = $rounded_size"
تغيير حجم القرص الخام باستخدام
$rounded_size
:sudo qemu-img resize MyLinuxVM.raw $rounded_size
قم بتحويل القرص الخام مرة أخرى إلى VHD ثابت الحجم:
sudo qemu-img convert -f raw -o subformat=fixed,force_size -O vpc MyLinuxVM.raw MyLinuxVM.vhd
أو، مع إصدارات QEMU قبل 2.6، قم بإزالة
force_size
الخيار:sudo qemu-img convert -f raw -o subformat=fixed -O vpc MyLinuxVM.raw MyLinuxVM.vhd
متطلبات نواة Linux
تُساهم برامج تشغيل Linux Integration Services (LIS) لـ Hyper-V وAzure مباشرة في Linux kernel المصدر. يحتوي العديد من التوزيعات التي تتضمن إصداراً حديثاً من Linux kernel (مثل 3.x) على برامج التشغيل هذه المتوفرة بالفعل، أو توفر إصدارات الحمل العكسي من برامج التشغيل هذه مع نواتها.
يتم تحديث برامج تشغيل LIS باستمرار في نواة المصدر مع إصلاحات وميزات جديدة. عندما يكون ذلك ممكنا، نوصي بتشغيل توزيع معتمد يتضمن هذه الإصلاحات والتحديثات.
إذا كنت تقوم بتشغيل متغير من إصدارات RHEL من 6.0 إلى 6.3، فأنت بحاجة إلى تثبيت أحدث برامج تشغيل LIS ل Hyper-V. بدءا من RHEL 6.4+ (والمشتقات)، يتم تضمين برامج تشغيل LIS بالفعل مع النواة، لذلك لا تحتاج إلى حزم تثبيت إضافية.
إذا كانت هناك حاجة إلى kernel مخصصة، فإننا نوصي بإصدار kernel حديث (مثل 3.8+). بالنسبة للتوزيعات أو الموردين الذين يحافظون على نواة خاصة بهم، تحتاج إلى دعم برامج تشغيل LIS بانتظام من نواة المصدر إلى نواة مخصصة.
حتى إذا كنت تقوم بالفعل بتشغيل إصدار kernel حديث نسبيا، نوصي بشدة بتعقب أي إصلاحات مصدرية في برامج تشغيل LIS ونسخها احتياطيا حسب الحاجة. يتم تحديد مواقع ملفات مصدر برنامج تشغيل LIS في ملف MAINTAINERS في شجرة مصدر Linux kernel:
F: arch/x86/include/asm/mshyperv.h
F: arch/x86/include/uapi/asm/hyperv.h
F: arch/x86/kernel/cpu/mshyperv.c
F: drivers/hid/hid-hyperv.c
F: drivers/hv/
F: drivers/input/serio/hyperv-keyboard.c
F: drivers/net/hyperv/
F: drivers/scsi/storvsc_drv.c
F: drivers/video/fbdev/hyperv_fb.c
F: include/linux/hyperv.h
F: tools/hv/
يجب أن تتضمن النواة النشطة للجهاز الظاهري التصحيحات التالية. لا يمكن أن تكون هذه القائمة كاملة لجميع التوزيعات.
- ata_piix: يُحيل الأقراص إلى برامج تشغيل Hyper-V بشكل افتراضي
- storvsc: حساب الحزم أثناء النقل في مسار RESET
- storvsc: تجنب استخدام WRITE_SAME
- storvsc: تعطيل WRITE SAME لبرامج تشغيل RAID ومحول المضيف الظاهري
- storvsc: إصلاح عدم مرجعية المؤشر الفارغ
- storvsc: قد يؤدي فشل المخزن المؤقت للحلقة إلى تجميد الإدخال/الإخراج
- scsi_sysfs: حماية من التنفيذ المزدوج لـ __scsi_remove_device
عامل Azure Linux
يقوم عامل Azure Linux (waagent
) بتوفير جهاز ظاهري Linux في Azure. يمكنك الحصول على أحدث إصدار أو الإبلاغ عن المشاكل أو إرسال طلبات السحب في مستودع Linux Agent GitHub.
فيما يلي بعض الاعتبارات لاستخدام عامل Azure Linux:
- يتم إصدار عامل Linux بموجب ترخيص Apache 2.0. توفر العديد من التوزيعات بالفعل حزم .rpm أو .deb للعامل. يمكنك بسهولة تثبيت هذه الحزم وتحديثها.
- Azure Linux Agent يتطلب Python v2.6+.
- يتطلب العامل أيضا الوحدة النمطية
python-pyasn1
. توفر معظم التوزيعات هذه الوحدة النمطية كحزمة منفصلة ليتم تثبيتها. - في بعض الحالات، قد لا يكون عامل Azure Linux متوافقا مع NetworkManager. يقوم العديد من الحزم (.rpm أو .deb) التي توفرها التوزيعات بتكوين NetworkManager كتعارض مع الحزمة
waagent
. في هذه الحالات، سيقوم العامل بإلغاء تثبيت NetworkManager عند تثبيت حزمة عامل Linux. - يجب أن يكون Azure Linux Agent عند الحد الأدنى للإصدار المدعوم أو أعلى.
إشعار
تأكد من تمكين الوحدات النمطية udf
و vfat
. سيؤدي تعطيل الوحدة النمطية udf
إلى فشل التزويد. سيؤدي تعطيل الوحدة النمطية vfat
إلى فشل كل من التوفير والتمهيد. يمكن للإصدار 21.2 من Cloud-init أو أحدث توفير الأجهزة الظاهرية دون الحاجة إلى UDF إذا كان كلا الشرطين موجودين:
- لقد قمت بإنشاء الجهاز الظاهري باستخدام مفاتيح SSH العامة وليس كلمات المرور.
- لم تقدم أي بيانات مخصصة.
متطلبات نظام Linux العامة
قم بتعديل سطر تمهيد kernel في GRUB أو GRUB2 لتضمين المعلمات التالية، بحيث يتم إرسال كافة رسائل وحدة التحكم إلى المنفذ التسلسلي الأول. يمكن أن تساعد هذه الرسائل دعم Azure في تصحيح أي مشكلات.
GRUB_CMDLINE_LINUX="rootdelay=300 console=ttyS0 earlyprintk=ttyS0 net.ifnames=0"
نوصي أيضا بإزالة المعلمات التالية إذا كانت موجودة:
rhgb quiet crashkernel=auto
التمهيد الرسومي والهادئ غير مفيد في بيئة سحابية، حيث تريد إرسال جميع السجلات إلى المنفذ التسلسلي. يمكنك ترك
crashkernel
الخيار مكونا إذا لزم الأمر، ولكن هذه المعلمة تقلل مقدار الذاكرة المتوفرة في الجهاز الظاهري بمقدار 128 ميغابايت على الأقل. قد يكون تقليل الذاكرة المتوفرة مشكلة لأحجام الأجهزة الظاهرية الأصغر.بعد الانتهاء من تحرير /etc/default/grub، قم بتشغيل الأمر التالي لإعادة إنشاء تكوين GRUB:
sudo grub2-mkconfig -o /boot/grub2/grub.cfg
أضف وحدة Hyper-V النمطية ل initramfs باستخدام
dracut
:cd /boot sudo cp initramfs-<kernel-version>.img <kernel-version>.img.bak sudo dracut -f -v initramfs-<kernel-version>.img <kernel-version> --add-drivers "hv_vmbus hv_netvsc hv_storvsc" sudo grub-mkconfig -o /boot/grub/grub.cfg sudo grub2-mkconfig -o /boot/grub2/grub.cfg
أضف الوحدة النمطية Hyper-V ل initrd باستخدام
mkinitramfs
:cd /boot sudo cp initrd.img-<kernel-version> initrd.img-<kernel-version>.bak sudo mkinitramfs -o initrd.img-<kernel-version> <kernel-version> --with=hv_vmbus,hv_netvsc,hv_storvsc sudo update-grub
تأكد من تثبيت خادم SSH وتكوينه للبدء في وقت التمهيد. هذا التكوين هو عادة الافتراضي.
قم بتثبيت Azure Linux Agent.
Azure Linux Agent مطلوب لتوفير صورة Linux على Azure. توفر العديد من التوزيعات العامل كحزمة .rpm أو .deb. عادة ما تسمى
WALinuxAgent
الحزمة أوwalinuxagent
. يمكنك أيضا تثبيت العامل يدويا باتباع الخطوات الواردة في دليل عامل Azure Linux.إشعار
تأكد من تمكين الوحدات النمطية
udf
وvfat
. ستؤدي إزالتها أو تعطيلها إلى فشل التوفير أو التمهيد. يزيل الإصدار 21.2 من Cloud-init أو أحدث متطلبات UDF.قم بتثبيت عامل Azure Linux و cloud-init والأدوات المساعدة الضرورية الأخرى عن طريق تشغيل أحد الأوامر التالية.
استخدم هذا الأمر ل Red Hat أو CentOS:
sudo yum install -y WALinuxAgent cloud-init cloud-utils-growpart gdisk hyperv-daemons
استخدم هذا الأمر ل Ubuntu/Debian:
sudo apt install walinuxagent cloud-init cloud-utils-growpart gdisk hyperv-daemons
استخدم هذا الأمر ل SUSE:
sudo zypper install python-azure-agent cloud-init cloud-utils-growpart gdisk hyperv-daemons
ثم قم بتمكين العامل و cloud-init على جميع التوزيعات:
sudo systemctl enable waagent.service sudo systemctl enable cloud-init.service
لا تنشئ مساحة مبادلة على قرص نظام التشغيل.
يمكنك استخدام عامل Azure Linux أو cloud-init لتكوين مساحة التبديل عبر قرص المورد المحلي. يتم إرفاق قرص المورد هذا بالجهاز الظاهري بعد التوفير على Azure. قرص المورد المحلي هو قرص مؤقت وقد يتم إفراغه عند إلغاء توفير الجهاز الظاهري. توضح الكتل التالية كيفية تكوين هذه المبادلة.
إذا اخترت عامل Azure Linux، فقم بتعديل المعلمات التالية في /etc/waagent.conf:
ResourceDisk.Format=y ResourceDisk.Filesystem=ext4 ResourceDisk.MountPoint=/mnt/resource ResourceDisk.EnableSwap=y ResourceDisk.SwapSizeMB=2048 ## NOTE: Set this to your desired size.
إذا اخترت cloud-init، فقم بتكوين cloud-init للتعامل مع التوفير:
sudo sed -i 's/Provisioning.Agent=auto/Provisioning.Agent=cloud-init/g' /etc/waagent.conf sudo sed -i 's/ResourceDisk.Format=y/ResourceDisk.Format=n/g' /etc/waagent.conf sudo sed -i 's/ResourceDisk.EnableSwap=y/ResourceDisk.EnableSwap=n/g' /etc/waagent.conf
لتكوين cloud-init لتنسيق وإنشاء مساحة تبديل، لديك خياران:
- قم بتمرير تكوين cloud-init في كل مرة تقوم فيها بإنشاء جهاز ظاهري من خلال
customdata
. نوصي بهذا الأسلوب. - استخدم توجيه cloud-init في الصورة لتكوين مساحة التبديل في كل مرة يتم فيها إنشاء الجهاز الظاهري.
إنشاء ملف .cfg لتكوين مساحة التبديل باستخدام cloud-init:
echo 'DefaultEnvironment="CLOUD_CFG=/etc/cloud/cloud.cfg.d/00-azure-swap.cfg"' | sudo tee -a /etc/systemd/system.conf cat << EOF | sudo tee /etc/cloud/cloud.cfg.d/00-azure-swap.cfg #cloud-config # Generated by Azure cloud image build disk_setup: ephemeral0: table_type: mbr layout: [66, [33, 82]] overwrite: True fs_setup: - device: ephemeral0.1 filesystem: ext4 - device: ephemeral0.2 filesystem: swap mounts: - ["ephemeral0.1", "/mnt/resource"] - ["ephemeral0.2", "none", "swap", "sw,nofail,x-systemd.requires=cloud-init.service,x-systemd.device-timeout=2", "0", "0"] EOF
- قم بتمرير تكوين cloud-init في كل مرة تقوم فيها بإنشاء جهاز ظاهري من خلال
تكوين cloud-init للتعامل مع التزويد:
تكوين
waagent
cloud-init:sudo sed -i 's/Provisioning.Agent=auto/Provisioning.Agent=cloud-init/g' /etc/waagent.conf sudo sed -i 's/ResourceDisk.Format=y/ResourceDisk.Format=n/g' /etc/waagent.conf sudo sed -i 's/ResourceDisk.EnableSwap=y/ResourceDisk.EnableSwap=n/g' /etc/waagent.conf
إذا كنت تقوم بترحيل جهاز ظاهري معين ولا تريد إنشاء صورة معممة، فقم بتعيين
Provisioning.Agent=disabled
في تكوين /etc/waagent.conf .تكوين وحدات:
echo "Adding mounts and disk_setup to init stage" sudo sed -i '/ - mounts/d' /etc/cloud/cloud.cfg sudo sed -i '/ - disk_setup/d' /etc/cloud/cloud.cfg sudo sed -i '/cloud_init_modules/a\\ - mounts' /etc/cloud/cloud.cfg sudo sed -i '/cloud_init_modules/a\\ - disk_setup' /etc/cloud/cloud.cfg
تكوين مصدر بيانات Azure:
echo "Allow only Azure datasource, disable fetching network setting via IMDS" cat << EOF | sudo tee /etc/cloud/cloud.cfg.d/91-azure_datasource.cfg datasource_list: [ Azure ] datasource: Azure: apply_network_config: False EOF
قم بإزالة ملف التبديل الموجود إذا قمت بتكوين ملف:
if [[ -f /mnt/resource/swapfile ]]; then echo "Removing swapfile" #RHEL uses a swap file by default swapoff /mnt/resource/swapfile rm /mnt/resource/swapfile -f fi
تكوين تسجيل cloud-init:
echo "Add console log file" cat << EOF | sudo tee -a /etc/cloud/cloud.cfg.d/05_logging.cfg # This tells cloud-init to redirect its stdout and stderr to # 'tee -a /var/log/cloud-init-output.log' so the user can see output # there without needing to look on the console. output: {all: '| tee -a /var/log/cloud-init-output.log'} EOF
قم بتشغيل الأوامر التالية لإلغاء توفير الجهاز الظاهري.
تنبيه
إذا كنت تقوم بترحيل جهاز ظاهري معين ولا تريد إنشاء صورة معممة، فتخط خطوة إلغاء التوفير. سيؤدي تشغيل الأمر
waagent -force -deprovision+user
إلى جعل الجهاز المصدر غير قابل للاستخدام. تهدف هذه الخطوة فقط إلى إنشاء صورة معممة.sudo rm -f /var/log/waagent.log sudo cloud-init clean sudo waagent -force -deprovision+user sudo rm -f ~/.bash_history sudo export HISTSIZE=0
في VirtualBox، قد ترى رسالة خطأ بعد تشغيل
waagent -force -deprovision
تقول[Errno 5] Input/output error
. رسالة الخطأ هذه ليست هامة، ويمكنك تجاهلها.قم بإيقاف تشغيل الجهاز الظاهري وقم بتحميل VHD إلى Azure.
الخطوات التالية
إنشاء جهاز ظاهري يعمل بنظام Linux من قرص مخصص باستخدام Azure CLI