/dev/sdxxノードとは何ですか?

/dev/sdxxノードとは何ですか?

TLDPのこのイメージは素晴らしいです。これは、ファイル・システムへの実際の読み取り、書き込み、およびオープン・アクセスがユーザー・スペースに提供される前に、ブロックが仮想ファイル・システムにマップされることを示します。

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

そしてウィキペディア異なる階層に3つのバージョンのファイルシステムがあるとします。

したがって、標準(sdノード)は物理ノードを意味しますか、それとも左心室容積マップされた仮想ファイルシステム?

それとも、単にパーティションを参照するのでしょうか? (つまり、パーティションに直接書き込むとファイルシステムドライバがスキップされ、ファイルシステムドライバがないとファイル自体と対話することはできません。)

それでは、ファイルシステムドライバ/ファイルシステムを表すデバイスは何ですか?それとも…わかりません…誰かが私をカーネルディスクの使い方を説明するものにリンクできますか?

答え1

長すぎます。/dev/sdaXパーティションを示します。あなたの根本的な誤解はファイルシステムとパーティションの違いだと思います。パーティショニングは非常に簡単です。デフォルトでは、パーティションはディスクの先頭のパーティションテーブルに定義されているディスクの一部にすぎません。しかし、ファイルシステムはより進化しています。ファイルシステムは、本質的にカーネル(特にファイルシステムドライバ)が読み書きできるファイルを追跡するデータ構造です。技術的には、このデータ構造はディスク上のどこにでも配置できますが、fsデータ構造の開始はパーティションの開始と同じであると予想されます。

あなたの質問でLVMに言及しました。これは高度なトピックなので、今は忘れてしまいます(LVMは最後に説明します)。

0万の100GBハードドライブがあるとしましょう。この場合、100GBのファイルがあり/dev/sda(たとえばdu特殊ブロックであるため、長さが0と報告されますが)、0のみが含まれます。/dev/sdaカーネルが読み取りおよび書き込みのために生のデバイスコンテンツをユーザー空間に公開する方法です。これがディスクと同じ量のデータとディスクと同じコンテンツを持つ理由です。 5番目のビット/dev/sdaが0の代わりに1に変わると、カーネルは一致するように物理ドライブの5番目のビットを反転します。提供された図では、この書き込みはシステムコールインターフェイスを介してカーネルに移動し、IDEハードドライブドライバを介して最後にハードドライブ自体に移動します。


それでは、そのドライブにファイルを保存するなど、便利な作業をしたいとしましょう。これでファイルシステムが必要です。 Linuxカーネルにはいくつかのファイルシステムがあります。それぞれは、ディスク上の異なるデータ構造を使用してファイルを追跡し、次のようなさまざまな方法でデータ構造を変更することもできます。原子書き込み保証されます(つまり、書き込みが成功または失敗します。マシンがクラッシュしても、データは半分しか記録されません)。これは、人々が「ファイルシステムドライバ」について話すときに意味するものです。ファイルシステムドライバは、ディスク上の特定のファイルシステムのデータ構造を読み書きする方法を知るコードの一部です。例としては、ext4、btrfs、XFSなどがあります。

だからファイルを保存したいと思います。ファイルシステムとしてext4を選択したとします。今やるべきことは、空のファイルシステムのデータ構造がディスクに存在するようにディスクをフォーマットすることです。これを行うには、を使用してmkfs.ext4に書き込むように指示/dev/sdaすると、mkfs.ext4最初から始まる空のext4ファイルシステムに書き込まれます/dev/sda。その後、カーネルは/dev/sdaそれを物理ディスクの先頭に書き込んで適用します。ディスクにファイルシステムのデータ構造が含まれているので、mount /dev/sda /mntまったく新しいファイルシステムのマウント、ファイルシステムへのファイルの移動などを実行できます。/mntファイルへのすべての書き込みはシステムコールインターフェイスを介してext4ファイルシステムドライバに移動します(より抽象的な「このデータをこれらのファイルに書き込む」をfsデータに書き込む必要性に変換する方法を知っています)。特定の変更をディスクに保存し、IDEハードドライブ、最後にドライブ自体に保存します。


