سؤال كيف تزيد مساحة قرص ضيف KVM؟


أقوم بإعداد ضيف Ubuntu على مضيف CentOS KVM مع 6 جيجابايت من مساحة القرص في البداية. كيف أذهب نحو زيادة مساحة القرص ضيف أوبونتو من سطر الأوامر؟

EDIT # 1: أستخدم ملف صورة قرص (qemu).


84
2017-10-24 14:23


الأصل


هل تستخدم LVM أو صورة قرص في ملف؟ - Selivanov Pavel


الأجوبة:


  1. وقف VM
  2. يركض qemu-img resize vmdisk.img +10G لزيادة حجم الصورة بمقدار 10 غيغابايت
  3. بدء تشغيل VM ، تغيير حجم الأقسام وبنية LVM داخلها بشكل طبيعي

105
2017-10-24 15:32



اه ، ضربني لذلك ، أنا فقط لاحظت خيارات تغيير الحجم على qemu-img في صفحة الرجل. لذلك حفظ بضع خطوات. لطيف! - slm
عملت على إعادة تحجيم بلدي * .qcow2 img على RHEL6.6. شكر! - Jacob Goulden
start the VM, resize the partitions and LVM structure within it normally كيف افعلها؟ يرجى توضيح ذلك. - Waki
لا يمكنك تسليم كل شيء لك على طبق. إذا كنت قد حاولت وفشلت في تغيير حجم الأقسام أو LVs ، فافتح سؤالًا جديدًا ، وصف ما جربته وما لم ينجح - dyasny
لتغيير حجم الأقسام و LVM ، اتبع جميع الخطوات كما هو موضح في هذه المقالة الممتازة: sandilands.info/sgordon/... - skonsoft


طريقة عبر الإنترنت (باستخدام qemu و libvirt و virtio-block)

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

قم بإجراء ما يلي من برنامج Hypervisor KVM.

  1. قم بزيادة حجم ملف صورة القرص نفسه (حدد المبلغ المطلوب زيادته):

    qemu-img resize <my_vm>.img +10G
    
  2. الحصول على اسم جهاز virtio ، عن طريق قذيفة libvirt (drive-virtio-disk0 في هذا المثال):

    virsh qemu-monitor-command <my_vm> info block --hmp
      drive-virtio-disk0: removable=0 io-status=ok file=/var/lib/libvirt/images/<my_vm>.img ro=0 drv=raw encrypted=0
      drive-ide0-1-0: removable=1 locked=0 tray-open=0 io-status=ok [not inserted]
    
  3. إشارة سائق virtio للكشف عن الحجم الجديد (حدد إجمالي السعة الجديدة):

    virsh qemu-monitor-command <my_vm> block_resize drive-virtio-disk0 20G --hmp
    

ثم تسجيل الدخول إلى VM. جري dmesg يجب أن تقرير أن القرص virtio الكشف عن تغيير القدرات. عند هذه النقطة ، يمكنك المتابعة وتغيير حجم الأقسام وبنية LVM حسب الحاجة.


24
2017-09-22 23:08



صفحة الرجل ل qemu-img (لي مؤرخ 2016-05-08) تقول: "تحذير: لا تستخدم أبدًا qemu-img لتعديل الصور المستخدمة بواسطة جهاز ظاهري قيد التشغيل أو أي عملية أخرى ؛ هذا قد يدمر الصورة. أيضاً ، يجب أن تدرك أن الاستعلام عن صورة يتم تعديلها بواسطة عملية أخرى قد يواجه حالة غير متناسقة. "لذا فأنا لست متأكداً ما إذا كانت (الخطوة الأولى) آمنة عندما لا يزال الجهاز الظاهري قيد التشغيل. - user44400
لا يعمل على centos7 + kvm - e-info128
عملت هذه تماما بالنسبة لي. باستخدام ceph و virtio block devices. نخزن بيانات التطبيق / MySQL db على قسم منفصل. قم بإيقاف التطبيقات الوصول إلى هذا القسم. إلغاء تحميلها. حجمه. fsck. ثم تركيبه مرة أخرى بالحجم الجديد. لا يوجد اغلاق اللازمة. - nelaaro


