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の逼迫したpve-rootを、NFSストレージへのISOを退避して解消した話

0
Posted at

Proxmoxの逼迫したpve-rootを、NFSストレージへのISOを退避して解消した話

以下の記事は、GPT-5.4-chatと会話しながら問題を解消したのを記事にしたものです。

1-1. はじめに

Proxmoxを使っていると、気づいたらlocalストレージにISOがたまっていて、pve-rootの空き容量がじわじわ減っていることがあります。

私の環境でもまさにそれが起きていて、/var/lib/vz/template/isoに大きめのISOイメージをいくつも置いていた結果、pve-rootが圧迫されていました。pve-rootはデフォルトで100GBぐらいしか用意されていないので、isoファイルを沢山いれると枯渇します。

pve-rootへLVMの空き領域を追加することも考えましたが、単純にroot領域にISOが溜まっていたがのが問題でした。

そこで今回は、別のRaspberry PiマシンをNFSサーバーとして使い、ProxmoxのISO保存先をNFSへ逃がすことにしました。

この記事では、以下の流れで対応した内容をまとめます。

  • pve-root逼迫の状況確認
  • 原因の切り分け
  • Raspberry PiをNFSサーバー化
  • ProxmoxにNFSストレージを追加
  • ISOをNFSへ移動
  • localからISOを外して運用を整理

同じように「pve-rootが足りないけど、別ディスクは増やせない」という状況の方には、参考になると思います。

1-2. 先に結論

今回のポイントを先に書くと、こんな感じです。

  • ISOはファイルベースのデータなので、NFSへ逃がしやすいです
  • Proxmoxでは、ISO専用のStorageを分けておくと運用がかなり楽になります

最終的には、ISOをNFSへ移したことでpve-rootの空き容量をかなり回復できました。

2. まず何が起きていたのか

2-1. LVM上は少し空きがあった

最初に確認したのは、Volume Groupの空き領域です。

vgdisplay

このとき、pveのVolume Groupには十数GiBほどの未使用領域がありました。

そのため、たとえば次のようなコマンドでpve-rootを拡張すること15GB程度を追加できそうでした。

lvextend -l +100%FREE /dev/pve/root

2-2. ISOが原因

次に、ISO保存ディレクトリの中身を確認しました。

ls -lahtrS /var/lib/vz/template/iso

すると、数百MBのcloud imageに加えて、数GB級のISOがいくつも置かれていました。中には10GBを超える大きなISOもあり、合計するとかなりの容量になっていました。

つまり、今回のpve-root逼迫は、

  • ログ肥大化
  • aptキャッシュ
  • 一時ファイルの残骸

のようなものではなく、かなり素直にISOファイルの置き場がroot領域に乗っていたことが原因でした。

2-3. ファイルシステム構成も確認

あわせて、ブロックデバイスとファイルシステムも確認しました。

lsblk -f

この環境では、

  • pve-rootxfs
  • /var/lib/vzはrootファイルシステム上
  • local-lvmは別のLVM-thin領域

という構成でした。

つまり、/var/lib/vz/template/isoにISOを置き続ける限り、pve-rootはずっと消費され続ける状態でした。

3. なぜLVM拡張ではなく、ISO退避を選んだのか

3-1. 原因そのものを消したかった

LVM拡張は対症療法としては有効です。
ただ、今回は「たまたまrootが苦しい」のではなく、「ISOを置く場所がroot直下だった」ことが原因でした。

そのため、rootを大きくするよりも、ISOの置き場を分けたほうが構成として自然でした。

3-2. pve-rootがXFSだった

今回の/はXFSでした。XFSは拡張はしやすいですが、縮小は簡単ではありません。

そのため、何となくrootを広げてしまうより、まずは容量を使っている要因を切り分けて外に出すほうが、後々扱いやすいと考えました。

3-3. 別ディスクは追加できなかった

理想だけで言えば、別SSDや別HDDを追加して、ISO専用ストレージにするのが分かりやすいです。
ただ、今回はその方法が取れませんでした。

そこで、別で動かしているRaspberry Piを使い、NFSサーバーにしてISO保存先にする方針を取りました。

3-4. ISOはNFSへ逃がしやすい

VMディスク本体を低性能なストレージへ置くのは慎重に考えたほうがよいですが、ISOはそこまで高頻度に読み書きするものではありません。

そのため、

  • 新規インストール時に読む
  • たまに起動メディアとして使う
  • 普段は置いてあるだけ

という使い方であれば、NFS上に置いても十分実用的です。

4. ProxmoxのStorage設定をざっくり整理

4-1. localとは