上記の方法はうまくいきますが、人々が一般的に仕事をする方法ではありません。通常彼らは使用します分割運転中。パーティションは基本的にドライブの特定の部分です。パーティションを使うとパーティションテーブルドライブの先頭に各パーティションの物理的な場所を指定します。パーティションを使用すると、ドライブをさまざまな目的に使用できるセクションに分割できます。

作りたいとしましょう二つドライブのファイルシステムはすべて約50 GB(つまり、それぞれの半分)です。まず、ドライブを分割する必要があります。これには、fdiskまたは同じツールを使用できますgdisk。どちらも異なる種類のパーティションテーブルを作成し、ツールに書き込むように指示できます/dev/sda。分割が完了すると/dev/sda/dev/sda1とが得られます/dev/sda2/dev/sda1これは/dev/sda2、ディスクのさまざまなパーティションを表すカーネルの方法です。先頭に書き込むと、/dev/sda2次の場所にある2番目のパーティションの先頭に書き込まれます。ディスクの中央

これを説明するもう一つの方法は話されることです/dev/sda/dev/sdaつまり、物理ハードドライブの内容を少しずつ読み込むということです。また、/dev/sda1ハードドライブの最初のパーティションのビットごとの内容もあります。これは、/dev/sdaわずかなデータ(パーティションヘッダー)と正確な/dev/sda1コンテンツがあることを意味します/dev/sda2。構成したパーティションであるディスクの特定の領域にマップされます/dev/sda1/dev/sda2

ここで再度 on を使用して、パーティションヘッダの直後にディスクへの書き込みを開始するmkfs.ext4ファイルシステムを作成できます。 on を/dev/sda1使用すると、ディスクの中央(したがってコンテンツの中央)にあるパーティションの先頭から書き込みを開始します。mkfs.ext4/dev/sda2/dev/sda

今、mount /dev/sda2 /mnt私はこれを行うことができます。これは、カーネルが2番目のパーティションの先頭から始まるファイルシステムデータを読み取り、それをより便利な形式、つまりその場所のファイルとディレクトリにユーザーに公開するように指示します/mnt。繰り返しますが、カーネルはファイルシステムドライバを使用して実際にこのマッピングを実行します。


それでは、LVMについて簡単に話しましょう。 LVMは基本的にパーティショニングを抽象化したものです。パーティションはディスクの物理的な場所に非常に直接マップされます。上記の二重パーティションの例では、最初のパーティションを削除し、2番目のパーティションを新しく確保された領域に拡張するとします。パーティションはディスク領域に直接マッピングされるため、50 GB のパーティションデータ全体を物理的にディスクの先頭に移動し、パーティションを最後まで拡張することが唯一の方法です。

LVMはこれらの痛みを軽減することを目指しています。デフォルトでは、LVMに複数のRAWストレージを提供し、そのストレージに何をすべきかを伝えます。 LVMはパーティションのように分割できる仮想の「ディスク」を提供しますが、プライマリストレージは割り当てた元のストレージプールのどこにでも存在できます。上記の例を使用してディスク全体をLVMで使用可能にしてから2つに分割すると、LVMがディスクを追跡できるため、最初の「パーティション」を削除し、2番目の「パーティション」を展開してそのスペースをすぐに埋めるできます。データを厳密に「順番に」維持する必要なく、ディスク上のデータの場所を指定します。

LVMのしくみの詳細については、この回答を参照してください。https://unix.stackexchange.com/a/106871/29146

答え2

/dev/sdaこれはハードドライブ全体のインターフェイスです。権限がある場合は、ドライブ内のどこにでも直接表示できます。/dev/sda1ドライブの最初のパーティションです。この時点では、ファイルシステムは関連しません。パーティションに直接ファイルシステムがある場合も、LVMコンテナでもあります。

関連情報