ブログ一覧に戻る

【Proxmox】VMのディスク容量を節約!Discard機能で未使用領域を解放しよう

5 min read
ProxmoxServerLinuxStorage

はじめに

どうも、Caruです。

Proxmoxを使っていると「VMを作成するたびにディスク容量が確保され、他のVMやシステムがその領域を使えなくなってしまう」という問題に直面することがあります。

これは、Proxmoxがデフォルトで「VMに割り当てられた領域をそのまま予約し続け、たとえ空きが出ても他のVMには使わせない」という挙動をするためです。 OS上でファイルを削除しても、ファイルシステムが「ここは空いたよ」とマークするだけで、物理的なディスク上のデータはそのまま占有され続けてしまうんですね。

今回は、この「使っていないのに確保されっぱなしの領域」を解放して、ディスク容量を節約する方法を紹介します。

Discard (TRIM) とは?

Discard(SSDではTRIMとも呼ばれます)は、OSがストレージデバイスに対して「このデータブロックはもう使ってないから、物理的に消しちゃっていいよ」と伝える機能です。

これを有効にすることで、Proxmox側も「あ、ここはもうVMが使ってないんだ」と認識できるようになり、その分の領域を解放してくれます。

手順1: Proxmox側の設定

まずは、Proxmoxの管理画面でVMの設定を変更します。 該当のVMを選択し、Hardwareタブを開きます。

ハードディスクの設定(例: scsi0)をダブルクリックして編集画面を開き、以下の設定を確認・変更します。

  1. Discard: チェックを入れる
  2. SSDエミュレーション: チェックを入れる(推奨。OSにSSDとして認識させることで、TRIMが効きやすくなります)
  3. バス/デバイス: VirtIO SCSI であることを確認(VirtIO BlockだとDiscardが効かない場合があります)
  4. (Optional) Cache: Writeback (安全に、書き込みを若干早くできます) Proxmox Disk Configuration

設定を変更したら、一度VMを完全にシャットダウンしてから起動し直してください。(再起動ではなく、停止→開始)

例えば、

sudo shutdown now

のようにシャットダウンしてから起動してください。

手順2: ゲストOSでの実行

VMが起動したら、今度はゲストOS側から「不要な領域の解放」を指示します。 Linuxの場合、fstrim コマンドを使用します。

ターミナルを開き、以下のコマンドを実行してみましょう。

sudo fstrim --fstab --verbose
  • --fstab: /etc/fstab に記載されているすべてのマウントポイントに対して実行
  • --verbose: 解放されたバイト数を表示

実行すると、以下のように解放された容量が表示されます。

fstrim execution

16.3GB解放されました!

多いときは画像のように数十GBもの容量が解放されることもあり、かなり気持ちいいです。

ProxmoxのWebUIを確認すると、local-lvmの容量が解放されていることが確認できます。

自動化する

毎回手動でコマンドを叩くのは面倒なので、定期的に実行されるようにしておきましょう。 最近のLinuxなら systemd のタイマーが用意されています。

sudo systemctl enable --now fstrim.timer

これで、週に1回などの頻度で自動的に fstrim が走り、ディスク容量を健全に保ってくれます。

まとめ

ProxmoxでVMを運用するなら、Discard設定はProxmoxを使うなら必須の設定だと思います! Proxmoxをお使いの方の参考になれば嬉しいです!

この記事を書いた人

Caru

Caru

エンジニアを目指す大学生。20歳。
東洋大学情報連携学部(INIAD)所属(28卒)。