web-dev-qa-db-ja.com

KVMゲストのディスク容量をどのように増やしますか?

CentOSにUbuntuゲストをセットアップKVM最初は6GBのディスク容量を持つホスト。コマンドラインからUbuntuゲストのディスク容量を増やすにはどうすればよいですか?

編集#1:ディスクイメージファイル(qemu)を使用しています。

103
slm
  1. vMを停止する
  2. 実行qemu-img resize vmdisk.img +10G画像サイズを10Gb増やす
  3. vMを起動し、通常、その中のパーティションとLVM構造のサイズを変更します
126
dyasny

オンライン方式(qemu、libvirt、virtio-blockを使用)

良くも悪くも、ターゲット仮想ディスクがマウントされている場合でも、以下のコマンドは実行されます。これは、ディスクをアンマウントできない環境(ルートパーティションなど)、VMをオンにしておく必要がある、およびシステム所有者がデータの破損。このリスクを取り除くには、VMにログインし、最初にターゲットディスクをアンマウントする必要がありますが、これは常に可能とは限りません。

KVMハイパーバイザーから以下を実行します。

  1. ディスクイメージファイル自体のサイズを増やします(増やす量を指定します)。

    qemu-img resize <my_vm>.img +10G
    
  2. Libvirtシェルを介してvirtioデバイスの名前を取得します(この例ではdrive-virtio-disk0):

    virsh qemu-monitor-command <my_vm> info block --hmp
      drive-virtio-disk0: removable=0 io-status=ok file=/var/lib/libvirt/images/<my_vm>.img ro=0 drv=raw encrypted=0
      drive-ide0-1-0: removable=1 locked=0 tray-open=0 io-status=ok [not inserted]
    
  3. 新しいサイズを検出するようにvirtioドライバーに通知します(新しい合計容量を指定します):

    virsh qemu-monitor-command <my_vm> block_resize drive-virtio-disk0 20G --hmp
    

次に、VMにログインします。 dmesgを実行すると、virtioディスクが容量の変更を検出したことが報告されます。この時点で、先に進み、必要に応じてパーティションとLVM構造のサイズを変更します。

32
billyw

これらのserverfaultの質問は似ていますが、より具体的です KVM online disk resize?Centos Xen resizing DomU partition and volume group 。 1つ目はKVMゲストがオンラインのときにゲストを増やす方法について質問しますが、2つ目はLVMを使用してXEN固有です。KVMはオフラインです。

注:このリンクは方法#1に役立ち、KVMのディスク領域(ext3ベース)を増やす方法を示しています HOWTO: KVM仮想マシンイメージ のサイズを変更します。

KVMゲストで注意することの1つは、ゲストが内部で使用しているパーティションが、ディスク領域を増やすために使用できる方法に影響を与える可能性があることです。

メソッド#1:パーティションはext2/ext3/ext4ベースです

この方法の要点は次のとおりです。

# 1. stop the VM
# 2. move the current image
mv mykvm.img mykvm.img.bak

# 3. create a new image
qemu-img create -f raw addon.raw 30G

# 4. concatenate the 2 images
cat mykvm.img.bak addon.raw >> mykvm.img

大きなmykvm.imgファイルを手元に置いて、 gparted を起動し、既存のパーティションを新しく追加されたディスク領域に拡張します。この最後の手順では、基本的にOSパーティションを拡張して、余分なスペースを利用できるようにします。

メソッド#2:パーティションはLVMベースです

