2011-02-02 3 views
2

作成直後に削除される数百から数千の一時的なハードリンクやシンボリックリンクを作成する必要があります。私の目的として、両方のタイプのリンクが動作します(つまり、ターゲットはディレクトリではなく、常に同じファイルシステムに存在します)多くのハードリンクの作成/削除の短所はありますか?

私が理解しているように、シンボリックリンクは、元のファイルへのパス。ハードリンクは同じiノード内のデータへの参照を作成します。だから多分数千のリンクを作成/削除しようとすると、何千もの小さなファイル(シンボリックリンク)や何千ものこれらの参照(ハードリンク)を作成して削除する方が良いでしょうか?それは、他の人がファイルシステム自体に課税するかもしれないが、1つは(おそらく断片化)ハードドライブに課税するようだ? inode参照はどこに格納されていますか?私は非常に多くのハードリンクを張ってファイルシステムを破壊する危険性がありますか?スピードはどうですか?

あなたの専門知識をお寄せいただきありがとうございます。

これは、ffmpegを使用して、ディレクトリの画像の任意のサブセットからムービーをエンコードできるようにするためのものです。 ffmpegではファイルの名前を正しく指定する必要があるため(例:frame%04d.jpg)、ファイルのサブセットにハード/シンボリックリンクを作成してリンクに適切な名前を付けることができます。これにより、元のファイルの名前を変更したり、実際にデータをコピーする必要がなくなります。それは素晴らしい作品ですが、何千ものリンクを繰り返し作成して削除する必要があります。

アドレスのソートこの問題は、あまりにも私は信じている: convert image sequence using ffmpeg

答えて

3

このアクティビティでファイルシステムが破壊された場合、ファイルシステムに障害があります。ファイルシステムは一般にかなり信頼性が高いので、心配しないでください。

いずれのオプションも、ディレクトリにエントリを追加する必要があります。シンボリックリンクにはファイルの作成も必要です。ファイルにアクセスすると、ハードリンクは直接コンテンツにジャンプしますが、シンボリックリンクにアクセスする際には、シンボリックリンクファイルを見つけて読み込み、コンテンツがあるディレクトリを見つけ、コンテンツの場所を見つけてからアクセスする必要があります。したがって、シンボリックリンクは、ファイルシステム全体のためにより多くの作業をしています。

しかし、ファイル内のデータを実際に読み取る作業と比較すると、その差はわずかです。したがって、私はそれについて心配することはありません、あなたが望むセマンティクスをあなたに提供するものがあれば、それに行きましょう。

3

あなたが同じファイルに数十万人を作成しようとしていないので、ハードリンクはわずかに良く行っています。

ただし、/ tmpがtmpfsの場合、/ tmp内のシンボリックリンクは、さらに優れたパフォーマンスを発揮します。

ああ、シンボリックリンクが小さすぎて断片化の問題が発生する可能性があります。

1

いずれのオプションも、ディレクトリinodeにファイルエントリを追加する必要があります。ディレクトリ構造は、新しいブロックを割り当てることによって大きくなる場合があります。

しかし、シンボリックリンクにはiノードの割り当てが必要であり、ファイルシステムにはiノードの制限があります。 何十万というのシンボリックリンクがその制限に達する可能性があります。「ファイルのスペースが不足しています」エラーメッセージが表示され、ギガバイトが空いています。

デフォルトでは、ファイルシステム作成ツールは、物理パーティションサイズに応じて最大inode数を選択します。たとえば、Linux ext2/3/4の場合、mkfs.ext3/etc/mke2fs.confにあるbytes-per-inodeの比率を使用します。あなたははハード主にディスク上のリソース消費のために、メモリ内のリンク(VFS構造内を好む必要があり、結論として

# dumpe2fs /dev/sda1 | grep -i inode | less 

Inode count:    979200 
Free inodes:    742304 
Inodes per group:   16320 
Inode blocks per group: 510 
First inode:    11 
Inode size:    128 
Journal inode:   8 
First orphan inode:  441066 
Journal backup:   inode blocks 

:既存のファイルシステムについては

は、ここでは、iノードに関する情報を取得するためのコマンドですキャッシュ)。

別のアドバイス:同じディレクトリにあまりにも多くのファイルを作成しないでください。パフォーマンス上の問題を回避するには、2'000ファイルが妥当な制限です。

関連する問題