هذه الأسئلة المتعلقة بالخادم مشابه ولكنها أكثر تحديدًا ، KVM القرص عبر الإنترنت حجم؟ و Centos Xen يقوم بتغيير حجم قسم وحدة التخزين و DomU. يطرح السؤال الأول سؤالاً حول كيفية زيادة ضيف KVM أثناء اتصاله بالإنترنت ، في حين أن السؤال الثاني هو XEN محدد باستخدام LVM. أنا أسأل كيف لإنجاز هذا في حين أن KVM غير متصل.

ملحوظة: كان هذا الرابط مفيدًا للطريقة رقم 1 ، ويوضح كيفية تحقيق زيادة مساحة قرص KVM (تستند إلى نظام ext3) ، HOWTO: تغيير حجم صورة الجهاز الظاهري KVM.

هناك شيء واحد يجب أن تكون على دراية به مع ضيوف KVM وهو أن الأقسام التي يستخدمونها في الداخل يمكن أن تؤثر على الطريقة التي يمكنك استخدامها لزيادة مساحة القرص.

طريقة 1: أقسام هي ext2 / ext3 / ext4 على أساس

المكسرات من هذه الطريقة هي كما يلي:

# 1. stop the VM
# 2. move the current image
mv mykvm.img mykvm.img.bak

# 3. create a new image
qemu-img create -f raw addon.raw 30G

# 4. concatenate the 2 images
cat mykvm.img.bak addon.raw >> mykvm.img

الآن مع ملف mykvm.img أكبر في اليد ، التمهيد من GParted وتوسيع القسم الموجود في مساحة القرص المضافة حديثًا. هذه الخطوة الأخيرة تمتد في الأساس قسم نظام التشغيل بحيث يمكن الاستفادة من المساحة الإضافية.

الطريقة رقم 2: الأقسام هي LVM

