0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Proxmox / Linux】LVMボリュームを拡張する方法

Posted at

はじめに

仮想環境でLinux VMを運用していると、気がつくとディスク容量が不足していることってよくありますよね。特にルートパーティション(/)やログが溜まる /var パーティションなんかは、思った以上に早く埋まってしまいます。

今回は、そんな時に役立つLVMパーティションの拡張方法について、実際にUbuntu 22.04 LTSのVMを作成して、一から手順を確認してみました。ルートパーティションも含めて、どのLVMパーティションでも対応可能な方法です。

実は明日業務でこの作業があるので、予習も兼ねて検証してみました。同じような状況の方の参考になれば嬉しいです!

検証環境

今回の検証で使用した環境はこちら:

項目 仕様
仮想化基盤 Proxmox VE 9.0
ゲストOS Ubuntu 22.04 LTS Server
初期ディスク容量 20GB
拡張後容量 50GB
ストレージ構成 LVMデフォルト構成

Ubuntu ServerのインストーラーはデフォルトでLVM構成を選択してくれるので、今回の検証にはピッタリでした!

image.png

LVMの基本的な仕組み

LVMって最初は「なんでこんなに複雑なの?」って思ったんですが、理解すると結構理にかなってるんですよね。

LVM(Logical Volume Manager)は、物理的なディスクを抽象化して柔軟なストレージ管理を可能にします。階層構造になっているのがポイントです:

  • 物理ボリューム(PV): 実際のディスクパーティション
  • ボリュームグループ(VG): 複数のPVをまとめた論理的なグループ
  • 論理ボリューム(LV): VG内に作成される実際に使用する領域

この階層構造があるおかげで、ディスクの動的な拡張・縮小ができるわけです。

拡張手順の全体像

LVMって階層構造になっているので、下から順番に拡張していく必要があります。最初は「なんでこんなに手順が多いの?」って思ったんですが、慣れてくると理にかなってることが分かります。

作業の流れはこんな感じです。各段階で状態確認をしながら進めていくのが安心ですね。

Step 1: Proxmoxで仮想ディスクを拡張する

まずはProxmox側で「器」を大きくします。

⚠️ 重要: ここは必ずVMをシャットダウンしてから作業してください

VMの作成(今回の検証用)

まずはサクッとVMを作成します。isoのアップロードから:

image.png

image.png

VM作成時はディスク容量20GB、その他は適当なスペックで設定:

image.png

image.png

ディスクサイズの変更

VMをシャットダウン

image.png

ハードウェア設定から拡張

  • 対象のVMを選択
  • [ハードウェア] タブを開く
  • 拡張したいディスク(今回は scsi0)を選択
  • [ディスク操作] > [サイズ変更] をクリック

image.png

追加容量を入力(今回は30GB追加で 30と入力)

image.png

この作業自体は数秒で終わります。簡単ですね!

image.png

Step 2: OS側でパーティションを拡張

VMを起動して、いよいよOS側の作業です。SSHでログインして進めていきます。

現状確認してみる

lsblk

image.png

実行すると、Ubuntu LVMのデフォルト構成では大体こんな感じになります:

NAME                      MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
loop0                       7:0    0   87M  1 loop /snap/lxd/29351
loop1                       7:1    0 63.9M  1 loop /snap/core20/2318
loop2                       7:2    0 38.8M  1 loop /snap/snapd/21759
sda                         8:0    0   50G  0 disk
├─sda1                      8:1    0    1M  0 part
├─sda2                      8:2    0  1.8G  0 part /boot
└─sda3                      8:3    0 18.2G  0 part
  └─ubuntu--vg-ubuntu--lv 253:0    0   10G  0 lvm  /

ここで注目すべきは、sda 自体はStep1で指定した50GBになっているけど、その中の sda3 パーティションはまだ古いサイズ(約18GB)のままということです。これが今回のポイントですね。

パーティション拡張の実行

パーティション拡張には parted コマンドを使います。ほとんどのLinuxディストリビューションに標準で入っていて安心です。

