◇PVE上のRedmineがInternalErrorが出てアクセスできなくなった
■原因
容量不足
今回はすぐに気づいた
■経緯
自身のサーバー「sagyo」上に新しく「VOSK」という音声認識用のサーバーを立てようとした。
そこで、容量いっぱいあるし(df -h
で確認したけどルートは60%くらいは空きがあった)と思ってモデルをダウンロードした。
ダウンロード後もdf
してみたけど40%くらいの空きだった。
★コンテナ内は容量不足ではないがlocal-lvmの方が容量不足だった。
ここらへんの詳しい技術はもう少し勉強したいけど、とりあえず、仮想的な容量は物理的な容量には叶わないって事は理解しました。
さらに面白い事に容量がいっぱいになるとファイルの権限がなくなり、sudo rm
しようとしてもpermission denied
になった。
つまり、容量が100%になった状態で「やべっ」ってなってから慌ててダウンロードしたファイルとかを消そうとしてもできない。
pveのコンソールからならできるのか?についてはAIにきいてみた
AIの回答
- PVEのコンソール(ノードコンソールやシェルコンソール)からであれば、ホストレベルでの操作が可能
- 容量100%でもroot権限があれば、以下の方法で対処可能:
/tmp
や/var/log
の一時ファイル削除journalctl --vacuum-size=100M
でログファイルの削除- 不要なパッケージキャッシュの削除(
apt clean
など)- ただし、ファイルシステムが完全に満杯の場合、書き込み処理が必要な操作は失敗する可能性がある
また、今回のことが起きないようにPVE上でロック?みたいなことをかけられないのかな?と思ったのでこれまたClaudeにきいてみた
AIの回答
PVEで容量制限を設定する方法:
- コンテナレベル: LXCコンテナ作成時にディスク容量の上限を設定可能
- ストレージレベル: PVEの「Datacenter」→「Storage」から各ストレージの容量制限を設定
- 監視設定:
- PVEの監視機能で容量使用率のアラートを設定
- Zabbixなどの外部監視ツールとの連携
- シェルスクリプトでの定期的な容量チェック
■今回はどうしたのか?
今後の話は一旦置いといて今回はどうしたのかというと、同じlocal-lvmを使っているコンテナが使っていなかったのでコンテナ毎削除した。
削除しなくてもコンテナのDiskを別のDiskに丸々移動するっていう方法があるんだけど、これも容量を100%使っているとエラーがでてしまうので今回はできなかった。
移動すると以下のエラーが出る
TASK ERROR: command 'mount -o ro /dev/dm-11 /var/lib/lxc/127/.copy-volume-2//' failed: exit code 32
そんでやばいどうしようと冷や汗と動悸が止まらなくてとりあえずlocal-lvmのvolume見てみたら他のコンテナでも使っていることがわかった
しかもその中でいくつかは使っていないコンテナだったので、コンテナ毎消すことで九死に一生を得た。
そうすることで100%だった容量が94%くらいになり、まず「permission denied」が出なくなった。
これでダウンロードしたファイルを消せば解決。
ただ、今後のためにもlocal-lvmの使用は避けようと考え、sagyoサーバーのコンテナボリュームを別のDiskに移動させた(たまたま容量の空いているDiskがあった)
※なお、Diskの移動するにはコンテナがシャットダウンされていないとだめ。
すぐにスナップショット作ってredmine起動させたらとりあえず直前に上げたチケットも保存されていて安心した。
■まとめ
今回の件で学んだこと:
-
df -h
でのルート容量確認だけでは不十分。PVEではlocal-lvmなどのストレージプールの容量も要確認 - 容量のアラートを検討したほうがいい
- Diskの移動はできるが、100%だとできない
いや、Diskの容量移動できるのめちゃめちゃ感動した
ワンボタンでできるの最高でしょ
pve好き