はじめに
どうも、Caruです。
Proxmoxを使っていると「VMを作成するたびにディスク容量が確保され、他のVMやシステムがその領域を使えなくなってしまう」という問題に直面することがあります。
これは、Proxmoxがデフォルトで「VMに割り当てられた領域をそのまま予約し続け、たとえ空きが出ても他のVMには使わせない」という挙動をするためです。 OS上でファイルを削除しても、ファイルシステムが「ここは空いたよ」とマークするだけで、物理的なディスク上のデータはそのまま占有され続けてしまうんですね。
今回は、この「使っていないのに確保されっぱなしの領域」を解放して、ディスク容量を節約する方法を紹介します。
Discard (TRIM) とは?
Discard(SSDではTRIMとも呼ばれます)は、OSがストレージデバイスに対して「このデータブロックはもう使ってないから、物理的に消しちゃっていいよ」と伝える機能です。
これを有効にすることで、Proxmox側も「あ、ここはもうVMが使ってないんだ」と認識できるようになり、その分の領域を解放してくれます。
手順1: Proxmox側の設定
まずは、Proxmoxの管理画面でVMの設定を変更します。
該当のVMを選択し、Hardwareタブを開きます。
ハードディスクの設定(例: scsi0)をダブルクリックして編集画面を開き、以下の設定を確認・変更します。
- Discard: チェックを入れる
- SSDエミュレーション: チェックを入れる(推奨。OSにSSDとして認識させることで、TRIMが効きやすくなります)
- バス/デバイス:
VirtIO SCSIであることを確認(VirtIO BlockだとDiscardが効かない場合があります) - (Optional) Cache:
Writeback(安全に、書き込みを若干早くできます)
設定を変更したら、一度VMを完全にシャットダウンしてから起動し直してください。(再起動ではなく、停止→開始)
例えば、
sudo shutdown nowのようにシャットダウンしてから起動してください。
手順2: ゲストOSでの実行
VMが起動したら、今度はゲストOS側から「不要な領域の解放」を指示します。
Linuxの場合、fstrim コマンドを使用します。
ターミナルを開き、以下のコマンドを実行してみましょう。
sudo fstrim --fstab --verbose--fstab:/etc/fstabに記載されているすべてのマウントポイントに対して実行--verbose: 解放されたバイト数を表示
実行すると、以下のように解放された容量が表示されます。
16.3GB解放されました!
多いときは画像のように数十GBもの容量が解放されることもあり、かなり気持ちいいです。
ProxmoxのWebUIを確認すると、local-lvmの容量が解放されていることが確認できます。
自動化する
毎回手動でコマンドを叩くのは面倒なので、定期的に実行されるようにしておきましょう。
最近のLinuxなら systemd のタイマーが用意されています。
sudo systemctl enable --now fstrim.timerこれで、週に1回などの頻度で自動的に fstrim が走り、ディスク容量を健全に保ってくれます。
まとめ
ProxmoxでVMを運用するなら、Discard設定はProxmoxを使うなら必須の設定だと思います! Proxmoxをお使いの方の参考になれば嬉しいです!
はじめに
どうも、Caruです。
Proxmoxを使っていると「VMを作成するたびにディスク容量が確保され、他のVMやシステムがその領域を使えなくなってしまう」という問題に直面することがあります。
これは、Proxmoxがデフォルトで「VMに割り当てられた領域をそのまま予約し続け、たとえ空きが出ても他のVMには使わせない」という挙動をするためです。 OS上でファイルを削除しても、ファイルシステムが「ここは空いたよ」とマークするだけで、物理的なディスク上のデータはそのまま占有され続けてしまうんですね。
今回は、この「使っていないのに確保されっぱなしの領域」を解放して、ディスク容量を節約する方法を紹介します。
Discard (TRIM) とは?
Discard(SSDではTRIMとも呼ばれます)は、OSがストレージデバイスに対して「このデータブロックはもう使ってないから、物理的に消しちゃっていいよ」と伝える機能です。
これを有効にすることで、Proxmox側も「あ、ここはもうVMが使ってないんだ」と認識できるようになり、その分の領域を解放してくれます。
手順1: Proxmox側の設定
まずは、Proxmoxの管理画面でVMの設定を変更します。
該当のVMを選択し、Hardwareタブを開きます。
ハードディスクの設定(例: scsi0)をダブルクリックして編集画面を開き、以下の設定を確認・変更します。
- Discard: チェックを入れる
- SSDエミュレーション: チェックを入れる(推奨。OSにSSDとして認識させることで、TRIMが効きやすくなります)
- バス/デバイス:
VirtIO SCSIであることを確認(VirtIO BlockだとDiscardが効かない場合があります) - (Optional) Cache:
Writeback(安全に、書き込みを若干早くできます)
設定を変更したら、一度VMを完全にシャットダウンしてから起動し直してください。(再起動ではなく、停止→開始)
例えば、
sudo shutdown nowのようにシャットダウンしてから起動してください。
手順2: ゲストOSでの実行
VMが起動したら、今度はゲストOS側から「不要な領域の解放」を指示します。
Linuxの場合、fstrim コマンドを使用します。
ターミナルを開き、以下のコマンドを実行してみましょう。
sudo fstrim --fstab --verbose--fstab:/etc/fstabに記載されているすべてのマウントポイントに対して実行--verbose: 解放されたバイト数を表示
実行すると、以下のように解放された容量が表示されます。
16.3GB解放されました!
多いときは画像のように数十GBもの容量が解放されることもあり、かなり気持ちいいです。
ProxmoxのWebUIを確認すると、local-lvmの容量が解放されていることが確認できます。
自動化する
毎回手動でコマンドを叩くのは面倒なので、定期的に実行されるようにしておきましょう。
最近のLinuxなら systemd のタイマーが用意されています。
sudo systemctl enable --now fstrim.timerこれで、週に1回などの頻度で自動的に fstrim が走り、ディスク容量を健全に保ってくれます。
まとめ
ProxmoxでVMを運用するなら、Discard設定はProxmoxを使うなら必須の設定だと思います! Proxmoxをお使いの方の参考になれば嬉しいです!