שאלה כיצד מגדילים את שטח הדיסק של אורח KVM?


אני הגדרת אורח אובונטו על מארח KOSM CentOS עם בתחילה 6GB של שטח דיסק. כיצד אוכל להגדיל את שטח הדיסק של האורח מאובונטו משורת הפקודה?

עריכה # 1: אני משתמש בקובץ תמונת דיסק (qemu).


84
2017-10-24 14:23




האם אתה משתמש ב- LVM או בתמונת דיסק בקובץ? - Selivanov Pavel


תשובות:


  1. לעצור את VM
  2. לרוץ qemu-img resize vmdisk.img +10G כדי להגדיל את גודל התמונה על ידי 10Gb
  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, ו blockio לחסום)

לטוב או לרע, הפקודות הבאות יפעלו גם אם הדיסק הווירטואלי של היעד מותקן. זה יכול להיות שימושי בסביבות שבהן הדיסק לא ניתן unmounted (כגון מחיצת השורש), VM חייב להישאר על, ו בעל המערכת מוכן להניח את הסיכון של שחיתות נתונים. כדי להסיר את הסיכון, אתה צריך להיכנס VM ו unmount את הדיסק היעד הראשון, משהו זה לא תמיד אפשרי.

בצע את הפעולות הבאות מה- 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 (שלי הוא מיום 08-08) אומר:אזהרה: לעולם אל תשתמש ב- qemu-img כדי לשנות תמונות בשימוש על-ידי מכונה וירטואלית פועלת או כל תהליך אחר; זה עלול להרוס את התמונה. כמו כן, שים לב כי שאילתה של תמונה כי הוא להיות שונה על ידי תהליך אחר עלול להיתקל במצב לא עקבי. "אז אני לא בטוח אם (הצעד הראשון) בטוח כאשר המכונה הווירטואלית עדיין פועל. - user44400
לא עובד על centos7 + kvm - e-info128
זה עבד בצורה מושלמת בשבילי. באמצעות התקני הצמד ו- Virtio Block. אנו מאחסנים נתוני יישום / db MySQL במחיצה נפרדת. עצור את היישומים הזמינים במחיצה זו. בטל את זה. שנה את הגודל. fsck. ואז לטעון אותו שוב עם גודל חדש. ללא צורך בכיבוי. - nelaaro


שאלות serverfault אלה דומות אך ספציפיות יותר, KVM דיסק באינטרנט גודל? & Centos Xen שינוי גודל של מחיצת DomU וקבוצת נפח. 1 שואל את השאלה כיצד להגדיל אורח 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 גדול ביד, אתחול נות J ולהרחיב את המחיצה הקיימת לתוך שטח הדיסק החדש שנוסף. זה השלב האחרון בעצם מרחיב את המחיצה OS כך שהוא יכול לעשות שימוש בחלל הנוסף.

שיטה מס '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

      % 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
עבור שיטה # 2, אתה עשוי למצוא lvextend ידני כמו צעד 7: lvextend /dev/Volgroup/lvname /dev/vda2 (הכל על שורה אחת, כאשר / dev / vda2 יהיה נפח פיזי שלך). ללא אפשרויות אחרות, הוא ישתמש בגודל המקסימלי בקבוצה זו. - Mike S
שיטה מס '2, שלב 4 לא תפעל אם יש אמצעי אחסון לוגיים בטבלת מחיצה. לאחר בילוי של סוג מורחב של מחיצה, המגזר הזמין הראשון לא יתאים עוד למה שהיה לפני השינויים. למשל אם המגזר הראשון של המחיצה הלוגית שלך היה 1001472, לאחר השינויים יהיה 1003518 (בהנחה דיסק 10G לפני 50G לאחר שינוי גודל). כל אחד יודע איך ליצור מחדש, אם בכלל אפשרי, כרכים לוגיים באותו המגזר הראשון? - ILIV
זה נובע fdisk כברירת מחדל החלת אילוצי יישור (1MB צעד) למחיצות. כדי לעקוף, לקבל ערך ברירת מחדל של 1003518, להיכנס למצב מומחה (x) ולאחר מכן לבחור b ולהגדיר את המגזר הראשון 1001472. See unix.stackexchange.com/a/320447 לפרטים. - ILIV


שינוי גודל והרחבה של מחיצות פנימיות בשלב אחד

היה לי מארח אובונטו עם קובץ qcow2 אורח הקובץ רצה לשנות את גודל הדיסק ולהרחיב את המחיצות המתאימות כל צעד אחד. זה מחייב אותך להגדיר את כלי עזר libvirt אורח filesystem, אבל אלה שימושיים יש סביב בכל מקרה.

השראה מכאן: 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 (או שנה את ה- XML ​​של האורח)

6) לאתחל את האורח ולבדוק את קובץ הדיסק החדש בזהירות לפני מחיקת הקובץ המקורי

7) רווח!


11
2018-06-13 14:02



