0

Java でクロスプラットフォームの非分散ディスク ストレージ プロトコルを開発しています。ファイルはかなり独立した、通常は小さな (< 4 KB) "データ チャンク" で構成されます。FS ブロックの境界を越えてチャンクを書き込むことを回避すると、FS ブロックの読み取りエラーが触れるチャンクが少なくなるため、プロトコルをより堅牢にすることができますか? ほとんどのファイル システムでは、ファイル データの先頭がブロック アラインされていると想定できますか?

ターゲット パーティションのブロック サイズが 4 KB であることがわかっているとします。

SeekableByteChannel ch = Files.newByteChannel(file, CREATE, WRITE);
ch.write(buffer);
long pos = ch.position();
long alignment = 4096;
if (pos % alignment != 0)
    ch.position(((pos / alignment) + 1) * alignment);
ch.write(buffer2); // will buffer2 data be really FS block-aligned?
4

1 に答える 1

1

FS ブロックの境界を越えてチャンクを書き込むことを回避することで、プロトコルをより堅牢にすることができますか?

理論的にはそうですが、実際には違いがあるとは思えません。まず、ディスク エラーは非常にまれです...あなたの経験に関係なく。

また、「チャンク」を 4k 境界に揃えることの欠点は、特にファイルが通常小さい場合に、かなりの量のディスク領域を浪費する可能性があることです。(そして皮肉なことに、その無駄遣いは、より多くのディスク ブロックを使用していることを意味します。これにより、ディスク エラーに対する脆弱性が高まります。)

ほとんどのファイル システムでは、ファイル データの先頭がブロック アラインされていると想定できますか?

ほとんどのファイル システムでは、はい。いいえ。


ディスク エラーが気になる場合は、次のいずれかを実行することをお勧めします。

  • ディスク全体の損失から回復できる構成で RAID ディスク アレイを使用します。

  • 定期的にバックアップを作成し、できればコピーをオフサイトに保管してください。

  • 保証が切れる前にディスクを交換してください...または、「不良バッチ」からのディスクを持っているという兆候がある場合.

于 2013-05-26T15:56:08.653 に答える