توسيع الأقراص الثابتة الظاهرية على جهاز ظاهري يعمل بنظام Linux

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

توضح هذه المقالة كيفية توسيع الأقراص المدارة لجهاز Linux الظاهري (VM). يمكنك إضافة أقراص بيانات لتوفير مساحة تخزين أكبر، ويمكنك أيضا توسيع قرص بيانات موجود. عادةً ما يكون حجم القرص الثابت الظاهري الافتراضي لنظام التشغيل سعة 30 غيغابايت على جهاز ظاهري يعمل بنظام Linux في Azure. تتناول هذه المقالة توسيع أقراص نظام التشغيل أو أقراص البيانات. لا يمكنك توسيع حجم وحدات التخزين المخططة.

يبلغ الحد الأقصى لسعة قرص نظام التشغيل 4095 غيغابايت. ومع ذلك، يتم تقسيم العديد من أنظمة التشغيل مع سجل التمهيد الرئيسي (MBR) بشكل افتراضي. يحد MBR من الحجم القابل للاستخدام إلى 2 TiB. إذا كنت بحاجة إلى أكثر من 2 تيرابايت، ففكر في إرفاق أقراص البيانات لتخزين البيانات. إذا كنت بحاجة إلى تخزين البيانات على قرص نظام التشغيل وتتطلب مساحة إضافية، فقم بتحويلها إلى جدول أقسام GUID (GPT).

تحذير

تأكد دائما من أن نظام الملفات الخاص بك في حالة صحية، وسيدعم نوع جدول قسم القرص (GPT أو MBR) الحجم الجديد، وتأكد من نسخ بياناتك احتياطيا قبل إجراء عمليات توسيع القرص. لمزيد من المعلومات، راجع تشغيل سريع لنسخة احتياطية من Azure.

تحديد كائن قرص بيانات Azure داخل نظام التشغيل

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

ابدأ بتحديد العلاقة بين استخدام القرص ونقطة التحميل والجهاز، باستخدام df الأمر .

df -Th
Filesystem                Type      Size  Used Avail Use% Mounted on
/dev/sda1                 xfs        97G  1.8G   95G   2% /
<truncated>
/dev/sdd1                 ext4       32G   30G  727M  98% /opt/db/data
/dev/sde1                 ext4       32G   49M   30G   1% /opt/db/log

هنا يمكننا أن نرى، على سبيل المثال، /opt/db/data نظام الملفات ممتلئ تقريبا، ويقع على /dev/sdd1 القسم. يظهر إخراج df مسار الجهاز ما إذا كان القرص مثبتا باستخدام مسار الجهاز أو UUID (المفضل) في fstab. لاحظ أيضا عمود النوع، مما يشير إلى تنسيق نظام الملفات. التنسيق مهم لاحقا.

الآن حدد موقع LUN الذي يرتبط /dev/sdd ب عن طريق فحص محتويات /dev/disk/azure/scsi1. يظهر إخراج الأمر التالي ls أن الجهاز المعروف باسم /dev/sdd داخل نظام التشغيل Linux موجود في LUN1 عند البحث في مدخل Microsoft Azure.

sudo ls -alF /dev/disk/azure/scsi1/
total 0
drwxr-xr-x. 2 root root 140 Sep  9 21:54 ./
drwxr-xr-x. 4 root root  80 Sep  9 21:48 ../
lrwxrwxrwx. 1 root root  12 Sep  9 21:48 lun0 -> ../../../sdc
lrwxrwxrwx. 1 root root  12 Sep  9 21:48 lun1 -> ../../../sdd
lrwxrwxrwx. 1 root root  13 Sep  9 21:48 lun1-part1 -> ../../../sdd1
lrwxrwxrwx. 1 root root  12 Sep  9 21:54 lun2 -> ../../../sde
lrwxrwxrwx. 1 root root  13 Sep  9 21:54 lun2-part1 -> ../../../sde1

توسيع القرص المُدار لـ Azure

توسعة دون وقت تعطل

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