Proxmoxで最初からよく出てくるlocalは、だいたい/var/lib/vzを指すDirectory Storageです。

たとえば、設定ファイルではこんな形になっています。

/etc/pve/storage.cfg
dir: local
        path /var/lib/vz
        content backup,iso,vztmpl

つまりlocalは、ファイルベースの保存先です。
ここには、たとえば以下のようなものを置けます。

  • ISOイメージ
  • バックアップ
  • コンテナテンプレート
  • snippets

今回問題になっていたのは、このlocal/var/lib/vzを見ていて、その中のtemplate/isoに大きなISOがたまっていたことでした。

4-2. local-lvmとは何か

一方でlocal-lvmは、LVM-thinを使うストレージです。

たとえば設定はこんな感じです。

/etc/pve/storage.cfg
lvmthin: local-lvm
        thinpool data
        vgname pve
        content rootdir,images

こちらは主に、

  • VMディスク
  • コンテナのrootfs

のようなブロックストレージ向けです。

つまり、ざっくり言うと次のようなイメージです。

  • local:ISOやバックアップのようなファイル置き場
  • local-lvm:VMディスク本体の置き場

4-3. 今回やりたかったこと

今回はlocalの中に置いていたISOを、別のNFSストレージへ移して、ISO保存先を分離したかったわけです。

そのため、最終的には次のような形にしました。

  • local:バックアップ、テンプレート用
  • iso-nfs:ISO専用
  • local-lvm:VM/CTディスク用

このように役割を分けると、かなり分かりやすくなります。

5. Raspberry PiをNFSサーバーにする

5-1. OSを確認

最初に、Raspberry Pi側のOSを確認しました。

cat /etc/os-release
uname -a

この環境ではUbuntu 24.04 LTSが動いていました。
Ubuntu系であれば、標準的なNFSサーバーパッケージでそのまま構成できます。

5-2. NFSサーバーパッケージをインストール

次に、NFSサーバーをインストールしました。

sudo apt update
sudo apt install -y nfs-kernel-server

導入後、サービス状態も確認しました。

systemctl status nfs-server --no-pager

この時点では/etc/exportsがまだないためメッセージが出ても問題ありません。後でexport設定を入れれば大丈夫です。

5-3. ストレージの空き容量を確認

ISO置き場として十分な容量があるか確認しました。

lsblk -f
df -hT

今回はRaspberry Pi側に十分な空きがあったため、そのままローカルディスク上にNFS公開用のディレクトリを作ることにしました。

5-4. NFS公開用ディレクトリを作成

公開ディレクトリを作りました。

sudo mkdir -p /srv/nfs/proxmox-iso
sudo chown nobody:nogroup /srv/nfs/proxmox-iso
sudo chmod 0775 /srv/nfs/proxmox-iso
ls -ld /srv/nfs /srv/nfs/proxmox-iso

このあたりはNFSの公開先として使えればよいので、分かりやすいパスにしておくのがおすすめです。

5-5. /etc/exportsを設定

次に、NFS exportを設定しました。

echo '/srv/nfs/proxmox-iso *(rw,sync,no_subtree_check,no_root_squash)' | sudo tee /etc/exports
sudo exportfs -ra
sudo exportfs -v

これで、Raspberry Pi側はNFSサーバーとして公開できる状態になりました。

6. ProxmoxからNFSストレージを追加

6-1. まずはNFS exportが見えるか確認

Proxmox側から、NFS exportが見えるかを確認しました。

showmount -e <NFSサーバーのIPアドレス>

ここで公開ディレクトリが見えれば、ネットワーク上の疎通はひとまずOKです。

6-2. 一時マウントして読み書き

いきなりProxmoxのStorageとして登録する前に、まずは手動マウントして動作確認しました。

mkdir -p /mnt/test-nfs-iso
mount -t nfs <NFSサーバーのIPアドレス>:/srv/nfs/proxmox-iso /mnt/test-nfs-iso
df -hT /mnt/test-nfs-iso
touch /mnt/test-nfs-iso/test-from-proxmox.txt
ls -lah /mnt/test-nfs-iso

この確認をやっておくと、

  • マウントできるか
  • 書き込みできるか
  • 変な権限問題がないか

を先に見られるので安心です。

6-3. ProxmoxにNFS Storageとして追加

問題なかったので、iso-nfsという名前でProxmoxに登録しました。

pvesm add nfs iso-nfs \
  --server <NFSサーバーのIPアドレス> \
  --export /srv/nfs/proxmox-iso \
  --path /mnt/pve/iso-nfs \
  --content iso

追加後は、状態を確認しました。

pvesm status
pvesm list iso-nfs

