อย่างไรก็ตามมีการปรับขนาดดิสก์ของเครื่องเสมือนหรือไม่ พูดการเพิ่มขนาดดิสก์จาก 32GB เป็น 64GB ฉันใช้งาน KVM / Qemu บนเซิร์ฟเวอร์ Ubuntu 11.10 64 บิต ขอบคุณ
อย่างไรก็ตามมีการปรับขนาดดิสก์ของเครื่องเสมือนหรือไม่ พูดการเพิ่มขนาดดิสก์จาก 32GB เป็น 64GB ฉันใช้งาน KVM / Qemu บนเซิร์ฟเวอร์ Ubuntu 11.10 64 บิต ขอบคุณ
คำตอบ:
สำหรับ Distro based ของ Debian คุณควรใช้virt-resize
แทน ตอนนี้จัดการทุกอย่างภายใต้ประทุนแล้ว สมมติว่าภาพของคุณเรียกว่าWin7 (เพราะเหตุใด) สิ่งแรกตรวจสอบให้แน่ใจว่า VM ของคุณปิดตัวลง:
ติดตั้งเครื่องมือ:
# apt-get install libguestfs-tools
รับตำแหน่งของดิสก์ VM ของคุณ:
# virsh dumpxml Win7 | xpath -e /domain/devices/disk/source
Found 2 nodes in stdin:
-- NODE --
<source file="/var/lib/libvirt/images/Win7.img" />
-- NODE --
<source file="/var/lib/libvirt/images/Win7.iso" />
คุณอาจต้องปรับตัว/var/lib/libvirt/images/Win7.img
ในสิ่งต่อไปนี้:
# virt-filesystems --long --parts --blkdevs -h -a /var/lib/libvirt/images/Win7.img
Name Type MBR Size Parent
/dev/sda1 partition 07 100M /dev/sda
/dev/sda2 partition 07 32G /dev/sda
/dev/sda device - 32G -
สร้างดิสก์ 64G ของคุณ:
# truncate -s 64G /var/lib/libvirt/images/outdisk
คุณจะต้องขยาย / dev / sda2 (ไม่ใช่พาร์ติชันสำหรับบูต):
# virt-resize --expand /dev/sda2 /var/lib/libvirt/images/Win7.img /var/lib/libvirt/images/outdisk
Examining /var/lib/libvirt/images/Win7.img ...
100% [progress bar] --:--
**********
Summary of changes:
/dev/sda1: This partition will be left alone.
/dev/sda2: This partition will be resized from 32G to 64G. The
filesystem ntfs on /dev/sda2 will be expanded using the
'ntfsresize' method.
**********
Setting up initial partition table on outdisk ...
Copying /dev/sda1 ...
Copying /dev/sda2 ...
100% [progress bar] 00:00
100% [progress bar] 00:00
Expanding /dev/sda2 using the 'ntfsresize' method ...
Resize operation completed with no errors. Before deleting the old
disk, carefully check that the resized disk boots and works correctly.
ทำการสำรองข้อมูลในกรณีที่ (หรือใช้mv
ถ้าคุณไม่ต้องการสำรองข้อมูล):
# cp /var/lib/libvirt/images/Win7.img /var/lib/libvirt/images/Win7.img.old
# mv /var/lib/libvirt/images/outdisk /var/lib/libvirt/images/Win7.img
ตอนนี้บูต!
สำหรับข้อมูลเพิ่มเติม: man virt-resize
raw
ประเภท หากคุณต้องการรักษาqcow2
ประเภทอินสแตนซ์คุณควรใช้การแปลงเช่น:qemu-img convert -O qcow2 /var/lib/libvirt/images/outdisk /var/lib/libvirt/images/outdisk.qcow2
ฉันขอแนะนำก่อนที่จะทำสิ่งนี้คุณทำสำเนาอิมเมจของดิสก์อย่างสมบูรณ์เหมือนเดิมจากนั้นเมื่อทุกอย่างหมดลงคุณสามารถคัดลอกมันกลับมาเริ่มใหม่ได้
มี 3 สิ่งที่คุณต้องทำ:
1) ทำให้ดิสก์อิมเมจใหญ่ขึ้น ในโฮสต์ของคุณ:
qemu-img resize foo.qcow2 +32G
ตอนนี้แขกของคุณสามารถเห็นดิสก์ที่ใหญ่กว่า แต่ยังมีพาร์ทิชันและระบบไฟล์เก่า
2) ทำให้พาร์ทิชันภายในภาพดิสก์ขนาดใหญ่ คุณต้องบูต LiveCD ในแขกของคุณเนื่องจากคุณจะไม่สามารถยุ่งกับพาร์ติชันที่ติดตั้ง เรื่องนี้มีส่วนเกี่ยวข้องและอาจเป็นส่วนที่อันตรายที่สุด มันค่อนข้างมากที่จะคัดลอกที่นี่ดังนั้นฉันจะเชื่อมโยงแทนตอนนี้ คุณต้องการทำสิ่งนี้:
http://www.howtoforge.com/linux_resizing_ext3_partitions_p2
หรือ 2b) การสร้างพาร์ติชันใหม่นั้นจะง่ายกว่า (และปลอดภัยกว่า) หากคุณต้องการพื้นที่เก็บข้อมูลเพิ่มขึ้น ใช้ fdisk หรือ cfdisk หรืออะไรก็ตามที่คุณรู้สึกสบายใจ - คุณควรเห็นพื้นที่ทั้งหมดที่ไม่ได้ถูกจัดสรรบนดิสก์แขกของคุณตอนนี้
3) ท้ายที่สุดถ้าคุณปรับขนาดพาร์ติชั่นที่มีอยู่ให้สร้างระบบไฟล์ในพาร์ติชั่นที่ใหญ่กว่าใหม่ให้ใหญ่ขึ้น ภายในแขกของคุณ:
resize2fs /dev/sda1
ฉันคิดว่าคำตอบของ Caesium นั้นดีฉันแค่เขียนคำสั่งอื่นเพื่อให้ได้สิ่งเดียวกัน
สมมติว่าคุณมีไฟล์ที่disk.img
มีดิสก์อิมเมจนั่นคือมีตารางพาร์ติชันและพาร์ติชันอย่างน้อยหนึ่งพาร์ติชันและบอกว่าคุณต้องการทำให้พาร์ติชันล่าสุดมีขนาดใหญ่ขึ้น สิ่งที่คุณต้องทำคือการ
1) ทำให้ไฟล์ทั้งหมดใหญ่ขึ้นพูด 4GiB วิธีที่รวดเร็วในการทำคือการใช้dd
dd if=/dev/zero of=disk.img bs=1c seek=4G count=0
2) ทำให้พาร์ทิชันที่ใหญ่ขึ้นโดยใช้ fdisk (ฉันหวังว่าฉันสามารถทำได้ในการแยกหรือเครื่องมือที่ดีกว่า ... ใคร?)
fdisk disk.img
พิมพ์p
เพื่อพิมพ์ตาราง partiton และค้นหาเซกเตอร์เริ่มต้นของพาร์ติชันของคุณตัวอย่างเช่นพาร์ติชัน 2 เริ่มต้นที่เซกเตอร์ 106496
สิ่งที่คุณจะทำคือการลบพาร์ติชันนั้นออกจากตารางพาร์ติชันและสร้างพาร์ติชันใหม่ที่เริ่มต้นที่เซกเตอร์เดียวกัน แต่จบที่พาร์ติชั่นใหม่ จากนั้นพาร์ติชันจะมีระบบไฟล์ที่ถูกต้อง
พิมพ์d
และให้หมายเลขพาร์ติชันเพื่อลบ (อึก!)
พิมพ์n
และกำหนดหมายเลขพาร์ติชันที่ต้องการจากนั้นเริ่มเซกเตอร์ คุณต้องใช้เซกเตอร์เริ่มต้นเหมือนกับที่เคยใช้มาก่อน ในที่สุดก็ให้ภาคปลายหรือเพียงให้ fdisk เลือกภาคที่สูงที่สุดที่คุณสามารถใช้ได้
พิมพ์w
เพื่อเขียนการเปลี่ยนแปลงกลับไปยังไฟล์อิมเมจของดิสก์และออกจาก fdisk
3) ตอนนี้คุณต้องปรับขนาดระบบไฟล์ สำหรับสิ่งนี้คุณต้องการออฟเซ็ตถึง (= ตำแหน่งของ) ระบบไฟล์ภายในอิมเมจของดิสก์ คุณสามารถคำนวณจากหมายเลขเซกเตอร์ถ้าคุณรู้ขนาดเซกเตอร์ (ซึ่งปกติคือ 512) หรือคุณสามารถใช้parted
parted disk.img u b p
( parted
สามารถใช้คำสั่งเป็นอาร์กิวเมนต์บรรทัดคำสั่งดังนั้นนี่หมายถึง 'หน่วยไบต์' และ 'พิมพ์' ดังนั้นจึงพิมพ์ตารางพาร์ติชันและใช้ไบต์เป็นขนาด uint)
สิ่งนี้จะพิมพ์พาร์ติชั่นเริ่มต้นและสิ้นสุด บอกว่าพาร์ทิชันของคุณเริ่มต้นที่ 54525952 losetup
แล้วคุณทำให้อุปกรณ์ย้อนกลับบล็อก
losetup -f --show -o 54525952 disk.img
losetup
บอกคุณที่ dev /dev/loop0
มันเลือกตัวอย่างเช่น ตอนนี้คุณสามารถใช้resize2fs
:
resize2fs /dev/loop0
และในที่สุดก็นำอุปกรณ์ลูปออก
losetup -d /dev/loop0
ทางออกที่ดีที่สุดอยู่ที่นี่:
http://www.linux-kvm.com/content/how-resize-your-kvm-virtual-disk
ฉันคิดว่าสิ่งที่ @Caesium กล่าวไว้นั้นมาจากลิงค์ทางด้านบน
ฉันหวังว่านี่จะช่วยได้
3 ขั้นตอน:
1.qemu-img resize windows.qcow2 +5GB
2.GParted live cd to resize
3.reboot and use os tools to resize
#include <stdio.h>
static unsigned long auxfilesize(FILE* fp) {
unsigned long len=0;
int c=0;
while ( (c = fgetc(fp)) != -1 ) {
len++;
}
return len;
}
static unsigned long aux_copyNBytesFromTo(FILE* from, FILE* to,
unsigned long fromSize,
unsigned long bytes) {
unsigned long iter = 0;
while ( iter++ < fromSize ) {
int c = fgetc(from);
fputc(c, to);
}
iter-=1;
if ( fromSize < bytes ) {
while ( iter++ < bytes ) {
fputc(0, to);
}
}
return iter;
}
int main(int argc, char **argv) {
FILE *from = fopen(argv[1], "rb");
FILE *to = fopen(argv[2], "wb" );
unsigned long l = auxfilesize(from);
rewind(from);
aux_copyNBytesFromTo(from, to, l, (l + l/2)) ;
fclose(from);
fclose(to);
}
โปรแกรมอย่างง่ายนี้เพิ่ม N ไบต์ไปยังจุดสิ้นสุดของอิมเมจเสมือน ฉันใช้อิมเมจพาร์ติชัน Paragon สำหรับ Windows XP เพื่อรวมรูปภาพที่สร้างขึ้นใหม่ ทำงานได้ที่นี่
dd
หรือtruncate
...
virsh edit virt_name
และเปลี่ยนเส้นทางไปยังแหล่งที่มาของดิสก์เป็นรูปแบบใหม่ ถ้าไม่ได้ผลให้เปลี่ยนกลับมาลองใหม่อีกครั้ง มีจุดไม่มากจริง ๆ ในการมี 3 ภาพเมื่อคุณสามารถทำได้ด้วย 2