تحتوي هذه الميزة على القيود التالية:

  • مدعوم فقط لأقراص البيانات.
  • إذا كان القرص 4 تيرابايت أو أقل، يجب إلغاء تخصيص الجهاز الظاهري وفصل القرص قبل توسيعه إلى ما بعد 4 تيرابايت. إذا كان القرص أكبر من 4 تيرابايت بالفعل، يمكنك توسيعه دون إلغاء تخصيص الجهاز الظاهري وفصل القرص.
  • غير مدعوم لأقراص Ultra أو أقراص Premium SSD v2.
  • غير معتمد للأقراص المشتركة.
  • تثبيت واستخدام إما:
  • غير متوفر على بعض الأجهزة الظاهرية الكلاسيكية. استخدم هذا البرنامج النصي للحصول على قائمة بوحدات SKU للأجهزة الظاهرية الكلاسيكية التي تدعم التوسع دون وقت تعطل.

توسيع Azure Managed Disk

تأكد من تثبيت أحدث إصدار من واجهة Azure CLI وتسجيل الدخول إلى حساب Azure باستخدام az login.

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

في النماذج التالية، استبدل أسماء معلمات الأمثلة مثل myResourceGroup و myVM بالقيم الخاصة بك.

هام

إذا كان القرص الخاص بك يفي بالمتطلبات في التوسع دون وقت تعطل، يمكنك تخطي الخطوتين 1 و3.

  1. لا يمكن تنفيذ العمليات على الأقراص الثابتة الظاهرية مع تشغيل الجهاز الظاهري. بادر بإلغاء تخصيص جهاز ظاهري مع az vm deallocate. في المثال التالي، سيتم إلغاء تخصيص الجهاز الظاهري المُسمى myVM في مجموعة الموارد المُسماة myResourceGroup:

    az vm deallocate --resource-group myResourceGroup --name myVM
    

    إشعار

    يجب إلغاء تخصيص الجهاز الظاهري لتوسيع القرص الثابت الظاهري. إيقاف الجهاز الظاهري مع az vm stop لا يحرر موارد الحوسبة. لتحرير موارد الحساب، استخدم az vm deallocate.

  2. عرض قائمة بالأقراص المُدارة في مجموعة موارد باستخدام قائمة أقراص az. يعرض المثال التالي قائمة بالأقراص المُدارة في مجموعة الموارد المُسماة myResourceGroup:

    az disk list \
        --resource-group myResourceGroup \
        --query '[*].{Name:name,Gb:diskSizeGb,Tier:accountType}' \
        --output table
    

    بادر بتوسيع القرص المطلوب باستخدام az disk update. المثال التالي يوسِّع القرص المُدار المُسمى myDataDisk إلى 200 غيغابايت:

    az disk update \
        --resource-group myResourceGroup \
        --name myDataDisk \
        --size-gb 200
    

    إشعار

    عندما توسِّع قرص مُدار، يتم تقريب الحجم المحدث إلى أقرب حجم للقرص المُدار. للحصول على جدول بأحجام الأقراص المُدارة وطبقاتها المتوفرة، راجع نظرة عامة على الأقراص المُدارة في Azure - الأسعار والفواتير.

  3. ابدأ تشغيل جهازك الظاهري باستخدام az vm start. في المثال التالي، سيبدأ الجهاز الظاهري المُسمى myVM في مجموعة الموارد المُسماة myResourceGroup:

    az vm start --resource-group myResourceGroup --name myVM
    

توسيع قسم القرص ونظام الملفات

إشعار

في حين أن هناك العديد من الأدوات التي يمكن استخدامها لإجراء تغيير حجم القسم، فإن الأدوات المفصلة في الجزء المتبقي من هذا المستند هي نفس الأدوات المستخدمة من قبل بعض العمليات التلقائية مثل cloud-init. كما هو موضح هنا، growpart توفر الأداة التي تحتوي على gdisk الحزمة توافقا عالميا مع أقراص جدول أقسام GUID (GPT)، حيث لا تدعم الإصدارات القديمة من بعض الأدوات مثل fdisk GPT.

