Есть ли способ изменить размер диска виртуальной машины? Скажем, увеличение размера диска с 32 до 64 ГБ. Я использую KVM / Qemu на сервере Ubuntu 11.10 64bit. Спасибо.
На базирующемся дистрибутиве 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
Теперь загрузитесь!
Для большего количества информации: человек virt-изменяет-размер
Я думаю, что ответ Цезия прекрасен, я был бы точно так же, как для записи некоторых других команд для достижения того же самого.
Предположите, что у Вас есть файл disk.img
с образом диска, т.е. это имеет таблицу разделов и один или несколько разделов, и скажите, что Вы хотите сделать последний раздел больше. То, что необходимо сделать, к
1) сделайте целый файл больше, скажите 4 ГиБ. Быстрый способ сделать это состоит в том, чтобы использовать 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
может взять команды в качестве параметров командной строки, таким образом, это означает 'байты единицы' и 'печать', таким образом, она печатает таблицу разделов и использует байты в качестве размера uint.)
Это распечатывает раздел, запускается и заканчивается. Скажите, что Ваш раздел запускается по телефону 54525952, затем Вы делаете обратную петлю блочными устройствами с losetup
.
losetup -f --show -o 54525952 disk.img
losetup
говорит Вам, какой dev это выбрало, например /dev/loop0
. Теперь можно использовать resize2fs
:
resize2fs /dev/loop0
и наконец удалите циклическое устройство
losetup -d /dev/loop0
#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 в конец виртуального изображения. Я использовал Образцовое изображение раздела для Windows XP для слияния недавно созданных изображений. Работы хорошо здесь.
Лучшее решение найдено здесь:
http://www.linux-kvm.com/content/how-resize-your-kvm-virtual-disk
[ 114] Я думаю, что то, что сказал @Caesium, дано по приведенной выше официальной ссылке
Надеюсь, это поможет.
3 шага:
1.qemu-img resize windows.qcow2 +5GB
2.GParted live cd to resize
3.reboot and use os tools to resize
Я рекомендую, прежде чем делать что-либо из этого, взять полную копию образа диска, как есть, затем, когда все сломается, вы можете скопировать его обратно, чтобы начать все сначала.
Есть 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