web-dev-qa-db-ja.com

KVMでオンラインでディスクのサイズを変更できますか?

私たちは、KVM Linux仮想化のためにいくつかのプロジェクトで評価しています。すべてが順調に進んでいます。しかし、私たちの要件の1つは、再起動または取得せずに実行中のゲストにディスク領域を追加できることですオフラインです。これはKVMで可能ですか?

これまでに見つけた唯一のこと(ただし、まだテストしていません)は、マシンにディスクをホットプラグする機能です。このルートを使用すると、常に新しいディスクをゲストのLVMボリュームグループに追加して、選択した論理ボリュームを拡張できます。このアプローチの最大の欠点は、時間の経過に伴って、ゲストの仮想ディスクの数が変化する可能性があることです。 「実際の」ディスク領域はSANを介してホストに提供されるため、いつでもいつでもホストに領域を追加できます。

15
Eil

機械を落とさずにそれをやりたいのなら、あなたが言ったことをやっていることだと思います。

SANからすぐに仮想マシンのLUNを割り当てて、そこのスペースを管理するだけではどうですか?ライブマイグレーションなどの機能を使用したい場合は、これがより効果的です。

KVMはQEMUに基づいているため、画像フォーマットのサポートはすべてそのプロジェクトからのものです。これが良い サイズ変更の方法 Qemu/KVMがサポートするさまざまなフォーマットです。しかし、Qemuフォーラムは、ここで確かな答えが得られない場合にこの質問をするのに適した場所です。

理想的でない可能性のある別のオプションは、ドライブに本当に大きなqcow2またはその他のスパースイメージフォーマットを使用することです。したがって、各マシンにOS用の小さなドライブとLVMの下のデータ用の大きなスパースイメージを与えることができます。これにより、少なくとも、管理する必要がある仮想ドライブ/イメージの数が維持されます。しかし、このシンプロビジョニングは問題になる可能性があります。ただし、これを1000台のマシンで行うと、誰もが表示される空き領域を使用することになります。

XEN現在、同じ制限があると思います。

4
3dinfluence

私はそれが古い質問であることを知っていますが、解決策を探している間にそれを見つけました。

今日はisマシンのハードドライブのサイズを変更することが可能です。私はここで働く方法を見つけました:

https://bugzilla.redhat.com/show_bug.cgi?id=648594

次の手順を実行する必要があります。

  1. サイズを変更するハードドライブのファイル名とKVMデバイス名を確認します。

    root@vhstage02:/data# virsh dumpxml test | xpath -e /domain/devices/disk
    Found 2 nodes in stdin:
    -- NODE --
    <disk type="file" device="disk">
      <driver name="qemu" type="qcow2" />
      <source file="/data/test.img" />
      <backingStore />
      <target dev="vda" bus="virtio" />
      <alias name="virtio-disk0" />
      <address type="pci" domain="0x0000" bus="0x00" slot="0x04" function="0x0" />
    </disk>
    -- NODE --
    <disk type="file" device="cdrom">
      <driver name="qemu" type="raw" />
      <source file="/data/images/debian-8.2.0-AMD64-netinst.iso" />
      <backingStore />
      <target dev="hda" bus="ide" />
      <readonly />
      <alias name="ide0-1-1" />
      <address type="drive" controller="0" bus="1" target="0" unit="1" />
    </disk>
    

私たちにとって興味深いのはディスクです。 sourceおよびaliasブロックを探す必要があります。私の場合、ファイル名はtest.img、エイリアス名はvirtio-disk0です。この名前の前にdrive-を付加して、qemuドライブ名を取得する必要があります。

  1. ここで実際にqemuモニターを使用してドライブのサイズを変更します。

    virsh qemu-monitor-command test block_resize  drive-virtio-disk0  100G --hmp
    

ファイル名が.img拡張子なしで使用され、drive-がディスクエイリアスに追加されたことに注意してください。 100Gは、必要なドライブの最終的なサイズです。

  1. マシンにログインし、実際のサイズが変更されたことを確認します。

    root@test:~# fdisk -l
    
    Disk /dev/vda: 100 GiB, 107374182400 bytes, 209715200 sectors
    Units: sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    Disklabel type: dos
    Disk identifier: 0x7e6e7f71
    
    Device     Boot  Start       End   Sectors  Size Id Type
    /dev/vda1  *      2048    499711    497664  243M 83 Linux
    /dev/vda2       501758 167770111 167268354 79.8G  5 Extended
    /dev/vda5       501760 167770111 167268352 79.8G 8e Linux LVM
    

それでおしまい!これで、新しいパーティションを作成するか、既存のパーティションのサイズを変更できます。

15
alexK

AFAIK、これは不可能です-新しいディスクイメージを追加できます。指摘したように、LVMボリュームに新しいイメージを追加することもできますが、アクティブな起動可能なディスクイメージのサイズを変更するには、それをシャットダウンできる必要があります。パーティションをダウンして編集します。

これは良い説明です 画像を拡大します。シャットダウンが必要ですが、おそらく--nonsparse imageオプションを避け、gpartedディスクをisoファイルにddしてKVMゲストにマウントする場合は、おそらく数分のダウンタイムで済むでしょう。あらかじめ。お役に立てれば。

4
nedm

Linuxシステムの実行中に、ディスク間でLinuxシステムを移動することができます。制限は、使用中のpartitionsがあるディスクではpartitionsを変更できないことです。

これを行うには、ルートファイルシステムがLVM上にある必要があります。これは、多くの場合、個別のブートファイルシステムが必要であることを意味します(ただし、これは必須ではありません。簡単にするだけです)。

新しいディスクを接続したら、vgextendを使用してディスクをLVMに追加し、pvmoveを使用してrootfsを新しいディスクに移動し、lvextendとresize2fsを使用してそれぞれ論理ボリュームとファイルシステムを拡張し、vgreduceを使用してボリュームから古いディスクを削除します。グループ。削除したら、古いボリュームを取り外すことができます。

単純なケースでは、ブートファイルシステム用の小さなディスクを使用する必要はありません。しかし、それが独自のものである場合、それをアンマウントして簡単に取り外し、新しいものを差し込み、システムを停止せずにブートディスクを再構築します。 (実行中にクラッシュしないでください)

注:resize2fsはファイルシステムを縮小することもできます。

3
Robert

Atmは不可能ですが、開発中の機能です。代わりにできることは、VMからiSCSIターゲットに接続し、SAN側でそのターゲット上のスペースを管理することです。

0
dyasny