稼働時間が重要な場合、Ubuntuを動かしたままディスクを拡張できると非常に便利です。
このガイドでは2つのケースを扱います。LVM(ボリュームグループ)を使うディスクと、LVMを使わない素のext4パーティションです。どちらの場合もファイルシステムはEXT4を前提とし、ディスク自体への容量追加(ハイパーバイザー側での拡張など)はすでに済んでいるものとします。
LVMあり(ボリュームグループ)
LVMが新しい容量を使えるようにするには、まずパーティションと物理ボリュームにその存在を認識させる必要があります。
パーティションを確認する:
fdisk -l
Disk /dev/vda: 10.86 TiB, 11940009082880 bytes, 23320330240 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Device Start End Sectors Size Type
/dev/vda1 2048 4095 2048 1M BIOS boot
/dev/vda2 4096 2101247 2097152 1G Linux filesystem
/dev/vda3 2101248 19025360895 19023259648 8.9T Linux filesystem
Disk /dev/mapper/ubuntu--vg-ubuntu--lv: 8.86 TiB, 9739907891200 bytes, 19023257600 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
拡張したい対象のパーティションは /dev/vda3 です。
まずパーティションを拡張し、その上の物理ボリューム(PV)を拡張します:
sudo growpart /dev/vda 3
# CHANGED: partition=3 start=2101248 old: size=19023259648 end=19025360896 new: size=23318228959 end=23320330207
sudo pvresize /dev/vda3
# Physical volume "/dev/vda3" changed
# 1 physical volume(s) resized or updated / 0 physical volume(s) not resized
次に論理ボリュームを拡張し、ファイルシステムをリサイズします:
sudo lvextend -l +100%FREE /dev/mapper/ubuntu--vg-ubuntu--lv
sudo resize2fs /dev/mapper/ubuntu--vg-ubuntu--lv
これで完了です。再起動は不要です。
LVMなし(素のext4)
ディスクにLVMがなく、パーティションが直接ext4でフォーマットされているだけの場合は、手順はもっと簡単です。次のような構成は、LVMなしで用意されたVMでよく見られます:
Device Start End Sectors Size Type
/dev/sda1 2048 2203647 2201600 1G EFI System
/dev/sda2 2203648 1048575966 1046372319 498.9G Linux filesystem
ハイパーバイザーでディスクを拡張したら、カーネルが新しいサイズを認識できるようにSCSIバスを再スキャンします:
echo 1 > /sys/class/block/sda/device/rescan
カーネルが拡張後のディスクを認識しているか確認します:
fdisk -l /dev/sda
パーティションを拡張し、続けてファイルシステムを直接リサイズします:
sudo growpart /dev/sda 2
sudo resize2fs /dev/sda2
resize2fs はマウント済みのext4ファイルシステムのオンラインリサイズに対応しているため、アンマウントも再起動も不要です。結果を確認します:
df -h /
これで完了です。再起動は不要です。