CentOSにUbuntuゲストをセットアップKVM最初は6GBのディスク容量を持つホスト。コマンドラインからUbuntuゲストのディスク容量を増やすにはどうすればよいですか?
編集#1:ディスクイメージファイル(qemu)を使用しています。
qemu-img resize vmdisk.img +10G
画像サイズを10Gb増やす良くも悪くも、ターゲット仮想ディスクがマウントされている場合でも、以下のコマンドは実行されます。これは、ディスクをアンマウントできない環境(ルートパーティションなど)、VMをオンにしておく必要がある、およびシステム所有者がデータの破損。このリスクを取り除くには、VMにログインし、最初にターゲットディスクをアンマウントする必要がありますが、これは常に可能とは限りません。
KVMハイパーバイザーから以下を実行します。
ディスクイメージファイル自体のサイズを増やします(増やす量を指定します)。
qemu-img resize <my_vm>.img +10G
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]
新しいサイズを検出するようにvirtioドライバーに通知します(新しい合計容量を指定します):
virsh qemu-monitor-command <my_vm> block_resize drive-virtio-disk0 20G --hmp
次に、VMにログインします。 dmesg
を実行すると、virtioディスクが容量の変更を検出したことが報告されます。この時点で、先に進み、必要に応じてパーティションとLVM構造のサイズを変更します。
これらの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ゲストのサイズを変更するために大まかに実行した手順を示します。
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.
%
VMを再起動する
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
...
LVM論理ボリュームのサイズを変更する
% lvresize /dev/VolGroup00/LogVol00 -l +640
Extending logical volume LogVol00 to 43.88 GB
Logical volume LogVol00 successfully resized
ファイルシステムを拡張する
% 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
ワンステップで内部パーティションのサイズ変更と拡張
Qcow2ゲストファイルイメージを備えたUbuntuホストがあり、ディスクのサイズを変更し、適切なパーティションをすべて1つのステップで拡張したいと考えました。 libvirtゲストファイルシステムユーティリティをセットアップする必要がありますが、これらはとにかく便利です。
ここからのインスピレーション: http://libguestfs.org/virt-resize.1.html
ここでの主要なコマンドは次のとおりです:virt-resize
準備:
* 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)利益!
オンラインでサイズ変更を行うことができます。 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 。
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で使用されている場合:
Sudo pvcreate /dev/vdb
を使用して、新しいドライブをLVMの物理ボリュームとしてマークしますSudo vgextend vgWWW /dev/vdb
を使用して、ボリュームグループを拡張し、この新しいディスクブロックを含めます。Sudo lvextend --extents +100%FREE /dev/vgWWW/root
(またはSudo lvextend --size +8G /dev/vgWWW/root
のようなもの)を使用して新しいスペースを占有します。これを完全に拡張したくない場合は、この例ではボリュームに8 GBを追加します)resize2fs /dev/vgWWW/root
を使用してファイルシステムのサイズを変更します注:上記は、vg/lv名が私の例と同じであると想定しています。これはありそうもないことです。VMにすでに仮想ドライブと呼ばれるvdb
新しいものは別のものになります(vdc
など)
注:resize2fs
は、ext2、ext3、ext4ファイルシステムでのみ機能します。他のものを使用している場合、エラーが発生し、何も実行されません。
注:ライブファイルシステムのサイズを変更しているためresize2fs
は、マウントされていないファイルシステムの場合のように、最初にfsck
を実行するように求めません。続行する前に、問題が発生していないことを確認するために、読み取り専用のファイルシステムを実行することもできます。
VirtioドライブとLVMを使用している場合、VMを再起動せずにVMのディスクのサイズを増やす可能性があります。
(オプション)fdiskを使用してプライマリパーティションを作成し、/ dev/vdb1を取得してから、kpartx -a/dev/vdbを使用してパーティションテーブルを再読み取りします。
Vgextend vg_name/dev/vdb1(または、パーティションを作成しなかった場合は/ dev/vdb)を使用します
完了です。
このようにして、必要なパーティションを拡張できます。
# 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
他の例を見る ここ 。
それを行う別の方法
truncate -s +2G vm1.img
ディスクの再スキャンを作成し、lvmのサイズを変更できるようになりました。
VMにLVMがある場合、これは非常に簡単で高速です。
Sudo system-config-lvm
と入力)*を開きます。GUIは非常に直感的であることがわかりましたが、問題が発生した場合は次の手順に従ってください。
注意!少なくともCentOS 6では、LVM GUIはデフォルトではインストールされませんが、yum install system-config-lvm
を使用してインストールできます。
画像のサイズを変更:
qemu-img resize vmdisk.img +16G
画像サイズを16 GB増やします。
イメージに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
を使用します。
利用可能なすべてのスペースを満たすようにパーティションサイズを増やします。
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を使用する場合にのみ必要です。
partx -u $MY_DRIVE
またはpartprobe
を使用してパーティションを再起動または再読み取りします。
パーティションの拡張、例:ext2
、ext3
またはext4
:
MY_PARTITION="${MY_DRIVE}1"
resize2fs $MY_PARTITION
Gpartedがマウントされた状態でsolus vmを使用できます。 gpartedで使用すると、システムを簡単に起動してスペースを調整できます。正しいブート優先順位が設定されていることを確認してください。参考として、以下の便利なURLを参照してください。 https://greencloudvps.com/knowledgebase/11/How-to-Extend-the-Hard-drive-on-KVM-after-upgrading-VPS.html