ファイルとストレージのマッピング
この記事で整理したいこと
別の記事(ファイルシステム - Knのアウトプット)で
ファイルシステムがないと、人間やアプリケーションはデータが実際に記録されているストレージ上の位置を指定してデータにアクセスしなくてはならない。ストレージ上の位置は意味も文脈もないただの番地であり扱いにくい。
と書いた。これについて、実際のデータがどのように記録され、ファイルとマッピングされているかを整理する。
ファイルとストレージのマッピング
ざっくりとは、ストレージ上のビット列をある一定の塊として扱い、その塊とファイルがマッピングされている、と理解しておけばよい。
上述の「ある一定の塊」も階層的にまとめられている。小さいほうから順に追っていく。
ビットとバイト
コンピュータで扱うデータの最小単位はビットである。情報はビットの集合体、すなわち1と0の2種類の数字の列、で表現される。8ビットをまとめて1バイトと呼ぶ。記憶装置の容量はビットではなくバイト数で表すことが多い。
ビット/バイトのストレージ上での表現方法
ストレージ上のデータの実体もビット列として記録されている。ビットの表現方法はストレージを構成する記憶装置により異なる。記憶装置の物理的な特性を利用して1と0の2状態を表現する。例えば、HDDであれば磁性体の磁荷の向き、SSDやメモリであれば素子内の電化の状態によって1か0かが変わる。記憶装置上の物理的に連続した8ビットが1バイトとして表現される。
記憶装置への入出力単位
記憶装置への入出力は1ビットや1バイトごとに行うのではない。入出力の性能が落ちないようにまとまった固定長のデータの塊ごとに行う。以下にHDDの場合の入出力単位について説明する。SSDの場合は全く異なる。
HDD
HDDにおいては、この固定長の単位をセクタと呼ぶ*1。昔のセクタのサイズは512バイトが主流だったが、現在は4096バイト(4KiB)が主流である。入出力対象のセクタは物理的なアドレスで指定する。指定方法は複数ある(CHS方式、LBA方式)*2。
セクタとブロック
OSのファイルシステムから見た最小単位をブロックもしくはクラスタと呼ぶ*3。HDDにおいては、ブロック/クラスタはセクタをひとまとめにしたものとなる。セクタサイズとブロックサイズ/クラスタサイズが同一の場合は1対1にマッピングされる。
SSDの場合でもOS側から見ればブロックに対し入出力を行っている。ただし、OSから見たブロックとマッピングされる記憶装置側のデータの塊がセクタではない*4。
まとめ
記憶装置上の固定長バイトのデータの塊であるセクタと、OSのファイルシステムから見たブロックがマッピングされている。ファイルはファイルシステムにより複数のブロックとマッピングされている。
本記事で記載しなかったこと
AFT、ボリューム、LVM、エクステント、SSDにおける入出力単位(ページやブロックの話)等、関連する内容はまだあるが、改めて別記事に切り出して記載することとする。
参考にしたもの
ストレージ 進化するSSD(Solid State Drive) - 富士通
ISO9660 その2 物理セクタ、論理セクタ、論理ブロック: せんべえ焼き、もしくはコースターメーカー
HDDのセクタサイズ~512セクタと4Kセクタ【パソコン購入術】
Quora なぜコンピュータは1と0しか理解できないのですか?
オペレーティングシステム: 講義案内 ※スライド6 「ファイルシステムAPIとメモリマップドファイル」
「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典 セクタ
セクターサイズとクラスタサイズ(ブロックサイズ)の違い, 不良セクタとfsck/chkdsk について│SEの道標
関連記事
*1:ディスクセクタ、物理セクタ、ブロック、物理ブロックなどと呼ばれることもある
*2:CHS方式は磁気ディスクのどこにいるかをシリンダ、ヘッド、セクタの番号で一意に指定する。これだと記憶装置の種類や物理構造によって指定方法が異なってしまい不便だった。LBA方式は物理構造を気にせず、各セクタに通し番号を振る方式であり、前述の問題点を解消している。
*3:セクタをブロックと呼ぶこともあると別の脚注で書いている通り、ブロックという言葉は多義で使われる。そもそも、ブロックという言葉が一般的に固定長のデータの塊という意味と考えればいろいろな用語で使われるのはやむを得ない気はする。
*4:参考サイトによればSSDでもセクタを仮想的に提供できるらしい。
セクターサイズとクラスタサイズ(ブロックサイズ)の違い, 不良セクタとfsck/chkdsk について│SEの道標
SSD にはセクターという物理要素はありませんが、Advanced Format と同様、論理セクター(製品によっては仮想セクターと呼ぶ)を提供できますし、ものによっては設定でセクターサイズを変更できます。