Có cách nào để thay đổi kích thước đĩa của máy ảo không? Nói tăng kích thước đĩa từ 32 GB lên 64 GB. Tôi đang chạy KVM / Qemu trên máy chủ Ubuntu 11.10 64 bit. Cảm ơn.
Có cách nào để thay đổi kích thước đĩa của máy ảo không? Nói tăng kích thước đĩa từ 32 GB lên 64 GB. Tôi đang chạy KVM / Qemu trên máy chủ Ubuntu 11.10 64 bit. Cảm ơn.
Câu trả lời:
Trên bản phân phối dựa trên Debian, bạn nên sử dụng virt-resize
thay thế. Điều này xử lý khá nhiều tất cả mọi thứ dưới mui xe bây giờ. Giả sử hình ảnh của bạn được gọi là Win7 (tại sao không?). Điều đầu tiên đảm bảo VM của bạn bị tắt:
Cài đặt công cụ:
# apt-get install libguestfs-tools
Lấy vị trí của đĩa VM của bạn:
# 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" />
Bạn có thể cần phải thích nghi với /var/lib/libvirt/images/Win7.img
những điều sau đây:
# 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 -
Tạo đĩa 64G của bạn:
# truncate -s 64G /var/lib/libvirt/images/outdisk
Bạn sẽ cần mở rộng / dev / sda2 (không phải phân vùng khởi động):
# 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.
Tạo một bản sao lưu chỉ trong trường hợp (hoặc sử dụng mv
nếu bạn không muốn sao lưu):
# 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
Bây giờ khởi động!
Để biết thêm thông tin: người đàn ông đức thay đổi kích thước
raw
loại. nếu bạn muốn duy trì qcow2
loại ví dụ , bạn nên áp dụng một chuyển đổi như:qemu-img convert -O qcow2 /var/lib/libvirt/images/outdisk /var/lib/libvirt/images/outdisk.qcow2
Tôi khuyên bạn nên trước khi thực hiện bất kỳ thao tác nào trong số này, bạn hãy sao chép toàn bộ hình ảnh đĩa, sau đó khi tất cả bị hỏng, bạn có thể sao chép lại để bắt đầu lại.
Có 3 điều bạn cần làm:
1) Làm cho hình ảnh đĩa lớn hơn. Trong máy chủ của bạn:
qemu-img resize foo.qcow2 +32G
Bây giờ khách của bạn có thể thấy một đĩa lớn hơn, nhưng vẫn có các phân vùng và hệ thống tệp cũ.
2) Làm cho phân vùng bên trong hình ảnh đĩa lớn hơn. Bạn cần khởi động LiveCD trong máy khách của mình vì điều này vì bạn sẽ không thể gây rối với phân vùng được gắn kết. Điều này khá liên quan và có lẽ là phần nguy hiểm nhất. Nó khá nhiều để sao chép ở đây, vì vậy bây giờ tôi sẽ chỉ liên kết. Bạn muốn làm một cái gì đó như thế này:
http://www.howtoforge.com/linux_resizing_ext3_partitions_p2
HOẶC 2b) tạo phân vùng mới sẽ đơn giản hơn (và an toàn hơn) nếu bạn chỉ muốn có thêm dung lượng lưu trữ. Sử dụng fdisk hoặc cfdisk hoặc bất cứ điều gì bạn cảm thấy thoải mái - bạn sẽ thấy toàn bộ không gian chưa được phân bổ trên đĩa khách của mình ngay bây giờ.
3) Cuối cùng, nếu bạn thay đổi kích thước phân vùng hiện tại của mình, hãy làm cho hệ thống tệp bên trong phân vùng mới lớn hơn lớn hơn (đây thực sự là trong hướng dẫn được liên kết ở trên). Bên trong khách của bạn:
resize2fs /dev/sda1
Tôi nghĩ rằng câu trả lời của Caesium là tốt, tôi chỉ muốn viết ra một số lệnh khác để đạt được điều tương tự.
Giả sử bạn có một tệp disk.img
có hình ảnh đĩa, tức là nó có bảng phân vùng và một hoặc nhiều phân vùng và nói rằng bạn muốn làm cho phân vùng cuối cùng lớn hơn. Những gì bạn phải làm là
1) làm cho toàn bộ tập tin lớn hơn, giả sử 4GiB. Một cách nhanh chóng để làm điều đó là sử dụngdd
dd if=/dev/zero of=disk.img bs=1c seek=4G count=0
2) làm cho phân vùng lớn hơn bằng cách sử dụng fdisk (tôi ước tôi có thể làm điều này trong một phần hoặc một số công cụ đẹp hơn ... Bất cứ ai?)
fdisk disk.img
Nhập p
để in bảng partiton và tìm khu vực bắt đầu của phân vùng của bạn, ví dụ phân vùng 2 bắt đầu tại sector 106496.
Những gì bạn sẽ làm là xóa phân vùng đó khỏi bảng phân vùng và tạo một phân vùng mới bắt đầu tại cùng một khu vực nhưng kết thúc ở một phân vùng sau. Sau đó, phân vùng sẽ chứa một hệ thống tập tin hợp lệ.
Nhập d
và cho số phân vùng để xóa. (Nuốt chửng!)
Nhập n
và đưa ra số phân vùng mong muốn, và sau đó là khu vực bắt đầu. Bạn PHẢI sử dụng cùng một khu vực bắt đầu như đã được sử dụng trước đó. Cuối cùng cung cấp cho khu vực kết thúc hoặc chỉ để fdisk chọn khu vực cao nhất bạn có thể sử dụng.
Nhập w
để ghi các thay đổi trở lại tệp hình ảnh đĩa và thoát fdisk.
3) Bây giờ bạn cần thay đổi kích thước hệ thống tập tin. Đối với điều này, bạn cần hệ số tập tin offset (= vị trí của) bên trong ảnh đĩa. Bạn có thể tính toán số này từ số ngành nếu bạn biết kích thước của khu vực (thường là 512) hoặc bạn có thể sử dụngparted
parted disk.img u b p
( parted
có thể lấy các lệnh làm đối số dòng lệnh, do đó, điều này có nghĩa là 'byte đơn vị' và 'in', do đó, nó in bảng phân vùng và sử dụng byte làm kích thước uint.)
Điều này in ra phân vùng bắt đầu và kết thúc. Giả sử phân vùng của bạn bắt đầu từ 54525952, sau đó bạn tạo một thiết bị chặn vòng lặp với losetup
.
losetup -f --show -o 54525952 disk.img
losetup
cho bạn biết dev mà nó đã chọn, ví dụ /dev/loop0
. Bây giờ bạn có thể sử dụng resize2fs
:
resize2fs /dev/loop0
và cuối cùng loại bỏ thiết bị lặp
losetup -d /dev/loop0
Giải pháp tốt nhất được tìm thấy ở đây:
http://www.linux-kvm.com/content/how-resize-your-kvm-virtual-disk
Tôi nghĩ những gì @Caesium nói được đưa ra từ liên kết chính thức ở trên
Hy vọng điều này có thể giúp cho bạn.
3 bước:
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);
}
Chương trình đơn giản này thêm N byte vào cuối ảnh ảo. Tôi đã sử dụng hình ảnh phân vùng Paragon cho Windows XP để hợp nhất các hình ảnh mới được tạo. Hoạt động tốt ở đây.
dd
hoặc truncate
...
virsh edit virt_name
và thay đổi đường dẫn đến nguồn của đĩa sang hình mới. Sau đó, nếu nó không hoạt động, chỉ cần thay đổi lại và thử lại. Thật sự không có nhiều điểm khi có 3 hình ảnh khi bạn có thể làm điều đó với 2.