ここでは、LVMを内部で使用するKVMゲストのサイズを変更するために大まかに実行した手順を示します。

  1. VMをシャットダウンする
  2. ゲストの「イメージファイル」にスペースを追加します(cat old.img 10G_addon.raw >> new.imgなど)。
  3. 起動VM(新しく作成されたnew.imgを使用)
  4. VMの中でfdiskを実行し、LVMパーティションを削除して再作成します

    % fdisk /dev/vda
    ...
    Device Boot      Start         End      Blocks   Id  System
    /dev/vda1   *           1          13      104391   83  Linux
    /dev/vda2              14        3263    26105625   8e  Linux LVM
    
    Command (m for help): d
    Partition number (1-4): 2
    
    Command (m for help): p
    
    Disk /dev/vda: 48.3 GB, 48318382080 bytes
    255 heads, 63 sectors/track, 5874 cylinders
    Units = cylinders of 16065 * 512 = 8225280 bytes
    
    Device Boot      Start         End      Blocks   Id  System
    /dev/vda1   *           1          13      104391   83  Linux
    
    Command (m for help): n 
    Command action
      e   extended
      p   primary partition (1-4)
    p
    Partition number (1-4): 2
    First cylinder (14-5874, default 14): 14
    Last cylinder or +size or +sizeM or +sizeK (14-5874, default 5874): 
    Using default value 5874
    
    Command (m for help): p
    
    Disk /dev/vda: 48.3 GB, 48318382080 bytes
    255 heads, 63 sectors/track, 5874 cylinders
    Units = cylinders of 16065 * 512 = 8225280 bytes
    
    Device Boot      Start         End      Blocks   Id  System
    /dev/vda1   *           1          13      104391   83  Linux
    /dev/vda2              14        5874    47078482+  83  Linux
    
    Command (m for help): t
    Partition number (1-4): 2
    Hex code (type L to list codes): 8e
    Changed system type of partition 2 to 8e (Linux LVM)
    
    Command (m for help): p
    
    Disk /dev/vda: 48.3 GB, 48318382080 bytes
    255 heads, 63 sectors/track, 5874 cylinders
    Units = cylinders of 16065 * 512 = 8225280 bytes
    
    Device Boot      Start         End      Blocks   Id  System
    /dev/vda1   *           1          13      104391   83  Linux
    /dev/vda2              14        5874    47078482+  8e  Linux LVM
    
    Command (m for help): w
    The partition table has been altered!
    
    Calling ioctl() to re-read partition table.
    
    WARNING: Re-reading the partition table failed with error 16: Device or 
    resource busy.
    The kernel still uses the old table.
    The new table will be used at the next reboot.
    Syncing disks.
    %
    
  5. VMを再起動する

  6. LVM物理ボリュームのサイズを変更する

    % pvdisplay 
      --- Physical volume ---
      PV Name               /dev/vda2
      VG Name               VolGroup00
      PV Size               24.90 GB / not usable 21.59 MB
      Allocatable           yes (but full)
      PE Size (KByte)       32768
      Total PE              796
      Free PE               0
      ...
    
    % pvresize /dev/vda2
    
    % pvdisplay
      --- Physical volume ---
      PV Name               /dev/vda2
      VG Name               VolGroup00
      PV Size               44.90 GB / not usable 22.89 MB
      Allocatable           yes 
      PE Size (KByte)       32768
      Total PE              1436
      Free PE               640
      ...
    
  7. LVM論理ボリュームのサイズを変更する

      % lvresize /dev/VolGroup00/LogVol00 -l +640
      Extending logical volume LogVol00 to 43.88 GB
      Logical volume LogVol00 successfully resized
    
  8. ファイルシステムを拡張する

      % resize2fs /dev/VolGroup00/LogVol00 
      resize2fs 1.39 (29-May-2006)
      Filesystem at /dev/VolGroup00/LogVol00 is mounted on /; on-line resizing required
      Performing an on-line resize of /dev/VolGroup00/LogVol00 to 11501568 (4k) blocks.
      The filesystem on /dev/VolGroup00/LogVol00 is now 11501568 blocks long.
    

上記は私の例ですが、これの手順に従いました website

22
slm

ワンステップで内部パーティションのサイズ変更と拡張

Qcow2ゲストファイルイメージを備えたUbuntuホストがあり、ディスクのサイズを変更し、適切なパーティションをすべて1つのステップで拡張したいと考えました。 libvirtゲストファイルシステムユーティリティをセットアップする必要がありますが、これらはとにかく便利です。

ここからのインスピレーション: http://libguestfs.org/virt-resize.1.html

ここでの主要なコマンドは次のとおりです:virt-resize

  • これはlibvirtユーティリティです
  • ゲストディスクを拡張し、内部のパーティションを1ステップで拡張できます
  • ディスクをコピーしますが、元の場所には展開しません
    • そのままのオリジナルをバックアップとして持っているので、これは良いことです

準備:

* Install libvirt file system utilities package 
    * Sudo apt-get install libguestfs-tools

* Test to see if it works (it won't) -- you need to see "===== TEST FINISHED OK =====" at the bottom:
    * Sudo libguestfs-test-tool

* If you don't see "===== TEST FINISHED OK =====" at the bottom then repair it:
    * Sudo update-guestfs-appliance

* Run the test again and verify it works
    * Sudo libguestfs-test-tool

次のようにします。

1)ゲストをシャットダウンします。

2)現在のサイズを確認し、libvirtユーティリティを使用して拡張するパーティション名を表示します。

Sudo virt-filesystems --long --parts --blkdevs -h -a name-of-guest-disk-file

3)新しい(40G)出力ディスクを作成します。

qcow: Sudo qemu-img create -f qcow2 -o preallocation=metadata outdisk 40G
img:  Sudo truncate -s 40G outdisk

4)適切なパーティションを拡張しながら、古いものを新しいものにコピーします(手順2のディスクパーティションが/ dev/sda1であると想定)。

Sudo virt-resize --expand /dev/sda1 indisk outdisk

