إضافة قرص إلى جهاز ظاهري بنظام التشغيل Linux

ينطبق على: ✔️ أجهزة Linux الظاهرية ✔️ مجموعات مقياس مرنة

توضح لك هذه المقالة كيفية إرفاق قرص ثابت بالجهاز الظاهري حتى تتمكن من الاحتفاظ ببياناتك - حتى إذا تم إعادة توفير الجهاز الظاهري بسبب الصيانة أو تغيير الحجم.

إرفاق قرص جديد إلى جهاز ظاهري

إذا كنت ترغب في إضافة قرص بيانات جديد فارغ إلى الجهاز الظاهري، فاستخدم الأمر az vm disk attach مع المعلمة --new. إذا كان الجهاز الظاهري في منطقة توافر، فسيتم إنشاء القرص تلقائياً في نفس منطقة الجهاز الظاهري. لمزيد من المعلومات، راجع نظرة عامة على مناطق التوافر. ينشئ المثال التالي قرصاً باسم myDataDisk بحجم 50 جيجا بايت:

az vm disk attach \
   -g myResourceGroup \
   --vm-name myVM \
   --name myDataDisk \
   --new \
   --size-gb 50

زمن وصول أقل

في مناطق محددة، تم تقليل زمن انتقال إرفاق القرص، لذلك سترى تحسنًا يصل إلى 15٪. يعد هذا مفيدًا إذا كنت قد خططت/لم تخطط لعمليات تجاوز الفشل بين الأجهزة الظاهرية، أو كنت تقوم بتغيير حجم حمل العمل الخاص بك، أو كنت تقوم بتشغيل حمل عمل كبير الحجم مثل Azure Kubernetes Service. ومع ذلك، يقتصر هذا التحسين على أمر إرفاق القرص الصريح، az vm disk attach. لن ترى تحسين الأداء إذا قمت باستدعاء أمر قد يؤدي ضمنيًا إلى الإرفاق، مثل az vm update. لا تحتاج إلى اتخاذ أي إجراء آخر غير استدعاء أمر الإرفاق الصريح لرؤية عملية التحسين.

يتوفر زمن انتقال أقل حاليًا في كل منطقة عامة باستثناء:

  • كندا الوسطى
  • وسط الولايات المتحدة
  • شرق الولايات المتحدة
  • East US 2
  • جنوب وسط الولايات المتحدة
  • منطقة غرب الولايات المتحدة الأمريكية 2
  • منطقة شمال ألمانيا
  • جيو الهند الغربية
  • شمال أوروبا
  • غرب أوروبا

إرفاق قرص موجود

لإرفاق قرص موجود، ابحث عن معرّف القرص ومرر المعرّف إلى الأمر az vm disk attach. أمثلة الاستعلامات التالية لقرص اسمه myDataDisk في myResourceGroup، ثم ترفقه بالجهاز الظاهري المسمى myVM:

diskId=$(az disk show -g myResourceGroup -n myDataDisk --query 'id' -o tsv)

az vm disk attach -g myResourceGroup --vm-name myVM --name $diskId

تنسيق القرص وتركيبه

لتقسيم القرص الجديد وتنسيقه وتركيبه حتى يتمكن جهاز Linux الظاهري من استخدامه، SSH في الجهاز الظاهري. لمزيد من المعلومات، راجع كيفية استخدام SSH مع Linux على Azure. يتصل المثال التالي بجهاز ظاهري بعنوان IP عام 10.123.123.25 باسم المستخدم azureuser:

ssh azureuser@10.123.123.25

البحث عن القرص

بمجرد الاتصال بالجهاز الظاهري، ابحث عن القرص. في هذا المثال، نستخدم lsblk لسرد الأقراص.

lsblk -o NAME,HCTL,SIZE,MOUNTPOINT | grep -i "sd"

يتشابه الإخراج مع المثال التالي:

sda     0:0:0:0      30G
├─sda1             29.9G /
├─sda14               4M
└─sda15             106M /boot/efi
sdb     1:0:1:0      14G
└─sdb1               14G /mnt
sdc     3:0:0:0      50G

هنا، sdc هو القرص الذي نريده، لأنه 50G. إذا أضفت أقراصا متعددة، ولم تكن متأكدا من القرص الذي يستند إلى الحجم وحده، يمكنك الانتقال إلى صفحة الجهاز الظاهري في المدخل، وتحديد الأقراص، والتحقق من رقم LUN للقرص ضمن أقراص البيانات. قارن رقم LUN من المدخل بالرقم الأخير من الجزء HTCL من الإخراج، فهو LUN. خيار آخر هو سرد محتويات /dev/disk/azure/scsi1 الدليل:

ls -l /dev/disk/azure/scsi1

يجب أن يكون الإخراج مشابها للمثال التالي:

lrwxrwxrwx 1 root root 12 Mar 28 19:41 lun0 -> ../../../sdc

تنسيق القرص

قم بتنسيق القرص باستخدام parted، إذا كان حجم القرص اثنين من تيرابايت (TiB) أو أكبر، فيجب عليك استخدام تقسيم GPT، إذا كان أقل من 2 تيرابايت، فيمكنك استخدام تقسيم MBR أو GPT.

ملاحظة

يوصى باستخدام أحدث إصدار متوفر من parted للتوزيعة الخاصة بك. إذا كان حجم القرص 2 تيبي بايت (TiB) أو أكبر، يجب عليك استخدام تقسيم GPT. إذا كان حجم القرص أقل من 2 TiB، فيمكنك استخدام تقسيم MBR أو GPT.

يستخدم المثال التالي parted على /dev/sdc، حيث يوجد قرص البيانات الأول عادة على معظم الأجهزة الظاهرية. استبدل sdc بالخيار الصحيح للقرص. نقوم أيضا بتنسيقه باستخدام نظام ملفات XFS .

sudo parted /dev/sdc --script mklabel gpt mkpart xfspart xfs 0% 100%
sudo partprobe /dev/sdc
sudo mkfs.xfs /dev/sdc1

استخدم الأداة المساعدة partprobe للتأكد من أن النواة على دراية بالقسم ونظام الملفات الجديدين. يمكن أن يؤدي الفشل في الاستخدام partprobe إلى عدم قيام الأمرين blkid أو lslbk بإرجاع UUID لنظام الملفات الجديد على الفور.

تحميل القرص

الآن، قم بإنشاء دليل لتحميل نظام الملفات باستخدام mkdir. ينشئ المثال التالي دليلاً في /datadrive:

sudo mkdir /datadrive

استخدم mount لتحميل نظام الملفات. يقوم المثال التالي بتحميل القسم /dev/sdc1 على نقطة التحميل /datadrive:

sudo mount /dev/sdc1 /datadrive

استمر في التحميل

للتأكد من إعادة تحميل محرك الأقراص تلقائيا بعد إعادة التشغيل، يجب إضافته إلى /etc/fstab الملف. يوصى بشدة أيضا باستخدام /etc/fstab UUID (المعرف الفريد عالميا) للإشارة إلى محرك الأقراص بدلا من اسم الجهاز فقط (مثل /dev/sdc1). إذا اكتشف نظام التشغيل خطأ في القرص أثناء التمهيد، فإن استخدام UUID يتجنب تركيب القرص غير الصحيح في موقع معين. سيتم بعد ذلك تعيين أقراص البيانات المتبقية لنفس معرّفات الأجهزة. للعثور على UUID لمحرك الأقراص الجديد، استخدم الأداة المساعدة blkid:

sudo blkid

يبدو الإخراج مشابهاً للمثال التالي:

/dev/sda1: LABEL="cloudimg-rootfs" UUID="11111111-1b1b-1c1c-1d1d-1e1e1e1e1e1e" TYPE="ext4" PARTUUID="1a1b1c1d-11aa-1234-1a1a1a1a1a1a"
/dev/sda15: LABEL="UEFI" UUID="BCD7-96A6" TYPE="vfat" PARTUUID="1e1g1cg1h-11aa-1234-1u1u1a1a1u1u"
/dev/sdb1: UUID="22222222-2b2b-2c2c-2d2d-2e2e2e2e2e2e" TYPE="ext4" TYPE="ext4" PARTUUID="1a2b3c4d-01"
/dev/sda14: PARTUUID="2e2g2cg2h-11aa-1234-1u1u1a1a1u1u"
/dev/sdc1: UUID="33333333-3b3b-3c3c-3d3d-3e3e3e3e3e3e" TYPE="xfs" PARTLABEL="xfspart" PARTUUID="c1c2c3c4-1234-cdef-asdf3456ghjk"

ملاحظة

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

بعد ذلك، افتح /etc/fstab الملف في محرر نص. أضف سطرا إلى نهاية الملف، باستخدام قيمة UUID للجهاز /dev/sdc1 الذي تم إنشاؤه في الخطوات السابقة، ونقطة /datadriveتحميل . باستخدام المثال من هذه المقالة، سيبدو السطر الجديد كما يلي:

UUID=33333333-3b3b-3c3c-3d3d-3e3e3e3e3e3e   /datadrive   xfs   defaults,nofail   1   2

عند الانتهاء من تحرير الملف، احفظ المحرر وأغلقه.