まず現在のパーティション情報を確認:

sudo parted /dev/sda print

image.png

そして実際の拡張(パーティション3を最大サイズまで拡張):

sudo parted /dev/sda resizepart 3 100%

image.png

このコマンドは resizepart [パーティション番号] [新しいサイズ] という書式で、100% は「ディスクの最後まで使う」という意味です。

拡張できたか確認

再度 lsblk で確認すると:

image.png

NAME                      MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
loop0                       7:0    0   87M  1 loop /snap/lxd/29351
loop1                       7:1    0 63.9M  1 loop /snap/core20/2318
loop2                       7:2    0 38.8M  1 loop /snap/snapd/21759
sda                         8:0    0   50G  0 disk
├─sda1                      8:1    0    1M  0 part
├─sda2                      8:2    0  1.8G  0 part /boot
└─sda3                      8:3    0 48.2G  0 part # ← 拡張された!
  └─ubuntu--vg-ubuntu--lv 253:0    0   10G  0 lvm  / # ← でもLVMはまだ小さい

パーティションは拡張されましたが、LVMの部分はまだ元のサイズのままですね。ここからがLVM特有の作業になります。

Step 3: LVMレイヤーの拡張

ここからがLVM特有の作業です。正直、最初は「なんで段階がこんなに多いの?」と思いましたが、各レイヤーの役割を理解すると納得できます。

物理ボリューム(PV)の拡張

まずは、拡張したパーティションの領域をLVMに認識させます:

sudo pvresize /dev/sda3

image.png

Physical volume "/dev/sda3" changed
1 physical volume(s) resized or updated / 0 physical volume(s) not resized

ボリュームグループの状態確認

念のため、ボリュームグループに空き領域ができたことを確認しておきます:

sudo vgdisplay

image.png

論理ボリューム(LV)の確認と拡張

次に、拡張したい論理ボリュームのパスを確認します:

sudo lvdisplay

image.png

出力の中に LV Path という項目があるので、そこに書かれているパス(今回は /dev/ubuntu-vg/ubuntu-lv)をメモしておきます。

そして論理ボリュームを拡張:

sudo lvextend -l +100%FREE /dev/ubuntu-vg/ubuntu-lv

image.png

-l +100%FREE オプションは「ボリュームグループ内の空き領域を全部使う」という指定です。細かく容量を計算しなくて済むので楽ですね。

Size of logical volume ubuntu-vg/ubuntu-lv changed from 10.00 GiB (2560 extents) to 48.22 GiB (12345 extents).
Logical volume ubuntu-vg/ubuntu-lv successfully resized.

Step 4: ファイルシステムの拡張

最後の仕上げです。ここまでの作業で論理ボリュームは大きくなりましたが、OS側から見るとまだファイルシステムのサイズは変わっていません。

拡張前の状態確認

df -hT

image.png

Filesystem                        Type   Size  Used Avail Use% Mounted on
tmpfs                             tmpfs  197M  1.0M  196M   1% /run
/dev/mapper/ubuntu--vg-ubuntu--lv ext4   9.8G  4.9G  4.5G  53% /
tmpfs                             tmpfs  982M     0  982M   0% /dev/shm
tmpfs                             tmpfs  5.0M     0  5.0M   0% /run/lock
/dev/sda2                         ext4   1.8G  130M  1.5G   8% /boot
tmpfs                             tmpfs  197M  4.0K  197M   1% /run/user/1000

ファイルシステム拡張の実行

UbuntuのデフォルトはEXT4なので、resize2fsを使います:

sudo resize2fs /dev/mapper/ubuntu--vg-ubuntu--lv

image.png

resize2fs 1.46.5 (30-Dec-2021)
Filesystem at /dev/mapper/ubuntu--vg-ubuntu--lv is mounted on /; on-line resizing required
old_desc_blocks = 2, new_desc_blocks = 7
The filesystem on /dev/mapper/ubuntu--vg-ubuntu--lv is now 12641280 (4k) blocks long.

最終確認

df -h

image.png

