LVM VG をストレージ プールとして使用して KVM ゲスト ディスクのサイズを増やす方法は?

LVM VG をストレージ プールとして使用して KVM ゲスト ディスクのサイズを増やす方法は?

KVM ホスト サーバーは CentOS 6.5 を実行しており、LVM ボリューム グループ「storage_pool」が KVM のメイン ストレージ プールとして使用されます。

Ubuntu ゲストは ext4 ファイルシステムを使用してインストールされ、/dev/vda1 全体を / としてマウントします。ゲスト ディスクの構成は次のとおりです。

<disk type='block' device='disk'>
  <driver name='qemu' type='raw' cache='none' io='native'/>
  <source dev='/dev/storage_pool/kvmguest.img'/>
  <target dev='vda' bus='virtio'/>
  <alias name='virtio-disk0'/>
  <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
</disk>

ゲスト ディスクのサイズを増やすための最善のアプローチは何でしょうか? VG には空き領域がたくさんあります。

いくつかの例を見つけましたが、ほとんどはゲスト内でも LVM を使用しているか、完全には適用できませんでした。私が理解している限りでは、一般的な方法は、同じ VG 内により大きな LV を作成し、ゲストをシャットダウンし、データを転送し、新しい LV を使用するように構成を編集することですか?

ご提案やご指摘をいただければ幸いです

答え1

ゲストをシャットダウンする必要はありません (少なくとも 2019 年では不要です)。

単に

lvextend -L+<size>G /dev/<group>/<volume>

それから

virsh blockresize <domain> /dev/<group>/<volume> --size <newsize>

最後にゲストルームに入り、余分なスペースを活用するためにゲストルームで必要なことはすべて行います。

Windowsゲストでは、

diskpart

list volume

select volume <n>

extend

これらは、qemu 3.1.0 を搭載した Ubuntu 19.04 で KVM ドメインとして実行されている Windows 10 ゲストの C: ドライブを拡張するために私が実行した正確な手順です。

答え2

私が実行した手順は次のとおりです。

  1. kvmゲストの論理ボリュームを拡張する

    # lvextend -L+50G /dev/storage_pool/guest.img
    
  2. kvmゲストをシャットダウンし、論理ボリュームを非アクティブ化します

    # virsh shutdown guest
    # lvchange -a n /dev/storage_pool/guest.img
    
  3. kvmゲストのパーティション情報を一覧にしてメモします。最も重要なのは最初のセクターです。セクターが表示されない場合は、「-u」または「-u sectors」スイッチを追加する必要があるかもしれません。

    # fdisk -l /dev/storage_pool/guest.img
    
  4. 拡張されたスペース全体を埋めるためにパーティションを削除して再作成します。単位としてセクターを使用していることを確認し、同じ最初のセクター(パーティションが整列している場合は通常2048)を選択します。単位を切り替えるには、fdiskコマンドの「u」を使用できます。

    # fdisk /dev/storage_pool/guest.img
    Command (m for help): d
    Partition number (1-4): 1
    Command (m for help): n
    Command action
       e   extended
       p   primary partition (1-4)
    p
    Partition number (1-4): 1
    First sector (...): 2048
    Last sector...: hit enter and use the default last sector
    Command (m for help): a
    Partition number (1-4): 1
    Command (m for help): w
    
  5. ext3/4ファイルシステムを公開してサイズを変更する

    # kpartx -a -v /dev/storage_pool/guest.img
    # e2fsck -p -f /dev/mapper/storage_pool-guest.img1
    # resize2fs /dev/mapper/storage_pool-guest.img1
    # e2fsck -p -f /dev/mapper/storage_pool-guest.img1
    # kpartx -d -v /dev/storage_pool/guest.img
    
  6. 論理ボリュームをアクティブにしてkvmゲストを起動します

    # lvchange -a y /dev/storage_pool/guest.img
    # virsh start guest
    

答え3

同じことを探していたところ、まだ回答のないあなたの質問を見つけました。私の場合は、次のことがうまくいきました:

  1. 通常の方法でゲスト (私の場合は Debian 7.0) をシャットダウンします。

  2. 「元の」LV(もちろんホストのVG内)を、たとえば5Gで拡張します。これを行うには、ホスト上でroot/sudoである必要があります。

    lvextend -L +5G /dev/ストレージプールVG/拡張する仮想マシンVG

  3. gparted で新しく拡張された lv (つまり、VM の「ディスク」) を開きます。

    gparted /dev/mapper/YourStoragePoolVG-YourVirtualMachinesVGToExtend

  • 注:しなければならない「/dev/mapper/...」パスを使用します。 ない「/dev/dm-77」または「/dev/YourStoragePoolVG/...」など(これは LVM のバグ/機能のようです)!
  1. 変更したボリュームのパーティションをいじります(通常どおり GUI を使用します)
  • 注意: データ損失、fs タイプなどに関する警告を考慮してください。
  • 注意: 注意してください。
  • gpartedパーティションのサイズを変更したり、LV 内の virtio ディスクに保存されているパーティション テーブル内でパーティションを移動したりできます。
  • 1 つまたは複数のパーティションを拡張することは、私見では問題ではありません。パーティション/ファイルシステムの縮小については、Google を使用してください...
  • gparted は、パーティション自体だけでなく、パーティション上のファイルシステムも適応させます。
  1. VM を再起動します。変更されたパーティションが表示されます。

前述したように、これは私にとってはうまくいきました (リスクを冒さずにおもちゃのインストールでこれを試すことができました)。どなたか上記の手順を確認して、これが一般的に機能するかどうかコメントしていただけませんか? ありがとうございます。

答え4

簡単です。ホストの LVEXTEND|LVRESIZE 後、GPARTED を搭載した LiveCD ISO から VM を起動します。CD の起動が完了したら、VM 内で使用されるルート パーティション名で GPARTED を実行します。

$ gparted /dev/vda1" # for VirtIO /dev/vda

または

$ gparted /dev/sda1" # for SATA emulated /dev/sda

GPARTEDの通常の方法でパーティションのサイズ変更を実行します

関連情報