5)indiskファイルの名前をバックアップとして変更し、outdiskの名前をindiskに変更(またはゲストXMLを変更)

6)ゲストを再起動し、元のファイルを削除する前に新しいディスクファイルを慎重にテストします

7)利益!

12
hdave

オンラインでサイズ変更を行うことができます。 libvirtdはこれをネイティブにサポートします:

ブロックデバイス名を見つけます。 「vda」のようなものでなければなりません

$ virsh domblklist <libvirtd_vm_name>

仮想デバイスのサイズを変更します。

$ virsh blockresize --domain <libvirtd_vm_name> --path <block_device_name> --size <new_size>

以下は、vda VMのundercloudディスクを50GBから51GBに拡張した例です。

[root@gss-rhos-4 ~]# virsh domblklist undercloud
Target     Source
------------------------------------------------
vda        /home/images/undercloud.qcow2

次に、.qcow2イメージファイルの詳細を確認します。

[root@gss-rhos-4 ~]# qemu-img info /home/images/undercloud.qcow2
image: /home/images/undercloud.qcow2
file format: qcow2
virtual size: 50G (53687091200 bytes)
disk size: 38G
cluster_size: 65536
Format specific information:
    compat: 1.1
    lazy refcounts: false
    refcount bits: 16
    corrupt: false

次に、vdaブロックデバイスのサイズを変更します。

[root@gss-rhos-4 ~]# virsh blockresize undercloud vda 51G
Block device 'vda' is resized

そして確認:

[root@gss-rhos-4 ~]# qemu-img info /home/images/undercloud.qcow2
image: /home/images/undercloud.qcow2
file format: qcow2
virtual size: 51G (54760833024 bytes)
disk size: 38G
cluster_size: 65536
Format specific information:
    compat: 1.1
    lazy refcounts: false
    refcount bits: 16
    corrupt: false
[root@gss-rhos-4 ~]#

次に、このスクリプトをVM内で使用して、ブロックデバイスとfsのサイズを変更するコマンドを表示できます。 https://github.com/mircea-vutcovici/scripts/blob/ master/vol_resize.sh

6

VM内でLVMを使用している場合、これを行う最も簡単な方法は、新しい仮想ディスクをVMに追加して、ボリュームグループと論理ボリュームを拡張することです。その上にボリューム。

LVMを使用しているかどうかを確認するには、Sudo pvs; Sudo vgs; Sudo lvsを実行すると、次のような結果が得られます。

PV         VG     Fmt  Attr PSize  PFree
/dev/vda1  vgWWW  lvm2 a-   30.00g    0

VG     #PV #LV #SN Attr   VSize  VFree
vgWWW    1   2   0 wz--n- 30.00g    0

LV   VG    Attr   LSize 
root vgWWW -wi-ao 28.80g
swap vgWWW -wi-ao  1.19g

vMのOSがLVMを使用している場合。上記の例では、VMには30Gバイトのvdiskがあり、vgWWWと呼ばれる1つのボリュームグループを使用して構成されています。

LVがVMで使用されている場合:

  1. VMをシャットダウンする
  2. ホスト上で新しい仮想ディスクファイルを作成し、VMに追加します
  3. VMを再起動してログインします
  4. Sudo pvcreate /dev/vdbを使用して、新しいドライブをLVMの物理ボリュームとしてマークします
  5. Sudo vgextend vgWWW /dev/vdbを使用して、ボリュームグループを拡張し、この新しいディスクブロックを含めます。
  6. 論理ボリュームを拡張して、Sudo lvextend --extents +100%FREE /dev/vgWWW/root(またはSudo lvextend --size +8G /dev/vgWWW/rootのようなもの)を使用して新しいスペースを占有します。これを完全に拡張したくない場合は、この例ではボリュームに8 GBを追加します)
  7. resize2fs /dev/vgWWW/rootを使用してファイルシステムのサイズを変更します

注:上記は、vg/lv名が私の例と同じであると想定しています。これはありそうもないことです。VMにすでに仮想ドライブと呼ばれるvdb新しいものは別のものになります(vdcなど)

注:resize2fsは、ext2、ext3、ext4ファイルシステムでのみ機能します。他のものを使用している場合、エラーが発生し、何も実行されません。

注:ライブファイルシステムのサイズを変更しているためresize2fsは、マウントされていないファイルシステムの場合のように、最初にfsckを実行するように求めません。続行する前に、問題が発生していないことを確認するために、読み取り専用のファイルシステムを実行することもできます。

6
David Spillett