في ما يلي الخطوات التي اتبعتها تقريبًا لتغيير حجم ضيف KVM الذي استخدم LVM داخليًا.

  1. اغلاق VM
  2. إضافة المزيد من المساحة إلى "ملف صورة" الضيف (شيء مثل: cat old.img 10G_addon.raw >> new.img
  3. بدء تشغيل VM (باستخدام new.img تم إنشاؤه حديثا)
  4. تشغيل FDISK داخل VM وحذف وإعادة إنشاء قسم LVM

    % fdisk /dev/vda
    ...
    Device Boot      Start         End      Blocks   Id  System
    /dev/vda1   *           1          13      104391   83  Linux
    /dev/vda2              14        3263    26105625   8e  Linux LVM
    
    Command (m for help): d
    Partition number (1-4): 2
    
    Command (m for help): p
    
    Disk /dev/vda: 48.3 GB, 48318382080 bytes
    255 heads, 63 sectors/track, 5874 cylinders
    Units = cylinders of 16065 * 512 = 8225280 bytes
    
    Device Boot      Start         End      Blocks   Id  System
    /dev/vda1   *           1          13      104391   83  Linux
    
    Command (m for help): n 
    Command action
      e   extended
      p   primary partition (1-4)
    p
    Partition number (1-4): 2
    First cylinder (14-5874, default 14): 14
    Last cylinder or +size or +sizeM or +sizeK (14-5874, default 5874): 
    Using default value 5874
    
    Command (m for help): p
    
    Disk /dev/vda: 48.3 GB, 48318382080 bytes
    255 heads, 63 sectors/track, 5874 cylinders
    Units = cylinders of 16065 * 512 = 8225280 bytes
    
    Device Boot      Start         End      Blocks   Id  System
    /dev/vda1   *           1          13      104391   83  Linux
    /dev/vda2              14        5874    47078482+  83  Linux
    
    Command (m for help): t
    Partition number (1-4): 2
    Hex code (type L to list codes): 8e
    Changed system type of partition 2 to 8e (Linux LVM)
    
    Command (m for help): p
    
    Disk /dev/vda: 48.3 GB, 48318382080 bytes
    255 heads, 63 sectors/track, 5874 cylinders
    Units = cylinders of 16065 * 512 = 8225280 bytes
    
    Device Boot      Start         End      Blocks   Id  System
    /dev/vda1   *           1          13      104391   83  Linux
    /dev/vda2              14        5874    47078482+  8e  Linux LVM
    
    Command (m for help): w
    The partition table has been altered!
    
    Calling ioctl() to re-read partition table.
    
    WARNING: Re-reading the partition table failed with error 16: Device or 
    resource busy.
    The kernel still uses the old table.
    The new table will be used at the next reboot.
    Syncing disks.
    %
    
  5. إعادة تشغيل VM

  6. تغيير حجم وحدة التخزين الفعلية LVM

    % pvdisplay 
      --- Physical volume ---
      PV Name               /dev/vda2
      VG Name               VolGroup00
      PV Size               24.90 GB / not usable 21.59 MB
      Allocatable           yes (but full)
      PE Size (KByte)       32768
      Total PE              796
      Free PE               0
      ...
    
    % pvresize /dev/vda2
    
    % pvdisplay
      --- Physical volume ---
      PV Name               /dev/vda2
      VG Name               VolGroup00
      PV Size               44.90 GB / not usable 22.89 MB
      Allocatable           yes 
      PE Size (KByte)       32768
      Total PE              1436
      Free PE               640
      ...
    
  7. تغيير حجم LVM Logical Volume

      % lvresize /dev/VolGroup00/LogVol00 -l +640
      Extending logical volume LogVol00 to 43.88 GB
      Logical volume LogVol00 successfully resized
    
  8. ينمو نظام الملفات

      % resize2fs /dev/VolGroup00/LogVol00 
      resize2fs 1.39 (29-May-2006)
      Filesystem at /dev/VolGroup00/LogVol00 is mounted on /; on-line resizing required
      Performing an on-line resize of /dev/VolGroup00/LogVol00 to 11501568 (4k) blocks.
      The filesystem on /dev/VolGroup00/LogVol00 is now 11501568 blocks long.
    

ما سبق هو مثال ، لكنني اتبعت الخطوات في هذا الشأن موقع الكتروني


17
2017-10-24 14:36



يبدو أن الطريقة رقم 1 في هذا المنشور لا تعمل بشكل جيد - لا يقوم مدير الجهاز الظاهري في القبعة الحمراء بالإبلاغ عن الحجم الجديد بعد ذلك. يبدو أن الطريقة التي اقترحهاdyasny تعمل بشكل أفضل على الأقل في هذا الصدد. - Iwan Aucamp
IwanAucamp - مثيرة للاهتمام ، وأنا استخدم virt-manager واستخدمت الطريقة رقم 1 & # 2 على نطاق واسع قبل ترحيل خوادم KVM الخاصة بنا إلى إصدار أحدث من KVM (CentOS 5 -> CentOS 6). أنا الآن استخدم qemu-img resize الطريقة كذلك. - slm
بالنسبة إلى الطريقة الثانية ، قد تجد أداة مساعدة lvextend كخطوة رقم 7: lvextend /dev/Volgroup/lvname /dev/vda2 (الكل في سطر واحد ، حيث يكون / dev / vda2 هو حجمك الفعلي). دون أي خيارات أخرى ، فإنه سيتم استخدام الحد الأقصى للحجم في مجموعة وحدة التخزين هذه. - Mike S
لن تعمل الطريقة الثانية ، الخطوة 4 إذا كانت هناك وحدات تخزين منطقية في جدول الأقسام. بعد الاستجمام من النوع الممتد من التقسيم ، لن يتطابق القطاع المتوفر الأول مع ما كان لديه قبل التغييرات. مثلا إذا كان القطاع الأول من القسم المنطقي هو 1001472 ، فبعد التغييرات ستكون 1003518 (بافتراض أن القرص 10G قبل و 50 G بعد تغيير الحجم). أي شخص يعرف كيفية إعادة إنشاء ، إذا كان ذلك ممكنا ، وحدات التخزين المنطقية في نفس القطاع الأول؟ - ILIV
هذا بسبب FDISK افتراضيا تطبيق قيود المحاذاة (خطوة 1MB) إلى أقسام. للتغلب على ، قم بقبول القيمة الافتراضية 1003518 ، أدخل وضع الخبير (x) ثم اختر b وحدد القطاع الأول على 1001472. راجع unix.stackexchange.com/a/320447 للتفاصيل. - ILIV


تغيير حجم الأقسام الداخلية وتوسيعها في خطوة واحدة

كان لدي مضيف Ubuntu مع صورة ملف ضيف qcow2 وأردت تغيير حجم القرص وتوسيع الأقسام المناسبة كلها في خطوة واحدة. يتطلب منك إعداد أدوات نظام الملفات ضيف ضيف libvirt ، ولكن تلك مفيدة ليكون حولها على أي حال.

الإلهام من هنا: http://libguestfs.org/virt-resize.1.html

الأمر الرئيسي هنا هو: virt-resize

  • هذا هو الأداة libvirt
  • يمكن توسيع القرص الضيف وتوسيع الأقسام داخل خطوة واحدة
  • فهي تنسخ القرص ، ولا توسعه في مكانه
    • هذا جيد لأن لديك الأصلي لم يمسها كما دعم

تجهيز:

* Install libvirt file system utilities package 
    * sudo apt-get install libguestfs-tools

* Test to see if it works (it won't) -- you need to see "===== TEST FINISHED OK =====" at the bottom:
    * sudo libguestfs-test-tool

* If you don't see "===== TEST FINISHED OK =====" at the bottom then repair it:
    * sudo update-guestfs-appliance

* Run the test again and verify it works
    * sudo libguestfs-test-tool

الآن قم بما يلي:

1) إغلاق الضيف:

2) تحقق من الحجم الحالي وعرض اسم القسم الذي تريد توسيعه باستخدام أداة libvirt:

sudo virt-filesystems --long --parts --blkdevs -h -a name-of-guest-disk-file

3) قم بإنشاء قرص الإخراج الجديد (40G):

qcow: sudo qemu-img create -f qcow2 -o preallocation=metadata outdisk 40G
img:  sudo truncate -s 40G outdisk

4) قم بنسخ القديم إلى الجديد أثناء توسيع القسم المناسب (بافتراض قسم القرص الخاص بك من الخطوة 2 كان / dev / sda1):

sudo virt-resize --expand /dev/sda1 indisk outdisk

5) إعادة تسمية الملف indisk كنسخة احتياطية ، إعادة تسمية outdisk كـ indisk (أو تعديل XML الضيف)

6) إعادة تشغيل الضيف واختبار ملف القرص الجديد بعناية قبل حذف الملف الأصلي

7) الربح!


11
2018-06-13 14:02



هذا تقريبا يفعل المهمة في حالتي. للأسف ، تقريبا. عندما يتم إعادة تشغيل الضيف (ملقم CentOS 7) ، فإنه يعثر على القرص الموسع غير قابل للتمهيد. - Urhixidur
عملت كبيرة بالنسبة لي. حذف -o preallocation=metadata يخلق ملف متفرق. مع هذا الخيار فإنه يخصص مسبقًا الحجم الكامل. - Dennis Williamson
ممتاز ، هذا الجواب مسمر لي. شكرا جزيلا! الوثائق "الرسمية" لـ libguestfs (libguestfs.org/virt-resize.1.html) ، للأسف ليست مكتوبة بشكل جيد وينتهي الأمر بأنها مربكة جدا. - mbello
عملت بشكل جيد بالنسبة لي ، تذكر أنك لا تحتاج في الواقع لاستخدام -o preallocation=metadata وإذا كنت لا يجب عليك أيضا تخطي truncate خطوة. virt-resize سوف ينمو الملف حسب الاقتضاء على أي حال. - amoe


إذا كنت تستخدم LVM ضمن VM ، فإن أبسط طريقة للقيام بهذا wodl هي إضافة قرص ظاهري جديد إلى VM وتوسيع مجموعة وحدة التخزين ووحدات التخزين المنطقية على ذلك.

لمعرفة ما إذا كنت تستخدم تشغيل LVM sudo pvs; sudo vgs; sudo lvs، ستحصل على شيء من هذا القبيل:

PV         VG     Fmt  Attr PSize  PFree
/dev/vda1  vgWWW  lvm2 a-   30.00g    0

