Відповіді:
На дистрибутиві на основі 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
Я думаю, що відповідь Цезію нормальна, я просто хотів би записати деякі інші команди, щоб досягти того ж.
Припустимо, у вас є файл disk.img
із зображенням диска, тобто він має таблицю розділів та один або кілька розділів, і скажіть, що ви хочете зробити останній розділ більшим. Що ви повинні зробити, це зробити
1) зробіть увесь файл більшим, скажімо, 4GiB. Швидкий спосіб зробити це - використовуватиdd
dd if=/dev/zero of=disk.img bs=1c seek=4G count=0
2) зробіть розділ більшим за допомогою fdisk (я б хотів, щоб я міг це зробити в розлученому або приємнішому інструменті ... Хто-небудь?)
fdisk disk.img
Введіть, p
щоб роздрукувати таблицю розділів і шукайте сектор запуску вашого розділу, наприклад, розділ 2 починається з сектора 106496.
Що ви зробите, це видалити цей розділ з таблиці розділів і створити новий розділ, який починається в точно такому ж секторі, але закінчується на більш пізньому. Тоді розділ буде містити дійсну файлову систему.
Введіть d
і дайте номер розділу для видалення. (Ковтайте!)
Введіть n
і дайте потрібний номер розділу, а потім сектор запуску. Ви ОБОВ'ЯЗКОВО будете використовувати той самий стартовий сектор, як раніше. Нарешті дайте кінцевий сектор або просто дозвольте fdisk вибрати найвищий сектор, який ви можете використовувати.
Введіть, w
щоб записати зміни у файл образу диска, та вийдіть із fdisk.
3) Тепер вам потрібно змінити розмір файлової системи. Для цього вам потрібно зрушити (= положення файлової системи) всередині зображення диска. Ви можете обчислити це з номера сектора, якщо ви знаєте розмір сектору (який, як правило, 512), або ви можете використовуватиparted
parted disk.img u b p
( parted
може приймати команди як аргументи командного рядка, тому це означає "одиничні байти" та "друк", тому вона друкує таблицю розділів і використовує байти як розмір утиліти.)
Це виводить початок і закінчення розділу. Скажіть, що ваш розділ починається з 54525952, тоді ви робите блокові пристрої із зворотним зв'язком losetup
.
losetup -f --show -o 54525952 disk.img
losetup
наприклад, розповідає, якого розробника він вибрав /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
та змінити шлях до джерела диска на новий. Тоді, якщо це не працює, просто змініть його та повторіть спробу. Немає сенсу мати три зображення, коли ти можеш це зробити з 2.