Jawaban:
Pada distro berbasis Debian Anda harus menggunakannya virt-resize
. Ini menangani hampir semua segalanya di bawah tenda sekarang. Anggap saja gambar Anda disebut Win7 (mengapa tidak?). Hal pertama yang memastikan VM Anda dimatikan:
Instal alat:
# apt-get install libguestfs-tools
Dapatkan lokasi disk VM Anda:
# 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" />
Anda mungkin perlu beradaptasi /var/lib/libvirt/images/Win7.img
dalam hal berikut:
# 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 -
Buat disk 64G Anda:
# truncate -s 64G /var/lib/libvirt/images/outdisk
Anda harus memperluas / dev / sda2 (bukan partisi boot):
# 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.
Buat cadangan untuk berjaga-jaga (atau gunakan mv
jika Anda tidak ingin cadangan):
# 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
Sekarang boot!
Untuk info lebih lanjut: man virt-resize
raw
tipe. jika Anda ingin mempertahankan qcow2
jenis contoh , Anda harus menerapkan konversi seperti:qemu-img convert -O qcow2 /var/lib/libvirt/images/outdisk /var/lib/libvirt/images/outdisk.qcow2
Saya sarankan sebelum melakukan semua ini Anda mengambil salinan lengkap dari disk image seperti apa adanya, maka ketika semuanya rusak Anda dapat menyalinnya kembali untuk memulai dari awal.
Ada 3 hal yang perlu Anda lakukan:
1) Buat disk image lebih besar. Di inang Anda:
qemu-img resize foo.qcow2 +32G
Sekarang tamu Anda dapat melihat disk yang lebih besar, tetapi masih memiliki partisi lama dan sistem file.
2) Buat partisi di dalam disk image lebih besar. Anda perlu mem-boot LiveCD di tamu Anda untuk ini, karena Anda tidak akan dapat mengacaukan dengan partisi yang dipasang. Ini cukup terlibat dan mungkin bagian paling berbahaya. Cukup banyak untuk menyalin di sini, jadi saya hanya akan menautkan untuk sekarang. Anda ingin melakukan sesuatu seperti ini:
http://www.howtoforge.com/linux_resizing_ext3_partitions_p2
ATAU 2b) membuat partisi baru akan lebih mudah (dan lebih aman) jika Anda hanya ingin lebih banyak ruang penyimpanan. Gunakan fdisk atau cfdisk, atau apa pun yang Anda rasa nyaman - Anda akan melihat sejumlah besar ruang yang tidak terisi pada disk tamu Anda sekarang.
3) Akhirnya, jika Anda mengubah ukuran partisi yang ada, buat filesystem di dalam partisi baru yang lebih besar lebih besar (ini sebenarnya ada dalam panduan yang terhubung di atas). Di dalam tamu Anda:
resize2fs /dev/sda1
Saya pikir jawaban Caesium baik-baik saja, saya hanya ingin menuliskan beberapa perintah lain untuk mencapai hal yang sama.
Asumsikan Anda memiliki file disk.img
dengan gambar disk, yaitu memiliki tabel partisi dan satu atau lebih partisi, dan katakan Anda ingin membuat partisi terakhir lebih besar. Yang harus Anda lakukan adalah
1) membuat seluruh file lebih besar, katakanlah 4GiB. Cara cepat untuk melakukannya adalah menggunakandd
dd if=/dev/zero of=disk.img bs=1c seek=4G count=0
2) membuat partisi lebih besar menggunakan fdisk (saya berharap saya bisa melakukan ini di bagian atau beberapa alat yang lebih baik ... Ada orang?)
fdisk disk.img
Ketik p
untuk mencetak tabel partisi dan mencari sektor awal partisi Anda, misalnya partisi 2 dimulai pada sektor 106496.
Apa yang akan Anda lakukan adalah menghapus partisi itu dari tabel partisi dan membuat partisi baru yang dimulai pada sektor yang sama persis tetapi berakhir di yang kemudian. Kemudian partisi tersebut akan berisi sistem file yang valid.
Ketik d
dan berikan nomor partisi untuk dihapus. (Teguk!)
Ketik n
dan berikan nomor partisi yang diinginkan, lalu sektor awal. Anda HARUS menggunakan sektor awal yang sama seperti yang digunakan sebelumnya. Terakhir berikan sektor akhir atau biarkan fdisk memilih sektor tertinggi yang dapat Anda gunakan.
Ketik w
untuk menulis perubahan kembali ke file gambar disk, dan keluar dari fdisk.
3) Sekarang Anda perlu mengubah ukuran sistem file. Untuk ini, Anda perlu offset ke (= posisi) sistem file di dalam gambar disk. Anda dapat menghitung ini dari nomor sektor jika Anda mengetahui ukuran sektor (yang biasanya 512), atau Anda dapat menggunakannyaparted
parted disk.img u b p
( parted
dapat mengambil perintah sebagai argumen baris perintah, jadi ini berarti 'satuan byte' dan 'cetak', sehingga ia mencetak tabel partisi dan menggunakan byte sebagai ukuran uint.)
Ini mencetak partisi dimulai dan berakhir. Katakanlah bahwa partisi Anda dimulai pada 54525952, maka Anda membuat loopback block devices losetup
.
losetup -f --show -o 54525952 disk.img
losetup
memberitahu Anda dev mana yang dipilihnya, misalnya /dev/loop0
. Sekarang Anda dapat menggunakan resize2fs
:
resize2fs /dev/loop0
dan akhirnya lepaskan perangkat loop
losetup -d /dev/loop0
Solusi terbaik ditemukan di sini:
http://www.linux-kvm.com/content/how-resize-your-kvm-virtual-disk
Saya pikir apa yang dikatakan @Caesium diberikan dari tautan resmi di atas
Saya harap ini akan membantu.
3 Langkah:
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);
}
Program sederhana ini menambahkan N byte ke akhir gambar virtual. Saya menggunakan gambar partisi Paragon untuk Windows XP untuk menggabungkan gambar yang baru dibuat. Bekerja dengan baik di sini.
dd
atau truncate
...
virsh edit virt_name
dan mengubah jalur ke sumber disk ke yang baru. Lalu jika itu tidak berhasil, ubah saja kembali dan coba lagi. Tidak banyak gunanya memiliki 3 gambar ketika Anda bisa melakukannya dengan 2.