Windows system >> Windowsの知識 >  >> Linuxシステムチュートリアル >> Linuxチュートリアル >> Linuxファイルシステムの分析

Linuxファイルシステムの分析

  

ファイルシステムに関しては、Linux®はオペレーティングシステムの「Swiss Army Knife」と見なすことができます。
Linuxは、ジャーナル化されたファイルシステムからクラスタ化されたファイルシステム、暗号化されたファイルシステムまで、幅広いファイルシステムをサポートしています。 Linuxは、標準的なエキゾチックファイルシステムを使用し、ファイルシステムを開発するための優れたプラットフォームです。この記事では、Linuxカーネルの仮想ファイルシステム(VFS、仮想ファイルシステムスイッチとも呼ばれる)について説明し、次にファイルを

システム間で接続するための主な構造について説明します。


基本的なファイルシステムアーキテクチャ

Linuxファイルシステムアーキテクチャは、複雑なシステムを抽象化した興味深い例です。共通のAPI関数を使用することで、Linuxはさまざまなストレージデバイス上の多数のファイルシステムをサポートできます。たとえば、read関数呼び出しは、指定されたファイル記述子から特定のバイト数を読み取ることができます。 read関数はext3やNFSのようなファイルシステムの種類を知りません。また、ATAPI(AT Attachment Packet Interface)ディスク、SAS(Serial-Attached SCSI)ディスク、SATA(Serial Advanced Technology Attachment)ディスクなど、ファイルシステムが存在する記憶媒体もわかりません。ただし、read関数を呼び出してファイルを読み込むと、データは正常に返されます。この記事では、このメカニズムの実装について説明し、Linuxファイルシステム層の主な構造を紹介します。


ファイルシステムとは何ですか?

最初によくある質問、「ファイルシステムとは」にお答えください。ファイルシステムは、ストレージデバイス上のデータとメタデータを整理するためのメカニズムです。定義は非常に広いため、それをサポートするコードは興味深いものになる可能性があります。前述のように、ファイルシステムとメディアにはさまざまな種類があります。これらの多くの種類のため、Linuxファイルシステムインタフェースは、ユーザインタフェース層、ファイルシステムの実装、およびストレージデバイスを操作するドライバを分離する階層化アーキテクチャとして実装されることが予想されます。


プロトコルとしてのファイルシステム

ファイルシステムを見るもう1つの方法は、ファイルシステムをプロトコルと見なすことです。ネットワークプロトコル(IPなど)は、インターネットを介して送信されるデータストリームの意味を規定し、同様にファイルシステムは特定の記憶媒体上のデータの意味を規定します。


充填

Linuxでファイルシステムをストレージデバイスに関連付けるプロセスは、マウントと呼ばれます。 mountコマンドを使用して、ファイルシステムを現在のファイルシステム階層(ルート)に接続します。マウントを実行するときは、ファイルシステムの種類、ファイルシステム、およびマウントポイントを指定します。 Linuxファイルシステム層の機能(およびそのマウント方法)を説明するために、現在のファイルシステム内のファイルにファイルシステムを作成します。これを行う方法は、最初にddコマンドを使用して指定サイズのファイルを作成することです(/dev /zeroをソースとしてファイルをコピーします)。——つまり、リスト1に示すようにゼロで初期化されたファイルです。リスト1.初期化ファイル$ ddを作成する場合= /dev /zero of = file.img bs = 1k count = 1000010000 + 0レコードin10000 + 0レコードout $には10MBのfile.imgファイルがあります。 losetupコマンドを使用して、ループデバイスをこのファイルに関連付け、ファイルシステム内の通常のファイルではなくブロックデバイスのように見せます。$ losetup /dev /loop0 file.img $このファイルはブロックデバイスとして表示されます( /dev /loop0で表されます。次にmke2fsを使ってこのデバイス上にファイルシステムを作成します。このコマンドは、リスト2に示すように、指定されたサイズの新しいext2ファイルシステムを作成します。リスト2.ループデバイスを使ったext2ファイルシステムの作成$ mke2fs -c /dev /loop0 10000mke2fs 1.35(2004年2月28日)max_blocks 1024000、rsv_groups = 1250、rsv_gdb = 39ファイルシステムラベル= OSタイプ:Linuxブロックサイズ= 1024(log = 0) )フラグメントサイズ= 1024(log = 0)2512 inode、スーパーユーザー用に10000ブロック500ブロック(5.00%)...マウントコマンドを使用して、ループデバイス(/dev /loop0)で表されるfile.imgファイルをマウントします。マウントポイント/mnt /point1へ。ファイルシステムの種類はext2として指定されていることに注意してください。マウントすると、リスト3に示すように、lsコマンドを使用するなど、このマウントポイントを新しいファイルシステムとして使用できます。リスト3.マウント・ポイントを作成してループ・デバイスを介してファイルシステムをマウントする$ mkdir /mnt /point1 $ mount -t ext2 /dev /loop0 /mnt /point1 $ ls /mnt /point1lost + found $リスト4に示すように、このプロセスを続行します。マウントしたばかりのファイルシステムに新しいファイルを作成し、それをループデバイスに関連付けて、その上に別のファイルシステムを作成します。リスト4.ループ・ファイル・システムに新しいループ・ファイルシステムを作成する$ dd if = /dev /zero of = /mnt /point1 /file.img bs = 1k count = 10001000 + 0 records in1000 + 0 records out $ losetup /Dev /loop1 /mnt/point1/file.img$ mke2fs -c /dev /loop1 1000mke2fs 1.35(2004年2月28日 - 28日)max_blocks 1024000、rsv_groups = 125、rsv_gdb = 3ファイルシステムラベル= ... $ mkdir /mnt /point2 $マウント-t ext2 /dev /loop1 /mnt /point2 $ ls /mnt /point2lost + found $ ls /mnt/point1file.img lost + found $この簡単なデモでは、Linuxファイルシステム(およびループデバイス)が簡単に理解できるようになります。なんて強力なのでしょう。ファイルにループデバイスを使用して暗号化ファイルシステムを作成することもできます。必要に応じてループデバイスを使用して一時的にファイルをマウントすることで、データを保護することができます。