بدلا من ذلك، يمكنك تشغيل الأمر التالي لإضافة القرص إلى /etc/fstab الملف:

echo "UUID=33333333-3b3b-3c3c-3d3d-3e3e3e3e3e3e   /datadrive   xfs   defaults,nofail   1   2" >> /etc/fstab

ملاحظة

قد تؤدي إزالة قرص بيانات لاحقاً دون تحرير fstab إلى فشل الجهاز الظاهري في التمهيد. توفر معظم التوزيعات خيارات fstab nofail و/أو nobootwait. تسمح هذه الخيارات للنظام بالتمهيد حتى إذا فشل القرص في التحميل في وقت التمهيد. راجع وثائق التوزيع للحصول على مزيد من المعلومات حول هذه المعلمات.

يضمن الخيار nofail بدء تشغيل الجهاز الظاهري حتى في حالة تلف نظام الملفات أو عدم وجود القرص في وقت التمهيد. بدون هذا الخيار، قد تواجه سلوكاً كما هو موضح في عدم إمكانية SSH على جهاز Linux الظاهري بسبب أخطاء FSTAB

يمكن استخدام وحدة التحكم التسلسلية لجهاز Azure الظاهري للوصول إلى وحدة التحكم إلى الجهاز الظاهري إذا أدى تعديل fstab إلى فشل التمهيد. يتوفر مزيد من التفاصيل في وثائق وحدة التحكم التسلسلية.

دعم TRIM/UNMAP لنظام التشغيل Linux في Azure

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

هناك طريقتان لتمكين دعم TRIM في جهاز Linux الظاهري. كالعادة، استشر التوزيع للحصول على النهج الموصى به:

  • discard استخدم خيار التحميل في /etc/fstab، على سبيل المثال:

    UUID=33333333-3b3b-3c3c-3d3d-3e3e3e3e3e3e   /datadrive   xfs   defaults,discard   1   2
    
  • في بعض الحالات، قد يكون للخيار discard آثار على الأداء. بدلاً من ذلك، يمكنك تشغيل fstrim الأمر يدوياً من سطر الأوامر، أو إضافته إلى crontab لتشغيله بانتظام:

sudo apt install util-linux
sudo fstrim /datadrive

استكشاف الأخطاء وإصلاحها

عند إضافة أقراص بيانات إلى جهاز ظاهري بنظام التشغيل Linux، قد تواجه أخطاء في حالة عدم وجود قرص في LUN 0. إذا كنت تضيف القرص يدوياً باستخدام الأمر az vm disk attach -new وقمت بتحديد LUN (--lun) بدلاً من السماح لنظام Azure الأساسي بتحديد LUN المناسب، فاحرص على وجود قرص بالفعل / سيكون موجوداً في LUN 0.

ضع في اعتبارك المثال التالي الذي يعرض مقتطفاً من الإخراج من lsscsi:

[5:0:0:0]    disk    Msft     Virtual Disk     1.0   /dev/sdc 
[5:0:0:1]    disk    Msft     Virtual Disk     1.0   /dev/sdd 

يوجد قرصا البيانات في LUN 0 وLUN 1 (العمود الأول في تفاصيل الإخراج lsscsi[host:channel:target:lun]). يجب أن يكون كلاً القرصين قابلين للوصول من داخل الجهاز الظاهري. إذا قمت يدوياً بتحديد القرص الأول المراد إضافته في LUN 1 والقرص الثاني في LUN 2، فقد لا ترى الأقراص بشكل صحيح من داخل الجهاز الظاهري.

ملاحظة

قيمة host الخاص بـ Azure هي 5 في هذه الأمثلة، ولكنها قد تختلف وفقاً لنوع التخزين الذي تحدده.

سلوك القرص ليس مشكلة Azure، ولكن الطريقة التي تتبع بها نواة Linux مواصفات SCSI. عندما تقوم نواة Linux بفحص ناقل SCSI بحثاً عن الأجهزة المرفقة، يجب العثور على جهاز في LUN 0 حتى يتمكن النظام من مواصلة البحث عن أجهزة إضافية. وعلى هذا النحو:

  • راجع إخراج lsscsi بعد إضافة قرص بيانات للتحقق من وجود قرص في LUN 0.
  • إذا لم يظهر القرص بشكل صحيح داخل الجهاز الظاهري، فتحقق من وجود قرص في LUN 0.

الخطوات التالية

  • لضمان تكوين جهاز Linux الظاهري بشكل صحيح، راجع توصيات تحسين أداء جهاز Linux.
  • قم بتوسيع سعة التخزين الخاصة بك عن طريق إضافة المزيد من الأقراص وتكوين RAID للحصول على أداء إضافي.