VG     #PV #LV #SN Attr   VSize  VFree
vgWWW    1   2   0 wz--n- 30.00g    0

LV   VG    Attr   LSize 
root vgWWW -wi-ao 28.80g
swap vgWWW -wi-ao  1.19g

إذا كان نظام التشغيل VM يستخدم LVM. في المثال أعلاه ، يحتوي VM على vdisk 30Gbyte ، تم تكوينه باستخدام LVM مع مجموعة واحدة من وحدات التخزين تسمى vgWWW تحتوي على وحدتي منطقية ، واحدة للتبديل وواحدة لكل شيء آخر.

إذا كان LV قيد الاستخدام في VM:

  1. اغلاق VM
  2. على المضيف إنشاء ملف قرص ظاهري جديد وإضافته إلى VM
  3. إعادة تشغيل VM وتسجيل الدخول
  4. قم بتمييز محرك الأقراص الجديد على أنه وحدة تخزين فعلية لـ LVM باستخدام sudo pvcreate /dev/vdb
  5. توسيع مجموعة وحدة التخزين لتضمين هذه الكتلة الجديدة من القرص sudo vgextend vgWWW /dev/vdb
  6. قم بتوسيع وحدة التخزين المنطقية للحصول على المساحة الجديدة باستخدام sudo lvextend --extents +100%FREE /dev/vgWWW/root (أو شيء من هذا القبيل sudo lvextend --size +8G /dev/vgWWW/root إذا كنت لا تريد أن تنمو على طول الطريق ، فإن هذا المثال سيضيف 8 جيجا إلى وحدة التخزين)
  7. تغيير حجم نظام الملفات مع resize2fs /dev/vgWWW/root

ملحوظة: يفترض ما سبق أن أسماء vg / lv هي نفس المثال الذي من غير المحتمل ، وتغييره حسب الاقتضاء ، أيضًا إذا كان جهاز VM يحتوي على محرك أقراص افتراضي يسمى vdb الجديد سيكون شيئًا آخر (vdc، وما إلى ذلك وهلم جرا)

ملحوظة:  resize2fs سوف تعمل فقط على نظام الملفات ext2 و ext3 و ext4. إذا كنت تستخدم شيئًا آخر ، فسيظهر خطأ ولن تفعل شيئًا.

ملحوظة: أثناء تغيير حجم نظام ملفات مباشر resize2fs لن يطالبك بالتشغيل fsck لأول مرة كما هو الحال بالنسبة لنظام ملفات غير مرتبط ، سوف يمضي قدمًا. قد ترغب في تشغيل نظام ملفات للقراءة فقط لا توجد مشاكل قبل المتابعة.


5
2017-10-24 15:10



يمكن أن يتم ذلك أيضًا باستخدام واجهة المستخدم الرسومية (GUI) التي تعتبر رائعة centos.org/docs/5/html/Deployment_Guide-en-US/... - Nux


هناك إمكانية لزيادة حجم القرص الخاص بك VM دون إعادة تشغيل VM إذا كنت تستخدم محرك virtio و LVM.

  1. استخدم virt-manager أو virsh لتحديد قرص فارغ جديد
  2. يجب أن ترى النواة a new / dev / vdb
  3. (اختياري) قم بإنشاء قسم أساسي باستخدام fdisk للحصول على / dev / vdb1 ، ثم استخدم kpartx -a / dev / vdb لإعادة قراءة جدول الأقسام

  4. استخدم vgextend vg_name / dev / vdb1 (أو / dev / vdb إذا لم تقم بإنشاء قسم)

  5. استخدم lvextend -l + 100٪ FREE / dev / vg_name / lv_name
  6. استخدم resize2fs / dev / vg_name / lv_name لتوسيع نظام الملفات لديك

انت انتهيت.


3
2017-07-12 10:25



سأضيف ذلك libguestfs.org/virt-resize.1.htmlيجب أن يساعد أيضا. - FearlessFuture


طريقة أخرى للقيام بذلك

truncate -s +2G vm1.img 

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


2
2018-04-18 17:50





