なにかの技術メモ置き場

なにかの技術メモ置き場

@インフラエンジニア

CentOS8のシステムパーティションを拡張する

概要

CentOS8のシステムパーティション拡張手順をまとめた。

ユースケース

・CentOS8のシステムパーティション(/)の空き容量が枯渇してきたため拡張したい。
・しかし、ファイルシステムがXFSやext4である。LVMだったら簡単に拡張できたのに・・・といった状況など。

環境

概念図

f:id:none06:20200421095417p:plain

構成

ホスト名 OS 備考
guest01 CentOS 8.1.1911 KVMゲスト
kvm01 CentOS 8.1.1911 KVMホスト

前提

ファイルシステムはXFSとする。
・ディスクを20GB→100GBに拡張する。
※一応、ゲストのOS上から見た作業前の状態。

[root@guest01 ~]# parted -l
モデル: Virtio Block Device (virtblk)
ディスク /dev/vda: 21.5GB
セクタサイズ (論理/物理): 512B/512B
パーティションテーブル: msdos
ディスクフラグ:

番号  開始    終了    サイズ  タイプ   ファイルシステム  フラグ
 1    1049kB  525MB   524MB   primary  ext4              boot
 2    525MB   2673MB  2147MB  primary  linux-swap(v1)
 3    2673MB  21.5GB  18.8GB  primary  xfs
[root@guest01 ~]# df -hT
ファイルシス   タイプ   サイズ  使用  残り 使用% マウント位置
devtmpfs       devtmpfs   980M     0  980M    0% /dev
tmpfs          tmpfs      995M     0  995M    0% /dev/shm
tmpfs          tmpfs      995M  8.5M  987M    1% /run
tmpfs          tmpfs      995M     0  995M    0% /sys/fs/cgroup
/dev/vda3      xfs         18G  1.6G   16G    9% /
/dev/vda1      ext4       477M  145M  303M   33% /boot
tmpfs          tmpfs      199M     0  199M    0% /run/user/0

KVMゲストはシャットダウンしておく。
KVMホスト上にCentOS8のインストールメディアを配置しておく。

[root@kvm01 ~]# ls -l /tmp/CentOS-8.1.1911-x86_64-dvd1.iso
-rw-rw-rw-+ 1 qemu qemu 7554990080  1月  4 06:47 /tmp/CentOS-8.1.1911-x86_64-dvd1.iso

手順

サマリ

1.ディスクイメージの拡張 @KVMホスト
2.パーティションの拡張 @KVMゲスト
3.ファイルシステムの拡張 @KVMゲスト

1.ディスクイメージの拡張 @KVMホスト

ホストマシン側の作業

ゲストマシンのディスクイメージのサイズを確認する。

[root@kvm01 ~]# qemu-img info /var/lib/libvirt/images/guest01.img
image: /var/lib/libvirt/images/guest01.img
file format: qcow2
virtual size: 20G (21474836480 bytes)
disk size: 3.6G
cluster_size: 65536
Format specific information:
    compat: 1.1
    lazy refcounts: true
    refcount bits: 16
    corrupt: false

ディスクイメージのサイズを拡張する。

[root@kvm01 ~]# qemu-img resize /var/lib/libvirt/images/guest01.img 100G
Image resized.

今回は変更"後"のサイズを指定したが、変更"量"を指定することも可能。

e.g.
qemu-img resize /var/lib/libvirt/images/guest01.img +80G
[root@kvm01 ~]# qemu-img --help
  resize [--object objectdef] [--image-opts] [-q] [--shrink] filename [+ | -]size

拡張されていることを確認する。

[root@kvm01 ~]# qemu-img info /var/lib/libvirt/images/guest01.img
image: /var/lib/libvirt/images/guest01.img
file format: qcow2
virtual size: 100G (107374182400 bytes)
disk size: 3.6G
cluster_size: 65536
Format specific information:
    compat: 1.1
    lazy refcounts: true
    refcount bits: 16
    corrupt: false
付帯作業1

ゲストOSをレスキューモードで起動するための作業。

ゲストマシンの定義ファイルをバックアップする。

[root@kvm01 ~]# cp -p /etc/libvirt/qemu/guest01.xml{,_bk}
[root@kvm01 ~]# ls -l /etc/libvirt/qemu/guest01.xml*
-rw-------. 1 root root 3698  4月  4 21:41 /etc/libvirt/qemu/guest01.xml
-rw-------. 1 root root 3698  4月  4 21:41 /etc/libvirt/qemu/guest01.xml_bk

定義ファイルを編集する。なお概要は以下。
・cdromからブートするようにする。
・cdromのデバイスを追加し、CentOSのインストールメディアを指定する。
・ゲストマシンにVNC接続できるようにする。
※詳細手順は過去記事参照。
KVMゲストマシンのブートデバイス指定 - 「インストール後」編 - なにかの技術メモ置き場
KVMゲストマシンにVNC接続する - なにかの技術メモ置き場

[root@kvm01 ~]# virsh edit guest01
※編集内容はdiff結果を参照。

編集結果を確認する。

[root@kvm01 ~]# diff /etc/libvirt/qemu/guest01.xml{,_bk}
16d15
<     <boot dev='cdrom'/>
46,52d44
<     <disk type='file' device='cdrom'>
<       <driver name='qemu' type='raw'/>
<       <source file='/tmp/CentOS-8.1.1911-x86_64-dvd1.iso'/>
<       <target dev='vdb' bus='virtio'/>
<       <readonly/>
<       <address type='pci' domain='0x0000' bus='0x00' slot='0x09' function='0x0'/>
<     </disk>
103,105d94
<     <graphics type='vnc' port='5900' autoport='no' listen='0.0.0.0'>
<       <listen type='address' address='0.0.0.0'/>
<     </graphics>