VirtioドライブとLVMを使用している場合、VMを再起動せずにVMのディスクのサイズを増やす可能性があります。

  1. Virt-managerまたはvirshを使用して新しい空のディスクを定義します
  2. カーネルは新しい/ dev/vdbを見るはずです
  3. (オプション)fdiskを使用してプライマリパーティションを作成し、/ dev/vdb1を取得してから、kpartx -a/dev/vdbを使用してパーティションテーブルを再読み取りします。

  4. Vgextend vg_name/dev/vdb1(または、パーティションを作成しなかった場合は/ dev/vdb)を使用します

  5. Lvextend -l + 100%FREE/dev/vg_name/lv_nameを使用します
  6. Resize2fs/dev/vg_name/lv_nameを使用してファイルシステムを拡張します

完了です。

3
Bruno Mairlot

このようにして、必要なパーティションを拡張できます。

    # see what partitions you have? 
    virt-filesystems --long -h --all -a olddisk

    truncate -r olddisk newdisk
    truncate -s +5G newdisk

    # Note "/dev/sda2" is a partition inside the "olddisk" file.
    virt-resize --expand /dev/sda2 olddisk newdisk

他の例を見る ここ

3
Hojat Modaresi

それを行う別の方法

truncate -s +2G vm1.img 

ディスクの再スキャンを作成し、lvmのサイズを変更できるようになりました。

2
mandela900

VMにLVMがある場合、これは非常に簡単で高速です。

  1. VM(ゲストマシン))をオフにします。
  2. ホストマシンに新しいストレージデバイスを追加します。
  3. ゲストをオンにします。
  4. システム->管理-> 論理ボリューム管理 (またはターミナルでSudo system-config-lvmと入力)*を開きます。

GUIは非常に直感的であることがわかりましたが、問題が発生した場合は次の手順に従ってください。

  1. 「初期化されていないエンティティ」を開き、新しいドライブを見つけます。
  2. 新しいドライブを選択すると、画像の下に初期化ボタンが表示されます。それを押してください。
  3. パーティションについて尋ねられます-あなたはそれを必要としません。
  4. 完了したら、ドライブを既存のボリュームグループに追加します。
  5. 最後に、論理ボリュームを拡張する必要があります。これは、ボリュームのプロパティを編集して、グループの論理ビューで行います。
  6. 保存して完了です。 VMを再起動する必要はありません。

注意!少なくともCentOS 6では、LVM GUIはデフォルトではインストールされませんが、yum install system-config-lvmを使用してインストールできます。

1
Nux
  1. VMをシャットダウンする
  2. 画像のサイズを変更:

    qemu-img resize vmdisk.img +16G
    

    画像サイズを16 GB増やします。

  3. イメージにGPT(GUIDパーティションテーブル)がある場合、GPTで使用されるドライブサイズは新しいサイズとは異なります。gdiskで修正する必要があります。

    MY_DRIVE=/dev/vda
    gdisk $MY_DRIVE <<EOF
    w
    Y
    Y
    EOF
    

    またはpartedを使用:

    parted $MY_DRIVE print Fix
    

    何らかの理由でttyが提示されていない場合(たとえば、Vagrantでプロビジョニングする場合)、parted修正は機能しないため、gdiskを使用します。

  4. 利用可能なすべてのスペースを満たすようにパーティションサイズを増やします。

    MY_PARTITION_GUID=$(
    gdisk $MY_DRIVE <<EOF | sed -n -e 's/^Partition unique GUID: //p'
    i
    EOF
    )
    
    MY_PARTITION_FIRST_SECTOR=$(
    gdisk $MY_DRIVE <<EOF | sed -n -e 's/^First sector: \([0-9]\+\).*/\1/p'
    i
    EOF
    )
    
    gdisk $MY_DRIVE <<EOF
    d
    n
    
    $MY_PARTITION_FIRST_SECTOR
    
    
    x
    a
    2
    
    c
    $MY_PARTITION_GUID
    w
    Y
    EOF
    

    x a 2 <Enter>の部分はオプションであり、レガシーBIOSを使用している場合に必要です。 MY_PARTITION_GUID=...およびc $MY_PARTITION_GUIDパーツもオプションであり、/etc/fstabまたはその他の場所でパーティションUUIDを使用する場合にのみ必要です。

  5. partx -u $MY_DRIVEまたはpartprobeを使用してパーティションを再起動または再読み取りします。

  6. パーティションの拡張、例:ext2ext3またはext4

    MY_PARTITION="${MY_DRIVE}1"
    resize2fs $MY_PARTITION
    
1
mixel

Gpartedがマウントされた状態でsolus vmを使用できます。 gpartedで使用すると、システムを簡単に起動してスペースを調整できます。正しいブート優先順位が設定されていることを確認してください。参考として、以下の便利なURLを参照してください。 https://greencloudvps.com/knowledgebase/11/How-to-Extend-the-Hard-drive-on-KVM-after-upgrading-VPS.html

0
Muhasin