זה כמעט עושה את העבודה במקרה שלי. לצערי, כמעט. כאשר האורח (שרת CentOS 7) מחדש, הוא מוצא את הדיסק המורחבת unbootable. - Urhixidur
זה עבד נהדר בשבילי. משמיט -o preallocation=metadata יוצר קובץ דליל. עם אפשרות זו מראש מקצה את כל גודל. - Dennis Williamson
מצוין, התשובה הזאת מסמרה לי את זה. תודה רבה! התיעוד "הרשמי" עבור libguestfs (libguestfs.org/virt-resize.1.html), למרבה הצער הוא לא כתוב היטב ובסופו של דבר להיות די מבלבל. - mbello
עבד טוב בשבילי, זכור כי אתה לא ממש צריך להשתמש -o preallocation=metadata ואם אתה לא צריך גם לדלג על truncate שלב. virt-resize יגדל את הקובץ לפי הצורך בכל מקרה. - amoe


אם אתה משתמש LVM בתוך VM הדרך הפשוטה ביותר לעשות את זה woudl להיות להוסיף דיסק וירטואלי חדש ל- 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 יש 30dbyte vdisk, מוגדר באמצעות LVM עם קבוצת נפח אחד בשם vgWWW המכיל שני כרכים לוגיים, אחד עבור swap ואחד עבור כל דבר אחר.

אם 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 אם אתה לא רוצה לגדל את זה כל הדרך, זה היה דוגמה להוסיף 8GB של נפח)
  7. שנה את גודל מערכת הקבצים עם resize2fs /dev/vgWWW/root

הערה: הנ"ל מניח שמות VG / LV זהים כמו הדוגמה שלי אשר לא סביר, לשנות לפי הצורך, גם אם VM כבר היה כונן וירטואלי שנקרא vdb החדש יהיה משהו אחר (vdc, וכן הלאה)

הערה:  resize2fs רק לעבוד על ext2, ext3 ו ext4 filesystem. אם אתה משתמש במשהו אחר זה יהיה שגיאה ולא לעשות כלום.

הערה: כפי שאתה שינוי גודל של מערכת קבצים חיה resize2fs לא ינחה אותך לרוץ fsck הראשון כפי שהוא היה עבור מערכת הקבצים unmounted, זה פשוט להמשיך. ייתכן שתרצה להפעיל בדיקת מערכת קבצים לקריאה בלבד, אין בעיות לפני שתמשיך.


5
2017-10-24 15:10



זה יכול להיעשות גם עם GUI זה די נחמד centos.org/docs/5/html/Deployment_Guide-en-US/... - Nux


קיימת אפשרות להגדיל את הגודל של הדיסק של VM מבלי לאתחל את ה- VM אם אתה משתמש ב- Virtio drive ו- LVM.

  1. השתמש-מנהל או virsh להגדיר דיסק חדש ריק
  2. הקרנל צריך לראות חדש / dev / vdb
  3. (אופציונלי) יצירת מחיצה ראשית עם fdisk כדי לקבל / dev / vdb1, ולאחר מכן להשתמש kpartx -a / dev / vdb כדי לקרוא מחדש את טבלת המחיצה

  4. השתמש vgextend vg_name / dev / vdb1 (או / dev / vdb אם לא יצרת מחיצה)

  5. השתמש lvextend -l + 100% בחינם / 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 

ללכת לעשות את הדיסק rescan ואחרי שאתה יכול לעשות את גודל lvm.


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 בטרמינל) *.

מצאתי את GUI די אינטואיטיבי, אבל בצע את השלבים הבאים אם יש לך בעיות.

  1. פתח "ישויות לא מסודרות" ומצא את הכונן החדש שלך.
  2. לאחר בחירת כונן חדש, מתחת לתמונה אתה צריך למצוא לחצן אתחול. לחץ על זה.
  3. זה ישאל אותך על מחיצות - אתה לא צריך את זה.
  4. בסיום, הוסף את הכונן שלך לקבוצת העוצמה הקיימת.
  5. לבסוף אתה צריך לגדול נפח הגיוני שלך (ים) - זה נעשה בתצוגה לוגית של הקבוצה על ידי עריכת המאפיינים של עוצמת הקול שלך.
  6. שמור שלך לעשות. אין צורך להפעיל מחדש את VM.

הערה! לפחות ב- CentOS 6 LVM GUI אינו מותקן כברירת מחדל, אך ניתן להתקין אותו yum install system-config-lvm.


1
2018-06-07 16:12





  1. כבה את ה - VM
  2. שינוי גודל התמונה:

    qemu-img resize vmdisk.img +16G
    

    מגדיל את גודל התמונה ב 16 GB.

  3. אם התמונה שלך יש GPT (GUID מחיצה טבלה) אז גודל הכונן המשמש GPT יהיה שונה מהגודל החדש, אתה צריך לתקן את זה עם gdiskYou

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

    או עם partedYou

    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 או ext4You

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

1
2018-04-05 22:32