web-dev-qa-db-ja.com

/ tmpへの書き込み時に「ディスククォータを超過しましたが、十分なスペース(linux)」

vPSを持っています。悪名高いParallels pleskで管理されています。

今日、メッセージが表示され始めました(wordpressを介して、最初はコマンドラインシェルからも)。「ディスククォータを超えました」と言っています。

user@machine:~$ echo aaa > /tmp/aaa
-bash: /tmp/aaa: Disk quota exceeded

しかし、マシンには多くのスペースがあり、パーティションは1つだけです。

user@machine:~$ df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/vzfs             100G   24G   77G  24% /

/ tmp/*からすべてのファイルを削除しましたが、まだです。

「vzfs」について何も知りません。おそらくそれが原因なのでしょうか?

何が悪かったのでしょうか?そしてそれをどのように修正できますか?

ソリューション!

(Parallels Pleskを使用しない場合は、@ Adaleeの回答を参照してください)

私の場合と同様に、Parallelのシステムに関連する@deltikのソリューションを参照してください。

df -iはすぐに、とてつもない数のiノードを提供しました:18,446,744,069,620,218,961これは、wordpress Webサイトにとっては異常です。

さらに調査したところ、qmailのキューがiノードでいっぱいであることがわかりました(私のマシンを使用してスパムを送信するためのハッカーの試みでいっぱいで、失敗の返信です)

ここではqmailの修正は関係ありませんが、私の回避策は関係があります。

  1. qmailのサービスを停止しました
  2. qmhandle をオーバークォータシステムにダウンロードできなかったので、
  3. スクリプトを抽出して別のWebサイトにアップロードし、
  4. 次のコマンドでキューを削除します。
  5. Perl <(wget -O- http://link.to.my/script.pl )-D

この方法では、スクリプトはWebから直接実行されます(安全な方法ではありませんが、スクリプトを自分で配置しました)。コマンドラインオプションを指定します。

この特殊な設定をその場で知り、すぐに認識して、さらに診断する手段を提供してくれた@deltikに感謝します。

9
Berry Tsakala

VZFSファイルシステムがあります。つまり、VPSはParallels Virtuozzo仮想マシンです。 Virtuozzoでは、ホスティングプロバイダーは、VZFSで取得する割り当てなど、多くのパラメーターに制限を設定できます。

原因:iノードが不足しています(最も一般的)

何百ものVirtuozzo VPSのお客様と何年にもわたって作業した結果、ファイルを作成できないという問題がありましたが、十分な空き容量があるように見えましたが、その大部分はiノードの制限に達していました。このコマンドを実行して、iノード割り当て(Inodes)、使用されているiノード(IUsed)、残りのiノード(IFree)、および使用されているiノードの割合(IUse%):

df -i

Iノードの使用率が100%になることはよくあります。私の経験の一般的な原因:

  • スパムメールのバウンスバック
  • キューに入れられた送信スパムメール
  • 大量の受信メールが保存されています
  • 一部のユーザーがPHPセッションガベージコレクション(session.gc_maxlifetime)を100年以上に設定している
  • 一般的なキャッシュファイルが多すぎる
  • WordPressプラグインW3 Total Cacheで有効になっているオブジェクトキャッシュ
  • Magentoエラーログ(エラーごとに新しいファイルが生成されます)
  • 大量のファイルを作成し、それらを削除するのを忘れるその他の不適切に構成された、または設計が不十分なプログラム/スクリプト

トラブルシューティング

Iノードの数が少ないか不足しているが、それらのほとんどがどこにあるかわからない場合は、現在のディレクトリを検索し、フォルダーの深さ1でiノードをカウントするこのBashワンライナーがあります。

for i in $(find $(pwd) -maxdepth 1 -type d | sort); do echo -e "$(find "$i" | wc -l)\t: $(readlink -f "$i")"; done | sort -nr

現在の作業ディレクトリを/から変更し続けて、inode割り当てを使い果たしている原因を見つけることができます。

説明

VPSは、Parallels Virtuozzoの一部であるVZFSファイルシステム上にあります(OpenVZは類似しておらず、同じテクノロジーに基づいていますが、OpenVZはVZFSを使用しません)。

VirtuozzoがファイルをVZFSに保存する方法により、ext4やXFSのような他のファイルシステムにある場合よりも、iノードが制限されることがよくあります。ホストはこれらすべてのファイルを追跡するため、単一のVPSが何億ものiノードを占有しないようにすると、ホスティングプロバイダーにとって有利になります。その結果、ホスティングプロバイダーは、1,000,000のiノードのように、iノードの制限を低く設定することがあります。

Virtuozzoでのiノード割り当てを使い果たした何百ものお客様と何年にもわたって作業した後、これらの「不可解な」ディスククォータの問題はもう驚きません。

原因:Virtuozzoのその他の制限

他の制限に達したため、私が使用したVirtuozzo VPSの顧客のごく一部にファイルシステムの問題がありました。このコマンドを使用すると、制限の一部(すべてではない)を確認できます。

cat /proc/user_beancounters

トラブルシューティング

failcnt列の値が0より大きいか、held列の値が対応するlimitの値と等しい場合は、制限に達しています。

各パラメーターの内容を調べることができます OpenVZのwikiはこちら 。パラメータは、「プライマリ」、「セカンダリ」、または「補助」のいずれかです。

VPSに達した制限のためにheldカウントを減らすことができない場合は、ホスティングプロバイダーに問い合わせてサポートを依頼する必要があります。

上限に達するとさまざまな症状が発生するので、どのBeanが最大になったかに応じて、この答えは大幅に拡張できます。

原因:ヒット後に制限が減少しました

/proc/user_beancountersまたはdf -iに関して、Virtuozzoシステム管理者は、パラメータのlimitheld値よりも小さくすることがあります。

たとえば、diskinodesパラメータの元の制限が1,500,000で、その制限に達した場合、ホスティングプロバイダーの誰かがiノードの制限を1,000,000に設定すると、df -iからの奇妙なiノードレポートが表示されます。意味がありません。

あなたの側で、あなたは不当に大きい数を見ることができました 18,446,744,069,620,218,961のような

私はこれをホスティングプロバイダーからの不吉な行動だと考えています。特に、プロバイダーから通知されない場合は、Virtuozzo/OpenVZの経験がないスーパーユーザーの知識に反するため、誤解を招く恐れがあります。アドバイス( 別の例 )。

トラブルシューティング

ホスティングプロバイダーにお問い合わせください。あなたが見つけたものを彼らに見せて、彼らと協力してあなたの手持ちの豆を限界以下にしてください。

彼らがあなたを助けることを拒否した場合、あなたのホスティングプロバイダーを捨てて、Virtuozzo/OpenVZ仮想化を使用しない別のものを見つけてください。 KVM仮想化、VMware仮想化、Xen仮想化、またはベアメタルサーバーは、Virtuozzo/OpenVZよりもはるかに少ない制限の対象になります。

説明

ホスティングプロバイダーがアラートを監査または応答していて、VPSが特定のリソース(ほとんどの場合、iノードの制限、つまり最後のdiskinodesパラメーター)を使いすぎていることが判明した可能性があります。

ホスティングプロバイダーの経験の浅いVirtuozzo管理者は、実際のリソース使用量よりも低い値に制限を減らすことで問題を抑えることができると考えています。 iノードの場合、現在の実際の使用量が1,500,000のように高くても、1,000,000のように低い割り当てになる場合があります。

Virtuozzo管理者のコントロールパネルには、実際の使用量と新しい制限が表示されますが、Virtuozzoが仮想化する方法が原因で、非常に不当に高い偽の数が表示されます。

過失のVirtuozzo管理者はこの変更について通知しません。これが発生した場合、ホスティングプロバイダーに連絡する必要があるのはこのためです。

15
Deltik

「ディスククォータを超えました」とは、ディスクに使用可能なスペースがないことを意味しませんが、それほど多くのスペースを使用することは許可されていません。

一般に、クォータは管理者が設定するいくつかの制限です-実行できるプロセスの最大数、占有できるスペースの量、保持できるファイルの数など。ディスククォータは、iノードとディスクブロックの最大数に設定できます。

quotaquota -gを実行してみてください(または、repquota -urepqouta -gを実行してください)。この方法でユーザーが制限されているかどうかとその方法を確認してください。はいの場合、edquotaを使用してこれらのクォータを編集するか、quotaoffコマンドを使用してそれらの割り当てをオフにすることができます。設定によっては、このためにrootとしてログインする必要がある場合があります。

このサイト は、クォータを使用する方法のいくつかの例をカバーし、便利なコマンドへのマニュアルページへのリンクも含みます。

4
Adalee