3

Disk Sector と Block について疑問があります。セクターは、通常 512 バイトまたは 1k、2k、4k などの単位です。ハードウェアに依存します。ファイルシステムのブロック サイズは、セクター サイズのグループです。

5KB のファイルを保存しているとします。セクターが 512 バイトでブロックが 4KB の場合、これはどのようにディスクに書き込まれますか?

そのファイルの 4KB が 1 つのブロックに書き込まれ、別の 1KB のファイルが別の 4KB ブロックに書き込まれます。現在、その 2 番目のブロックの 3KB は使用できません。

将来使えるのか、それとも無駄になるのか。10 個の 5KB ファイルをディスクに書き込むと、30KB のサイズが無駄になりますか、それともこの 30KB がディスク使用に使用されますか?

4

2 に答える 2

5

ファイルが「ブロック」サイズの倍数でディスクに保存されることは、十分に確立された事実です。

ファイルサイズ ~ Linux

ディスク上のファイルサイズ ~ Linux

ファイル サイズとディスク上のファイル サイズ ~ Windows

ブロックの概念は、ディスク上の物理セクターをファイルシステムで論理的に表現する簡単な方法として始まりました。各セクターには独自のヘッダー、データ領域、およびECCがあり、論理的に独立して表現できる最小のディスクでした。

時が経つにつれて、HDD コントローラーにキャッシュが出現したことで、複数の物理セクターのサイズの論理ブロックを持つことが容易になりました。このようにして、ディスク上のシーケンシャル I/O が増加し、スループットが向上しました。

現在、ブロックは利用可能なディスク領域の最小単位です。通常、ファイルはディスク上の 1 つ以上のブロックを使用して保存されます。

ディスク上のブロックに格納されたファイル

各ファイルでは、ファイルに変更が加えられるたびに最後のブロックに残っているスペース (存在する場合) が使用され、ファイルが「大きくなる」ため、新しく追加されたコンテンツを格納するために追加のディスク スペースが必要になります。

追加の領域要件 (現在の最後のブロックの空き領域が収容できる容量を超える) は、ディスク上の追加のブロックを要求し、新しいブロック セットを論理的にリンクして、ファイルの現在の最後のブロックに続くようにすることで満たされます。ファイル Aは、上記のシナリオを示しています。

事前にブロックを割り当てる利点は、断片化が減少することです。ディスク上のブロックの概念がなく、必要に応じてディスク領域が割り当てられる代替案を検討してください。つまり、割り当てられたディスク領域の量はファイル サイズとまったく同じです。

このようなセットアップでは、1 文字でもファイルに追加されるたびに、次の操作が必要になります。

  • 追加のメモリを割り当てます (さらに 1 文字)。
  • ファイルの初期領域を含む領域とこの新しいバイトの間にリンクを設定します。

このすべてのメタデータ、つまり「リンク」に関する追加の構成には、ディスク容量も必要です。これは、そのような「リンク」ごとに固定のオーバーヘッドを構成するため、そのような「リンク」を最小限の数に保つことが不可欠です。ディスク サイズを「ブロック」に割り当てるという概念により、オーバーヘッドが事前に決定された量に制限されます。

ディスク上の保証ファイル数 = Raw ディスク容量 / ブロックサイズ

また、ディスク I/O で最も時間のかかるタスクはディスク ヘッドの再配置であるため、このようなランダム シークはスループットを低下させます。頻繁なランダム シークも、ディスクの消耗を早める可能性が高く (ダンシング HDD を覚えていますか?)、可能な限り回避する必要があります。


このアプローチのその他の利点:

1.読み取りの高速化

ブロックを使用すると、ディスクの読み取りはブロック サイズまでシーケンシャルに行われます。シークが少ない = 読み取りスループットが高い。

2.書き込みの高速化

ブロックは、ページにマップできる単純な実装を提供するため、書き込みスループットも向上します。

于 2013-07-22T03:11:04.800 に答える
1

最初に注意すべきことは、ほとんどの場合、ブロック サイズはセクター サイズよりも大きいということです。


セクターサイズを確認するには、次のコマンドを実行します。

root@ubuntu:~# fdisk -l | grep -E "Sector size"
Sector size (logical/physical): 512 bytes / 512 bytes

セクタ サイズは、ドライブの購入時期に応じて、ほとんどの場合 512 バイトまたは 4096 バイトになります。


ブロックサイズを確認するには、次のコマンドを実行します。

root@ubuntu:~# blockdev --getbsz /dev/sda
4096

最近のほとんどの OS では、多くの場合、ブロック サイズは 4096 です。必要に応じてこれを変更できます


ブロックを完全に満たしていないファイルは、無駄なスペースになります。これは正常であり、予期されたものです。

http://linux.die.net/man/8/blockdev

https://serverfault.com/questions/29887/how-do-i-determine-the-block-size-of-an-ext3-partition-on-linux

http://www.linuxforums.org/forum/miscellaneous/5654-linux-disk-block-size-help-please.html

于 2013-07-22T02:05:36.517 に答える