概要
CentOS8のシステムパーティション拡張手順をまとめた。
ユースケース
・CentOS8のシステムパーティション(/)の空き容量が枯渇してきたため拡張したい。
・しかし、ファイルシステムがXFSやext4である。LVMだったら簡単に拡張できたのに・・・といった状況など。
環境
概念図
前提
・ファイルシステムは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ホスト
ホストマシン側の作業
ゲストマシンのディスクイメージのサイズを確認する。
[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]キーを押下する。
・[Rescue a CentOS Linux system]を選択する。
shellに入る。
・[3]を選択して[Enter]キーを押下する。
・[Enter]キーを押下する。
パーティション情報を表示する。
parted -l
パーティションを拡張する。
parted /dev/vda print parted /dev/vda resizepart 3 100% parted /dev/vda print
パーティションが拡張されていることを確認する。
parted -l
OSをシャットダウンする。
systemctl poweroff
付帯作業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」に変わるくらいの想定。