ゲストマシンを起動する。

[root@kvm01 ~]# virsh start guest01
ドメイン guest01 が起動されました

2.パーティションの拡張 @KVMゲスト

ゲストマシン側の作業1

ここだけGUI作業。当環境ではWindows版のVNC Viewerを使用している。

レスキューモードに入る。
・[Troubleshooting]を選択して[Enter]キーを押下する。
f:id:none06:20200404225306p:plain:left

・[Rescue a CentOS Linux system]を選択する。
f:id:none06:20200404225310p:plain:left

shellに入る。
・[3]を選択して[Enter]キーを押下する。
・[Enter]キーを押下する。
f:id:none06:20200404225342p:plain:left

パーティション情報を表示する。

parted -l

f:id:none06:20200404225348p:plain:left

パーティションを拡張する。

parted /dev/vda print
parted /dev/vda resizepart 3 100%
parted /dev/vda print

f:id:none06:20200404225354p:plain:left

パーティションが拡張されていることを確認する。

parted -l

f:id:none06:20200404225359p:plain:left

OSをシャットダウンする。

systemctl poweroff

f:id:none06:20200404231734p:plain:left

付帯作業2

付帯作業1の環境戻し。

ゲストマシンの定義ファイルをバックアップから復元する。
※定義ファイルにはディスクイメージのサイズに関する情報が存在しないため、設定が切り戻ることはない。逆に言うと、定義ファイルでサイズを変更できるならこんな面倒な作業は不要になる。

[root@kvm01 ~]# mv /etc/libvirt/qemu/guest01.xml{_bk,}
mv: '/etc/libvirt/qemu/guest01.xml' を上書きしますか? y

復元したファイルでゲストマシンを再定義する。

[root@kvm01 ~]# virsh define /etc/libvirt/qemu/guest01.xml
ドメイン guest01 が /etc/libvirt/qemu/guest01.xml から定義されました

ゲストマシンを起動する。

[root@kvm01 ~]# virsh start guest01 --console
ドメイン guest01 が起動されました
ドメイン guest01 に接続しました
エスケープ文字は ^] です
・・・

3.ファイルシステムの拡張 @KVMゲスト

ゲストマシン側の作業2

ディスクサイズが拡張されていることを確認する。

[root@guest01 ~]# parted -l
モデル: Virtio Block Device (virtblk)
ディスク /dev/vda: 107GB
セクタサイズ (論理/物理): 512B/512B
パーティションテーブル: msdos
ディスクフラグ:

番号  開始    終了    サイズ  タイプ   ファイルシステム  フラグ
 1    1049kB  525MB   524MB   primary  ext4              boot
 2    525MB   2673MB  2147MB  primary  linux-swap(v1)
 3    2673MB  107GB   105GB   primary  xfs

一応fdiskも。

[root@guest01 ~]# fdisk -l
ディスク /dev/vda: 100 GiB, 107374182400 バイト, 209715200 セクタ
単位: セクタ (1 * 512 = 512 バイト)
セクタサイズ (論理 / 物理): 512 バイト / 512 バイト
I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト
ディスクラベルのタイプ: dos
ディスク識別子: 0x417f0ae5

デバイス   起動 開始位置  終了位置    セクタ サイズ Id タイプ
/dev/vda1  *        2048   1026047   1024000   500M 83 Linux
/dev/vda2        1026048   5220351   4194304     2G 82 Linux スワップ / Solaris
/dev/vda3        5220352 209715199 204494848  97.5G 83 Linux

ファイルシステムは自動で拡張されないため、これから拡張する。

[root@guest01 ~]# df -hT
ファイルシス   タイプ   サイズ  使用  残り 使用% マウント位置
devtmpfs       devtmpfs   980M     0  980M    0% /dev
tmpfs          tmpfs      995M     0  995M    0% /dev/shm
tmpfs          tmpfs      995M  8.5M  987M    1% /run
tmpfs          tmpfs      995M     0  995M    0% /sys/fs/cgroup
/dev/vda3      xfs         18G  1.6G   16G    9% /
/dev/vda1      ext4       477M  145M  303M   33% /boot
tmpfs          tmpfs      199M     0  199M    0% /run/user/0

ファイルシステムを拡張する。
※拡張はオンラインで可能。縮小は不可。

[root@guest01 ~]# xfs_growfs /
meta-data=/dev/vda3              isize=512    agcount=4, agsize=1147584 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=1, sparse=1, rmapbt=0
         =                       reflink=1
data     =                       bsize=4096   blocks=4590336, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0, ftype=1
log      =internal log           bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
data blocks changed from 4590336 to 25561856

ファイルシステムが拡張されていることを確認する。

[root@guest01 ~]# df -hT
ファイルシス   タイプ   サイズ  使用  残り 使用% マウント位置
devtmpfs       devtmpfs   980M     0  980M    0% /dev
tmpfs          tmpfs      995M     0  995M    0% /dev/shm
tmpfs          tmpfs      995M  8.5M  987M    1% /run
tmpfs          tmpfs      995M     0  995M    0% /sys/fs/cgroup
/dev/vda3      xfs         98G  2.1G   96G    3% /
/dev/vda1      ext4       477M  145M  303M   33% /boot
tmpfs          tmpfs      199M     0  199M    0% /run/user/0

お疲れさまでした。

補足

ext4でも流れは同じ。「xfs_growfs」が「resize2fs」に変わるくらいの想定。