ファイルシステムのアーキテクチャ

ファイルシステムのコンストラクタを見たので、Linuxファイルシステムのレイヤアーキテクチャを見てみましょう。この記事では、2つの観点からLinuxファイルシステムを調べます。最初に、ハイレベルアーキテクチャの観点を採用します。それから、ファイルシステム層の主な構造を紹介するために、より深い議論が提示されるでしょう。


高度なアーキテクチャ

ほとんどのファイルシステムコードはカーネル内にありますが(後述のユーザー空間ファイルシステムを除く)、図1に示すアーキテクチャは次のようになります。ユーザー空間とファイルシステムに関連するカーネルの主要コンポーネントとの関係。


図1. Linuxファイルシステムコンポーネントのアーキテクチャ

ユーザースペースには、アプリケーション(ファイルシステムのユーザーなど)とGNU Cライブラリ(glibc)が含まれています。それらはファイルシステム呼び出し(open、read、write、そしてclose)のためのユーザーインターフェースを提供します。システムコールインタフェースはスイッチのように機能し、システムスペースをユーザ空間からカーネル空間の適切なエンドポイントに送信します。 VFSは、基盤となるファイルシステムへの主要なインタフェースです。このコンポーネントは、一連のインタフェースをエクスポートし、それらを個々のファイルシステムに抽象化します。個々のファイルシステムの動作は大きく異なる可能性があります。ファイルシステムオブジェクトには2つのキャッシュ(inodeとdentry)があります。最近使用したファイルシステムオブジェクトをキャッシュします。各ファイルシステムの実装(ext2、JFSなど)は、VFSで使用するための共通のインタフェースセットをエクスポートします。バッファキャッシュは、ファイルシステムと関連ブロックデバイス間の要求をキャッシュします。たとえば、基礎となるデバイスドライバへの読み書き要求は、バッファキャッシュを通過します。これにより、要求をキャッシュすることが可能になり、物理デバイスへのアクセス数が減り、アクセスが高速化されます。バッファキャッシュは、最近使用した(LRU)リストの形式で管理されます。 syncコマンドを使用して、バッファキャッシュから記憶媒体に要求を送信することができます(書き込まれていないすべてのデータをデバイスドライバに送信し、記憶装置に送信することを強制します)。


ブロックデバイスとは何ですか?

ブロックデバイスは、ブロック単位でデータを送受信するデバイス(ディスクセクタなど)で、バッファリングとランダムアクセスをサポートしています(ブロックを順番に読み取る必要はありませんが、いつでもブロックにアクセスできます)。ブロックデバイスには、ハードディスク、CD-ROM、RAMディスクなどがあります。ブロック型デバイスの反対側にはキャラクタデバイスがあり、物理的にアドレス指定できるメディアはありません。キャラクタデバイスには、これらのデバイスから1文字ずつデータを読み取ることしかできないシリアルポートとテープデバイスがあります。これは、高レベルのVFSおよびファイルシステムコンポーネントです。それでは、このサブシステムを実装する主な構造について説明します。

Copyright © Windowsの知識 All Rights Reserved