ファイルシステムは、ストレージデバイスを(非常に大きな)バイト配列として「認識」しますか?


12

ファイルシステムがストレージデバイスにどのように読み書きするかを知りたい。

私はこれがどのように機能するかと思います:

ファイルシステムはストレージデバイスに直接アクセスしませんが、ストレージデバイスは(ストレージデバイスのデバイスドライバーによって)(非常に大きな)バイト配列としてファイルシステムに提示されます。

たとえば、ファイルシステムがハードディスクにアクセスする場合、ハードディスクを表すバイト配列にアクセスします。

このように、ファイルシステムはあらゆる種類のストレージデバイス(従来のハードディスク、SSD、USBフラッシュドライブなど)で動作でき、ストレージデバイスのデバイスドライバーのみが変更されます。

この画像は、私が今説明したことを示しています。

ここに画像の説明を入力してください

私の理解は正しいですか?

回答:


15

Linux(および1980年代のUnix)では、ストレージデバイス(多くの場合、いくつかのハードディスクまたはSSDのディスクパーティション)はブロックデバイスこれを参照)であるため、ブロックの [サブ]シーケンス(これは物理 I / Oの基本単位)。物理ブロックサイズはハードウェア(古いIDEディスクのブロックサイズは512バイト、新しい大容量SATAディスクのブロックサイズは4Kバイト、Advanced Format wiki ページを読んでください)、およびファイルシステムを作成するとき(たとえば、mke2fsを参照) (8)mkfs)物理ブロックサイズの倍数(多くの場合、1を含む2の小さなべき乗)である論理ブロックサイズを指定できます。論理ブロックのアドレス指定についてもお読みください。

過去(1990年代のSun3ワークステーションのように)、ディスクは、ヘッドがセクターに編成されたシリンダーで構成され(CHS wikiページを参照)、セクターにブロックが含まれていました。今日、これらはまだ残っていますが、ハードディスクコントローラ(ディスク自体の回路)によって提供される人工的な人工物です。一部のOSでは、ブロックヘッドドライバーは、ディスクヘッドの移動と回転待ち時間を最小限に抑えるために、IO要求を再スケジュールおよび順序変更しました。

このように、ファイルシステムはあらゆる種類のストレージデバイス(従来のハードディスク、SSD、USBフラッシュドライブなど)で動作でき、ストレージデバイスのデバイスドライバーのみが変更されます。

はい、しかし、悪は詳細にあります(SSDに固有のTRIMおよびWrite Amplificationについて読んでください)。そして詳細は重要なので、実際の実装は図よりも単純ではありません。ファイルシステムについての詳細を読んでください(SMBNFSを含むクラスター化されたリモートファイルシステムについて考えてください。LogicalVolume Managerについても読んでください)。

オペレーティングシステムを読む:3つの簡単なピース(およびその永続化部分)。

FreeBSDではブロックデバイスがなくなっていることに注意してください(実際には、キャラクターデバイスとブロックデバイスに共通の抽象化を提供します)。WindowsでもOSはパーティション、ブロックサイズなどを知っていると思います(ただし、確認する必要があります)。


Windowsはディスク上のパーティションも処理し、各パーティションは異なるファイルシステムを使用する場合があります(1つはFAT-32、もう1つはNTFS)。ファイルシステムはブロックレベルでパーティションにアクセスするか、ブロックを「クラスター」にまとめることができます。どのパーティションでも、クラスターサイズは固定されます。
サイモンB

MSDOSがほとんどのことをしたからです。
バジルスタリンケビッチ

実際、FreeBSDはあなたが「ブロックデバイス」と呼ぶものをまだ使用しています。ブロックの大きな配列としてのみ、ハードディスクにアクセスする方法はありません。これらは、FreeBSDでは単にcharacter / rawデバイスと呼ばれます。彼らはまだブロックの大きな配列としてデバイスにアクセスします。FreeBSDで欠けているのはデバイスレベルでのキャッシュだけです。これは、ファイルシステムが既にキャッシュを提供しているため、必要ありません。
-juhist

3

Basile Starynkevitchの言うことはすべて正しい。もう少し追加します。実際、ディスクドライブは「ブロック」ドライブでしたが、ブロックデバイス(および他の多くのデバイス)は、「生」と「調理済み」の2つの形式で提示されました。Rawデバイスは、ネイティブストレージチャンクサイズの倍数であるチャンクでのみアドレス指定できます。したがって、rawディスクデバイスは、1バイトまたは2バイトだけでなく、一度に1つまたは複数のブロックのみを読み書きできます。調理済みのデバイスは、このような小さな操作を可能にするレイヤーを追加し、他のさまざまな機能を追加しました。

ファイルシステムはrawデバイスで動作するため、BSが説明したように、バイトの大きな配列としてではなく、ブロックの大きな配列として見ていました。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.