Linux管理・運用の基本
システム管理者のための実践ガイド
システム管理者のための実践ガイド
仮想マシンでLinuxを使っていると、「ディスク容量が足りない」という状況に遭遇することがあります。最初は十分だと思っていた容量も、開発環境を整えたり、ログファイルが蓄積されたりすると、あっという間に不足してしまうものです。
しかし、適切な手順を踏めば、慌てることはありません。この記事では、仮想環境でディスク容量を追加し、LVM(Logical Volume Manager)を使ってその容量を既存のパーティションに割り当てる方法を、具体的なコマンド例を交えて丁寧に解説します。
lsblk
やdf
などのコマンドを使って現在のディスク状況を把握する方法pvresize
やlvextend
など、LVM拡張に必要なコマンドの使い方「アプリケーションのデータが増えすぎた」「ログが肥大化した」といった理由で、ディスク容量不足のアラートが届くことがあります。特に仮想環境では、初期の見積もりが甘く、後から容量を増やす必要が出てくるケースが少なくありません。
Linuxをインストールした直後は軽量でも、以下のような要因で容量が急激に増加します:
LVMは、物理的なディスクの制約から解放され、柔軟にパーティションのサイズを変更できるため、このような状況に非常に有効です。今回は、仮想環境でディスク容量を増設し、LVMを使ってその容量を既存のファイルシステムに割り当てる一連の流れを追っていきます。
/dev/nvme0n1
、/dev/sda
)。作業は大きく2段階に分かれます:
VMwareやVirtualBoxの設定画面を開き、ハードディスクのサイズを増やします。 この作業は仮想マシンを停止した状態で行います。
Tips📝:VirtualBoxの場合、コマンドラインからも変更可能です:
vboxmanage modifymedium disk "仮想ディスクファイルパス" --resize 40960
(サイズはMB単位で指定)
この操作の後、Linuxを再起動してください。
まず、df
コマンドで現在のファイルシステムの使用状況を確認し、どのパーティションを拡張する必要があるか把握します。
コマンド実行例とその意味:
$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/centos-root 17G 15G 2.0G 89% /
/dev/sda1 1014M 150M 865M 15% /boot
この例では:
/dev/mapper/centos-root
:ルートファイルシステムが89%使用済みlsblk
コマンドを実行し、ディスクのツリー構造を表示させます。ここで新しく増えたディスク容量が空き領域(パーティションに割り当てられていない部分)として表示されていることを確認します。
コマンド実行例とその意味:
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 40G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 19G 0 part
├─centos-root 253:0 0 17G 0 lvm /
└─centos-swap 253:1 0 2G 0 lvm [SWAP]
この例では:
sda
:物理ディスク(40GBに拡張済み)sda2
:LVMパーティション(まだ19GBのまま)centos-root
:ルート用論理ボリューム(17GB)ヒント💡:lsblk
コマンドの出力で、/dev/sda
が40Gに増えているのに対し、その下のパーティション(/dev/sda2
)が19Gのままである場合、残り21Gが未割当の空き領域です。
この状況で困ったらコレ:lsblk
でディスクサイズが増えていない場合は、仮想マシンを再起動してください。カーネルが新しいディスクサイズを認識する必要があります。
pvdisplay
コマンドで、どのディスクが物理ボリュームとして使われているか確認します。実行にはroot権限を必要とするためsudo
コマンドを使います。
コマンド実行例:
$ sudo pvdisplay
--- Physical volume ---
PV Name /dev/sda2
VG Name centos
PV Size 19.00 GiB / not usable 3.00 MiB
Allocatable yes (but full)
PE Size 4.00 MiB
Total PE 4863
Free PE 0
ヒント💡:PV Nameの項目(/dev/sda2
)が物理ボリュームのデバイス名です。/dev/sda
はシステムに接続されている1番目のSCSIデバイスを表すデバイス名であり、2
は/dev/sda
というデバイス(ディスク全体)の2番目のパーティションを表すパーティション番号です。
partprobe
コマンドとgrowpart
コマンドを実行し、パーティションを拡張します。
コマンド実行例とその意味:
# パーティション情報を再読み込み
$ sudo partprobe
# パーティションを拡張
# デバイス名 (/dev/sda) とパーティション番号 (2) の間のスペースに注意してください。
$ sudo growpart /dev/sda 2
この例では:
growpart /dev/sda 2
の意味:
/dev/sda
:対象デバイス2
:パーティション番号(sda2を指定)ヒント💡:物理ボリュームのデバイス名が/dev/nvme0n1p2
の場合は、growpart /dev/nvme0n1 2
を実行します。
この状況で困ったらコレ:growpart
コマンドがない場合は、cloud-utils
(Debian / Ubuntu系)またはcloud-utils-growpart
(RHEL / CentOS / Fedora系)というパッケージをインストールすると使えるようになります。
パーティションサイズを拡張したら、pvresize
コマンドでLVMの基盤となる物理ボリューム(PV)を新しいサイズに合わせて拡張します。
コマンド実行例:
$ sudo pvresize /dev/sda2
pvdisplay
コマンドを実行して、物理ボリュームが拡張されたことを確認します。
コマンド実行例:
$ sudo pvdisplay
ヒント💡:PV Size(物理ボリュームのサイズ)の項目が、拡張したパーティションのサイズに合わせて変更されていることが確認できます。
Tips✨:pvresize
は拡張されたパーティションサイズに合わせて、物理ボリュームのサイズを自動調整します。
物理ボリュームの拡張が終わると、LVMのボリュームグループ(VG)に空き領域ができます。次に、この空き領域を使って、実際に使用する論理ボリューム(LV)を拡張します。
vgdisplay
コマンドで、ボリュームグループの空き領域(Free PE
)を確認します。
コマンド実行例:
$ sudo vgdisplay
--- Volume group ---
VG Name centos
System ID
Format lvm2
VG Size 39.00 GiB
PE Size 4.00 MiB
Total PE 9983
Alloc PE 4863
Free PE 5120 <- この値が0より大きければOK
lvdisplay
コマンドを実行し、論理ボリュームの情報(LV Name
とVG Name
)を確認しておきます。
コマンド実行例:
$ lvdisplay
--- Logical volume ---
LV Path /dev/centos/root
LV Name root
VG Name centos
LV Size 17.00 GiB
次にlvextend
コマンドで、ボリュームグループの空き容量を論理ボリューム(LV)に割り当てます。
コマンド実行例とその意味:
$ sudo lvextend -l +100%FREE /dev/mapper/centos-root
Size of logical volume centos/root changed from 17.00 GiB (4351 extents) to 37.00 GiB (9471 extents).
Logical volume centos/root successfully resized.
この例では:
-l +100%FREE
:利用可能な空き容量をすべて割り当て/dev/mapper/centos-root
:拡張対象の論理ボリュームヒント💡:論理ボリュームは「VG名-LV名」という形式で識別されます。この形式は、dm-
というデバイスマッパーのシンボリックリンクとして/dev/mapper/
以下に作成されるのが一般的です。
この状況で困ったらコレ:デバイス名がわからない場合は、lsblk
の結果でMOUNTPOINT
が/
になっているものを探すか、lvdisplay
でLV Name
とVG Name
を確認してください。
論理ボリュームのサイズを増やしただけでは、まだファイルシステムは古いサイズのままです。最後に、ファイルシステム自体を新しい領域に合わせて拡張し、実際に使える容量を増やします。
ファイルシステムの種類によってコマンドが異なります。
コマンド実行例とその意味:
$ df -T /
Filesystem Type 1K-blocks Used Available Use% Mounted on
/dev/mapper/centos-root xfs 17813504 15728640 2084864 89% /
xfs_growfs
コマンドを使います。
コマンド実行例:
$ sudo xfs_growfs /
meta-data=/dev/mapper/centos-root isize=512 agcount=4, agsize=1113856 blks
= sectsz=512 attr=2, projid32bit=1
data = bsize=4096 blocks=4455424, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 fstring-ci=0
log =internal bsize=4096 blocks=2560, version=2
data blocks changed from 4455424 to 9699328
resize2fs
コマンドを使います。
コマンド実行例:
$ sudo resize2fs /dev/mapper/centos-root
df -h
コマンドで、ファイルシステムの容量が増えていることを確認します。
コマンド実行例とその意味:
$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/centos-root 37G 15G 22G 41% /
/dev/sda1 1014M 150M 865M 15% /boot
この例では:
症状:lsblk
でディスクサイズは増えているが、パーティションサイズが変わらない
対処法:パーティション情報を再読み込み後、Linuxを再起動してください。
# パーティション情報を強制再読み込み
$ sudo partprobe /dev/sda
# システム再起動
$ sudo reboot
症状:pvdisplay
やlvextend
コマンドが見つからない
対処法:lvm2
パッケージをインストールしてください。
# CentOS/RHEL系
$ sudo yum install lvm2
# Ubuntu/Debian系
$ sudo apt-get install lvm2
対処法:以下のコマンドで確認してください。
# 現在マウントされているデバイス一覧
$ mount | grep "/"
# ブロックデバイス一覧(推奨)
$ lsblk -f
growpart
:CentOS 7/RHEL 7以降で標準搭載xfs_growfs
:XFS用(CentOS 7のデフォルト)resize2fs
:EXT2/3/4用(Ubuntu等で一般的)Tips📝:CentOS 6以前ではgrowpart
の代わりにfdisk
を使った手動でのパーティション拡張が必要です。
#!/bin/bash
# ディスク容量確認スクリプト
echo "=== ディスク使用状況 ==="
df -h
echo -e "\n=== ブロックデバイス構造 ==="
lsblk
echo -e "\n=== LVM物理ボリューム ==="
sudo pvdisplay
echo -e "\n=== LVMボリュームグループ ==="
sudo vgdisplay
echo -e "\n=== LVM論理ボリューム ==="
sudo lvdisplay
このスクリプトをcheck_disk.sh
として保存し、実行権限を付与:
$ chmod +x check_disk.sh
実行するときは:
$ ./check_disk.sh
この記事では、仮想環境でディスクを拡張し、LVMを使ってその容量を既存のファイルシステムに割り当てる方法を解説しました。
ディスク容量の拡張は、以下のステップで対応できます:
各ステップでlsblk
やdf -h
を使って状況を確認しながら進めることが重要です。LVMを使ったシステムでは、物理ディスクから論理ボリューム、そしてファイルシステムまで、すべての層で拡張作業が必要になることを理解しておきましょう。
定期的な容量監視(df -h
での確認)を習慣化することで、容量不足を事前に察知できます。また、ログローテーションの設定やパッケージキャッシュの定期クリーニングも、長期的な容量管理には欠かせません。
この記事がディスク容量拡張についての理解を深め、実際の作業で役立つ一助となれば幸いです。Linux環境でのストレージ管理は最初は複雑に感じられるかもしれませんが、基本の流れを覚えてしまえば確実に対応できるようになります。最後までご覧いただき、ありがとうございました。