2

開発中のマルチユーザーWebアプリケーションにディレクトリごとのクォータを実装したいと思います。問題は...クライアントが独自のプライベートドキュメントを保存するためのドキュメントマネージャーを実装しましたが、この機能のためにスペースが不足したくないので、クライアントに特定の制限を割り当てたいと思います。

Linuxでディレクトリごとのクォータを実装するための標準的な方法は存在しないようです(クォータは主にユーザーまたはグループを対象としていますが、Windows Server2008R2がディレクトリごとのクォータを処理する方法のようなものが必要です。基本)私は「トリック」を使用することを選択しました。私は基本的にこれを行います:

touch client1.ext3
dd if=/dev/zero of=./client1.ext3 bs=1024 count=16384
mkfs.ext3 ./client1.ext3
mount -o loop,rw ./client1.ext3 ./mountpoint

これは単なるコードサンプルですが、それがアイデアです...クライアントに割り当てる仮想の「ボリューム」を作成して、クライアントがプライベートデータを保存できるようにします。さらに必要な場合は、ストレージごとの金額で支払うことができます。基礎。

これに見られる「問題」は、/ dev階層に8つのループデバイスが表示されていることです。現在、アプリケーション用に17のテストクライアントがあるため、現在存在するループデバイスの量が私のニーズをカバーしていません。カーネルバージョン2.6.23までは最大256のループデバイスを割り当てることができ、制限(バージョン2.6.24以降)は理論的には存在しませんが、まだいくつか懸念があります。

正直なところ、/ dev階層を1000以上のループデバイス(システムの存続期間中はまったくマウント解除されない)で埋めるのは非常に間違っており、実行すべき方法ではないように感じますが、中間として実行可能かもしれません-用語の解決策なので、私の質問は次のとおりです。

  • シングルループデバイスはどのくらいのメモリを割り当てますか?
  • システムがクラッシュしたり、256以上のループデバイスが割り当てられてパフォーマンスが低下したりしますか?
  • ループデバイスの数を動的に増やすことはできますか?また...
  • 起動時に使用可能なループデバイスの数を事前に定義するにはどうすればよいですか?
4

3 に答える 3

2

あなたが説明したアイデアは、実際には手動で行われる「論理ボリューム管理」(LVM)です。これに LVM を使用すると、「よく知られている標準」と「オンラインでのサイズ変更などを含む優れたツール サポートがある」という 2 つの利点があります。

于 2012-03-03T18:41:41.123 に答える
1

オペレーティング システムではなく、アプリケーションでストレージ クォータを追跡します。このような大量のループバック ファイルシステムを作成すると、大量のストレージが浪費され、パフォーマンスが低下し、スケーリングが悪化します。

于 2012-03-03T18:29:29.297 に答える
0

LVM は静的に分割されたハードディスク領域を追加し、その上にファイルシステムを作成します。ext4 または xfs の場合、空き pv スペースを lv に追加し、ユーザーまたはグループに割り当てられたオンザフライ デバイスのサイズを変更します。残念ながら、サイズを小さくする (縮小する) 場合は、オフラインで行う必要があります。最初に、マウントされていないファイルシステムのサイズを減らす必要があります。次に、lv サイズを減らす必要があります。ただし、lv をファイルシステムのサイズよりも小さくすると、fs が破損するため、これは危険です。xfs には縮小機能がなく、拡大することしかできません。

別のアプローチは、より高度なファイルシステムです。これは、Linux で完全にサポートされている btrfs、またはヒューズとしてではなく、Linux カーネル モジュールとして実装されている zfs です。これらのファイルシステムを使用して、論理サブボリュームを作成し、オンザフライで最大利用可能スペースを増減できます。空き容量はすべてのボリュームに共通です。これらのファイルシステムでは、ラバースペースをそのデータが存在するサブボリュームに割り当てることは不可能であり、この方法では fs の損傷は不可能です。残念ながら、この fs をサポートする公式の分散 Linux カーネルがないため、モジュールとして zfs を個別にコンパイルする必要があります。ただし、 btrfsを確認できます。その機能は現在 zfs に非常に近く、カーネルによって公式にサポートされています。

ところで。loop は、メジャー番号 7 のブロック デバイスに基づいており (/dev/loop* 特殊ブロック ファイルを参照)、64 個のマウント ポイントが利用可能です。この数はもっと多いかもしれませんが、達成したことはありません。より多くのループを構成する方法のレシピは、http ://www.tldp.org/HOWTO/CDServer-HOWTO/addloops.html にあります 。しかし、私の友人はいくつかのトリックについて教えてくれました。ループデバイスを手動で追加することができ、mknod /dev/loop8 b 7 8 、 mknod /dev/loop9 b 7 9 などによって、もちろんモジュールを変更せずにオンザフライで使用できます。 conf ファイルなどを作成し、一時的な udev ファイルシステムで作成すると、追加のループはすべて失われます。

于 2017-01-10T11:28:00.500 に答える