Filesystem                         Size  Used Avail Use% Mounted on
tmpfs                              197M  1.0M  196M   1% /run
/dev/mapper/ubuntu--vg-ubuntu--lv   48G  4.9G   41G  11% / # ← 拡張完了!
tmpfs                              982M     0  982M   0% /dev/shm
tmpfs                              5.0M     0  5.0M   0% /run/lock
/dev/sda2                          1.8G  130M  1.5G   8% /boot
tmpfs                              197M  4.0K  197M   1% /run/user/1000

やりました!これで作業完了です。

image.png

よくハマるトラブルと対処法

実際にこの作業を何回もやっていると、たまにハマることがあります。僕が経験した代表的なものを書いておきますね。

パーティション拡張でエラーが出る場合

# こんなエラーが出ることがあります
Error: Partition 3 is being used. You must unmount it before you resize it.

これはパーティションがマウントされている場合のエラーです。LVMのルートパーティションの場合は、オンラインで拡張可能なので大丈夫なはずですが、こんな時は:

# まずはディスクサイズを確認
sudo fdisk -l /dev/sda

# パーティションテーブルを再読み込み
sudo partprobe /dev/sda

# もう一度parted で確認
sudo parted /dev/sda print

LVM拡張で空き領域不足エラー

# こんな時は現在の状況を確認
sudo pvdisplay
sudo vgdisplay

物理ボリュームの拡張(pvresize)をし忘れていることが多いです。僕も最初やりました(笑)

ファイルシステム拡張が反映されない

EXT4の場合は resize2fs、XFSの場合は xfs_growfs を使います。コマンドを間違えると拡張されません。

# ファイルシステムの種類確認
df -hT

XFSの場合は:

sudo xfs_growfs /  # マウントポイントを指定

作業前後の比較

今回の検証結果をまとめるとこんな感じになりました:

項目 作業前 作業後
仮想ディスクサイズ 20GB 50GB
パーティション(sda3) 約18GB 約48GB
論理ボリューム 10GB 48GB
利用可能領域 4.5GB 41GB

image.png

無事に容量が4倍以上になりました!

参考:よく使うコマンド一覧

作業中によく使うコマンドをまとめておきます。ブックマークしておくと便利だと思います:

# 現状確認系
lsblk                    # ブロックデバイス構成
df -hT                   # ディスク使用量とFS種別
sudo pvdisplay           # 物理ボリューム情報
sudo vgdisplay           # ボリュームグループ情報  
sudo lvdisplay           # 論理ボリューム情報

# 拡張系
sudo parted /dev/sda resizepart 3 100%  # パーティション拡張
sudo pvresize /dev/sda3            # 物理ボリューム拡張
sudo lvextend -l +100%FREE [LV]    # 論理ボリューム拡張
sudo resize2fs [device]            # ext4拡張
sudo xfs_growfs [mountpoint]       # xfs拡張

# トラブル対応系
sudo partprobe /dev/sda            # パーティションテーブル再読み込み
sudo fdisk -l /dev/sda             # ディスク情報詳細確認

注意点とか学んだこと

作業前の準備

  • 絶対に必要: VMの完全バックアップまたはスナップショット取得
  • できれば: 重要なデータの別途バックアップ
  • 必須: メンテナンス時間の確保(思ったより時間かかることがある)

作業中の心がけ

  • 各段階で状態確認を実施し、期待通りの結果であることを確認する
  • エラーが発生した場合は、無理に進めず原因を特定してから継続する
  • 本番環境では事前にテスト環境で手順を検証する(今回みたいに)

個人的な気づき

LVMって最初は複雑に見えるけど、各レイヤーの役割を理解すると「なるほど」って思えるようになりました。特に、物理→論理の抽象化によって、こういう柔軟な運用ができるんですね。

まだまだ勉強中の身なので、もし間違いがあったり、もっと良いやり方があれば教えてください!

まとめ

LVMパーティションの拡張は、手順こそ多いものの、各段階の意味を理解すれば決して難しい作業ではありません。
同じような状況で困っている方の参考になれば幸いです!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?