بهذه الطريقة يمكنك توسيع القسم الذي تريده:

    # see what partitions you have? 
    virt-filesystems --long -h --all -a olddisk

    truncate -r olddisk newdisk
    truncate -s +5G newdisk

    # Note "/dev/sda2" is a partition inside the "olddisk" file.
    virt-resize --expand /dev/sda2 olddisk newdisk

شاهد المزيد من الأمثلة هنا.


2
2017-10-01 15:50





إذا كان لديك LVM في جهاز VM الخاص بك ، فهذا أمر سهل وسريع.

  1. إيقاف تشغيل VM (جهاز الضيف).
  2. في جهازك المضيف إضافة جهاز تخزين جديد.
  3. بدوره على الضيف.
  4. افتح النظام -> الإدارة -> إدارة حجم منطقي (أو اكتب sudo system-config-lvm في المحطة) *.

لقد وجدت واجهة المستخدم الرسومية بديهية للغاية ، ولكن اتبع الخطوات التالية إذا كان لديك مشاكل.

  1. افتح "الكيانات غير المحددة" وابحث عن محرك الأقراص الجديد.
  2. بعد اختيار محرك جديد ، أسفل الصورة يجب أن تجد زر تهيئة. اضغطها.
  3. سوف يسألك عن التقسيم - أنت لست بحاجة إليه.
  4. عند الانتهاء من إضافة محرك الأقراص إلى مجموعة التخزين الحالية.
  5. وأخيرًا ، تحتاج إلى زيادة حجم (حجم) منطقي لديك - ويتم ذلك في العرض المنطقي للمجموعة عن طريق تحرير خصائص وحدة التخزين الخاصة بك.
  6. حفظ وانتهاء بك. لا حاجة لإعادة تشغيل VM.

ملحوظة! على الأقل ، لا يتم تثبيت واجهة المستخدم الرسومية لـ CentOS 6 LVM بشكل افتراضي ، ولكن يمكنك تثبيتها باستخدام yum install system-config-lvm.


1
2018-06-07 16:12





  1. اغلاق VM
  2. تغيير حجم الصورة:

    qemu-img resize vmdisk.img +16G
    

    يزيد حجم الصورة بمقدار 16 غيغابايت.

  3. إذا كانت صورتك تحتوي على GPT (جدول تقسيم GUID) ، سيختلف حجم محرك الأقراص المستخدم في GPT عن الحجم الجديد ، فستحتاج إلى إصلاحه باستخدام gdisk:

    MY_DRIVE=/dev/vda
    gdisk $MY_DRIVE <<EOF
    w
    Y
    Y
    EOF
    

    أو مع parted:

    parted $MY_DRIVE print Fix
    

    لسبب ما parted الإصلاح لا يعمل عندما يتم تقديم أي tty (على سبيل المثال عند توفير مع Vagrant) لذلك أستخدم gdisk.

  4. زيادة حجم القسم لملء جميع المساحة المتاحة:

    MY_PARTITION_GUID=$(
    gdisk $MY_DRIVE <<EOF | sed -n -e 's/^Partition unique GUID: //p'
    i
    EOF
    )
    
    MY_PARTITION_FIRST_SECTOR=$(
    gdisk $MY_DRIVE <<EOF | sed -n -e 's/^First sector: \([0-9]\+\).*/\1/p'
    i
    EOF
    )
    
    gdisk $MY_DRIVE <<EOF
    d
    n
    
    $MY_PARTITION_FIRST_SECTOR
    
    
    x
    a
    2
    
    c
    $MY_PARTITION_GUID
    w
    Y
    EOF
    

    ال x a 2 <Enter> جزء اختياري ويحتاج إذا كنت تستخدم BIOS القديم. MY_PARTITION_GUID=... و c $MY_PARTITION_GUID الأجزاء هي أيضا اختيارية وتحتاج فقط إذا كنت تستخدم القسم UUID في /etc/fstab أو في مكان آخر.

  5. إعادة تمهيد أو إعادة قراءة أقسام مع partx -u $MY_DRIVE أو partprobe.

  6. تمديد التقسيم ، سبيل المثال ل ext2، ext3 أو ext4:

    MY_PARTITION="${MY_DRIVE}1"
    resize2fs $MY_PARTITION
    

1
2018-04-05 22:32