web-dev-qa-db-ja.com

Linuxのクォータを取得しようとすると、データはどこに保存されますか?

そのため、Linuxクォータシステムのすべてのチュートリアルとドキュメントは私を混乱させました。クォータが有効/オンになっているファイルシステムごとに、実際のクォータ情報はどこに保存されますか?それはファイルシステムのメタデータですか、それともファイル内ですか?

ユーザーfooが/ homeに新しいファイルを作成するとします。カーネルは、ユーザーfooがハード制限を下回っているかどうかをどのように判断しますか?カーネルはそのファイルシステムのクォータ情報を毎回集計する必要がありますか、それともスーパーブロックまたは他の場所にありますか?

私の知る限り、カーネルは実際のルールについてaquota.userファイルを参照しますが、現在のクォータ使用状況データはどこに保存されていますか?これは、repquotaなど以外のツールで表示できますか? TIA !!

更新:

助けてくれてありがとう。私はすでにそのミニHOWTOを読んでいました。ユーザースペースツールの使用法についてはかなり明確です。私が不明確だったのは、ユーザーごとの制限を保存したファイルに使用状況データも含まれていたかどうかであり、あなたはこれに「はい」と答えました。

私の知る限り、rc.sysinitは起動時にquotacheckとquotaonを実行します。クォータチェックプログラムはファイルシステムを分析し、aquota。*ファイルを更新します。次に、quota.hとquotactl()syscallを使用して、カーネルにクォータ情報を通知します。

この時点から、カーネルはその情報をハッシュし、変更が発生するとクォータ統計をインクリメント/デクリメントします。シャットダウン時に、init.d/Haltスクリプトは、ファイルシステムがアンマウントされる直前にquotaoffコマンドを実行します。カーネルがメモリに持っている情報でaquota。*ファイルを更新するquotaoffコマンドは表示されません。これは、aquota.userファイルの{a、c、m}回は、システムの再起動時、またはquotacheckコマンドの手動実行によってのみ更新されるためです。私の知る限り、カーネルはシャットダウン時に最新の使用状況データをフロアにドロップするだけのようです。この情報は、aquota。*ファイルの更新に使用されることはありません。これらは、起動時にquotacheck(rc.sysinit)によって更新されます。その更新された情報はすでにカーネルによって収集されていたので、私にはばかげているようです。だから...結論として、私はまだ方法について完全に明確ではありません。 ;)

3
CarpeNoctem

クォータが有効/オンになっているファイルシステムごとに、実際のクォータ情報はどこに保存されますか?

たとえば、 quotaonのマンページ 。ファイルシステムのルートディレクトリには、必要な情報(.quota.user、.quota.group、.quota.ops.user、.quota.ops.group)を含む.quota *という名前のファイルがあります。

ユーザーfooが/ homeに新しいファイルを作成するとします。カーネルは、ユーザーfooがハード制限を下回っているかどうかをどのように判断しますか?カーネルはそのファイルシステムのクォータ情報を毎回集計する必要がありますか、それともスーパーブロックまたは他の場所にありますか?

いいえ、カーネルは継続的にfsの使用状況を追跡するため、割り当てごとにそれを再計算する必要はありません(非常にコストがかかります)。クォータが有効になると、計算が1回実行され、それが更新されます。最初の計算は quotacheck によって実行されます。

私の知る限り、カーネルは実際のルールについてaquota.userファイルを参照しますが、現在のクォータ使用状況データはどこに保存されていますか?これは、repquotaなど以外のツールで表示できますか? TIA !!

クォータ情報は.quota *に保存されます(上記を参照)。 repquota以外に、クォータ使用状況レポートを生成するためのツールを知りません。ただし、repquotaを使用/スクリプト化してほとんどのレポートを生成できるはずです。または、ソースをハックする必要があります...

ところで:

Quota mini-HOWTO Linuxクォータシステムの概要を説明します。少し時代遅れですが、ファンダメンタルズはそれほど変わっていません。

3
sleske

アップデートを読んでみると、マシンがシャットダウンされたときに、aquota。*ファイルに書き込まれるのではなく、カーネルが持っているすべてのクォータ情報が破棄されるのはなぜか疑問に思っているようです。

ええと、カーネルはその場でファイルを更新しません。これは時間の点でコストがかかるからです。基本的に、クォータが有効になると、カーネルはソフト/ハード制限に達して何かをしなければならない場合に使用状況を追跡します。つまり、システム上の任意のユーザー/グループにfsブロックを割り当てる必要があるたびにこれを追跡します。その後、fsブロックを割り当てようとしているときにaquota。*ファイルを更新する必要がある場合は、中程度のビジー状態のシステムでも問題が発生する場所を確認できます。カーネルがこれを監視し、違反をログに記録するため、必要ありません。あなたのために、あなたはquotacheckを実行するために来ることを知っています。クォータの計算でさえ問題を引き起こす可能性があります。そのため、調整可能なsysctl--dquot-max-とレポートsysctl--dquot-nr--の詳細についてはこちらをご覧ください。

http://www.mjmwired.net/kernel/Documentation/sysctl/fs.txt

停止プロセスではなく、初期化プロセス中のクォータチェックの配置に関しては、時間と物事の考え方がすべてです。通常、サーバーを停止するときは、サーバーをすばやく停止する必要があります。クォータの集計に多くの時間を費やす必要はありません。私たちは、初期化に時間がかかることに慣れています。また、このプロセスは、システムのシャットダウン時にクリーンアップするのではなく、システムの起動時に初期クォータカウントを初期設定することと考えてください。 FSがクォータを有効にせずに別のシステムにマウントされ、通常どおり再起動された場合は、毎回どこから開始しているかを知りたいと思います。停止するたびに初期化するので、そこでセットアップされます。

お役に立てば幸いです。

1
Ali Chehab