الكشف عن تغيير حجم القرص

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

  1. تحديد الحجم الذي تم التعرف عليه حاليا في السطر الأول من الإخراج من fdisk -l /dev/sda

    sudo fdisk -l /dev/sda
    
    Disk /dev/sda: 256 GiB, 274877906944 bytes, 536870912 sectors
    Disk model: Virtual Disk
    Units: sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 4096 bytes
    I/O size (minimum/optimal): 4096 bytes / 4096 bytes
    Disklabel type: dos
    Disk identifier: 0x43d10aad
    
    Device     Boot Start       End   Sectors  Size Id Type
    /dev/sda1        2048 536870878 536868831  256G 83 Linux
    
  2. 1 إدراج حرف في ملف إعادة التفحص لهذا الجهاز. لاحظ مرجع sda في المثال. سيتغير معرف القرص إذا تم تغيير حجم جهاز قرص مختلف.

    echo 1 | sudo tee /sys/class/block/sda/device/rescan
    
  3. تحقق من التعرف على حجم القرص الجديد الآن

    sudo fdisk -l /dev/sda
    
    Disk /dev/sda: 512 GiB, 549755813888 bytes, 1073741824 sectors
    Disk model: Virtual Disk
    Units: sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 4096 bytes
    I/O size (minimum/optimal): 4096 bytes / 4096 bytes
    Disklabel type: dos
    Disk identifier: 0x43d10aad
    
    Device     Boot Start       End   Sectors  Size Id Type
    /dev/sda1        2048 536870878 536868831  256G 83 Linux
    

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

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

زيادة حجم قرص نظام التشغيل

تنطبق الإرشادات التالية على توزيعات Linux المعتمدة.

إشعار

قبل المتابعة، قم بعمل نسخة احتياطية كاملة من الجهاز الظاهري الخاص بك، أو على الأقل أخذ لقطة من قرص نظام التشغيل الخاص بك.

في Ubuntu 16.x والإصدارات الأحدث، يتم توسيع القسم الجذر لقرص نظام التشغيل ونظام الملفات تلقائيا للاستفادة من جميع المساحة المتجاورة الحرة على القرص الجذر بواسطة cloud-init، شريطة أن يكون هناك القليل من المساحة الفارغة لعملية تغيير الحجم. في هذه الحالة، يكون التسلسل ببساطة

  1. زيادة حجم قرص نظام التشغيل كما هو مفصل سابقا
  2. أعد تشغيل الجهاز الظاهري، ثم قم بالوصول إلى الجهاز الظاهري باستخدام حساب المستخدم الجذر .
  3. تحقق من أن قرص نظام التشغيل يعرض الآن زيادة في حجم نظام الملفات.

كما هو موضح في المثال التالي، تم تغيير حجم قرص نظام التشغيل من المدخل إلى 100 غيغابايت. يعرض نظام الملفات /dev/sda1 المثبت على / الآن 97 غيغابايت.

df -Th
Filesystem     Type      Size  Used Avail Use% Mounted on
udev           devtmpfs  314M     0  314M   0% /dev
tmpfs          tmpfs      65M  2.3M   63M   4% /run
/dev/sda1      ext4       97G  1.8G   95G   2% /
tmpfs          tmpfs     324M     0  324M   0% /dev/shm
tmpfs          tmpfs     5.0M     0  5.0M   0% /run/lock
tmpfs          tmpfs     324M     0  324M   0% /sys/fs/cgroup
/dev/sda15     vfat      105M  3.6M  101M   4% /boot/efi
/dev/sdb1      ext4       20G   44M   19G   1% /mnt
tmpfs          tmpfs      65M     0   65M   0% /run/user/1000
user@ubuntu:~#

التوسيع دون دعم VM SKU الكلاسيكي لوقت التعطل

إذا كنت تستخدم VM SKU كلاسيكي، فقد لا يدعم توسيع الأقراص دون وقت تعطل.

استخدم البرنامج النصي PowerShell التالي لتحديد وحدات SKU للجهاز الظاهري المتوفرة مع:

Connect-AzAccount
$subscriptionId="yourSubID"
$location="desiredRegion"
Set-AzContext -Subscription $subscriptionId
$vmSizes=Get-AzComputeResourceSku -Location $location | where{$_.ResourceType -eq 'virtualMachines'}

foreach($vmSize in $vmSizes){
    foreach($capability in $vmSize.Capabilities)
    {
       if(($capability.Name -eq "EphemeralOSDiskSupported" -and $capability.Value -eq "True") -or ($capability.Name -eq "PremiumIO" -and $capability.Value -eq "True") -or ($capability.Name -eq "HyperVGenerations" -and $capability.Value -match "V2"))
        {
            $vmSize.Name
       }
   }
}