activeで見えていれば、ストレージとして使える状態です。

6-4. Proxmox向けのISOディレクトリを作成

NFSストレージの中に、ProxmoxがISOを認識するためのディレクトリを作成しました。

mkdir -p /mnt/pve/iso-nfs/template/iso
ls -lah /mnt/pve/iso-nfs
ls -lah /mnt/pve/iso-nfs/template
ls -lah /mnt/pve/iso-nfs/template/iso

7. 既存のISOをNFSへ移動

7-1. まずは小さいファイルから移動

最初から巨大ISOを動かすのはちょっと怖いので、まずは小さいファイルから移しました。

mv /var/lib/vz/template/iso/<小さめのイメージファイル> /mnt/pve/iso-nfs/template/iso/
pvesm list iso-nfs

移動後、元の場所から消えていて、NFS側に見えていることを確認しました。

ls -lh /var/lib/vz/template/iso/<移動したファイル>
ls -lh /mnt/pve/iso-nfs/template/iso/<移動したファイル>

7-2. 何本か移した時点で空き容量を確認

途中で、どのくらい効果が出ているかも確認しました。

df -h /
du -sh /var/lib/vz/template/iso

この時点でも、pve-rootの空きはかなり改善していました。

7-3. 残りのISOもまとめて移動

小さいファイルで問題がなかったので、残りのISOも順次移動しました。

mv /var/lib/vz/template/iso/<ファイル名> /mnt/pve/iso-nfs/template/iso/

最終的に、/var/lib/vz/template/isoは空になり、すべてiso-nfs側で見えるようになりました。

確認は次のコマンドで行いました。

ls -lh /var/lib/vz/template/iso
pvesm list iso-nfs
df -h /
du -sh /var/lib/vz/template/iso

その結果、pve-rootの空き容量はかなり戻りました。

8. localからISOを外して運用を整理

8-1. storage.cfgを確認

次に、ProxmoxのStorage設定を確認しました。

cat /etc/pve/storage.cfg

もともとのlocalには、ISOも含まれていました。

dir: local
        path /var/lib/vz
        content backup,iso,vztmpl

このままだと、またうっかりlocalへISOを置いてしまう可能性があります。

8-2. localからisoを削除

そこで、localからISOを外して、ISOはiso-nfs専用にしました。

まずバックアップを取ります。

cp /etc/pve/storage.cfg /etc/pve/storage.cfg.bak

そのうえで、localのcontentを変更しました。

sed -i 's/content backup,iso,vztmpl/content backup,vztmpl/' /etc/pve/storage.cfg
cat /etc/pve/storage.cfg

結果として、localは次のようになりました。

dir: local
        path /var/lib/vz
        content backup,vztmpl

これで、今後の運用がかなり分かりやすくなりました。

9. 最後の確認と後片付け

9-1. iso-nfsがactiveか確認

最後に、NFSストレージがちゃんとマウントされているか確認しました。

mount | grep iso-nfs
pvesm status

ここでiso-nfsactiveで見えていればOKです。

9-2. 一時マウントを片付け

手動テスト用に作った一時マウントポイントは不要なので削除しました。

umount /mnt/test-nfs-iso
rmdir /mnt/test-nfs-iso
ls -ld /mnt/test-nfs-iso

これで後片付けも完了です。

10. まとめ

10-1. 今回やったこと

今回やったことをまとめると、以下の通りです。

  • pve-rootの逼迫状況を確認しました
  • 原因が/var/lib/vz/template/iso配下のISO肥大化だと切り分けました
  • Raspberry PiをNFSサーバーにしました
  • ProxmoxにISO専用のNFS Storageを追加しました
  • 既存のISOをすべてNFSへ移しました
  • localからisoを外して、ISO保存先を整理しました

10-2. 得られた効果

今回の対応で、pve-rootの空き容量はかなり改善しました。

単純にrootを広げるのではなく、容量を食っている要因を別ストレージへ逃がしたことで、構成も分かりやすくなりました。

特に、

  • localはバックアップやテンプレート向け
  • local-lvmはVMディスク向け
  • iso-nfsはISO専用

という役割分担できました

10-3. 今後の注意点

この構成で気をつけたいのは、やはりNFSサーバー側です。

  • Raspberry Piが落ちるとISOは見えなくなります
  • ISOの読み込みはローカルより遅いことがあります
  • NFSサーバー側の空き容量も見ておく必要があります

ただ、ISO置き場として割り切るなら、かなり実用的だと思います。

10-4. おわりに

同じような構成で困っている方の参考になれば嬉しいです。
固めていこうと思います。

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?