回答:
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
さあブート!
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つ以上のパーティションがあるとし、最後のパーティションを大きくしたいとします。あなたがしなければならないことは
1)4GiBなど、ファイル全体を大きくします。それを行う簡単な方法はdd
dd if=/dev/zero of=disk.img bs=1c seek=4G count=0
2)fdiskを使用してパーティションを大きくします(これをpartedまたは他の優れたツールで実行できるといいのですが...誰ですか?)
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
見つかった最適なソリューションは次のとおりです。
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バイトを追加します。Windows XPのParagonパーティションイメージを使用して、新しく作成されたイメージをマージしました。ここで動作します。
dd
またはtruncate
...のような既存のツールを使用できたかもしれません
virsh edit virt_name
、ディスクのソースへのパスを新しいものに変更するだけで済みます。それが機能しない場合は、元に戻して再試行してください。本当に多くのポイントは、あなたが2でそれを行うことができたときに3枚の画像を有することではありません