解決策 1:
最新のシステムでは、パーティションが実際に存在する場合にのみ、パーティション デバイスが表示されます。
MBR パーティション テーブルを持つディスクでは、パーティション番号 1 ~ 4 は、「プライマリ」パーティションと呼ばれるパーティション テーブルの 4 つのスロットに対応します。これらは順番に入力する必要はないため、たとえば、sda2 を指定して sda1 を指定しないことも可能です。パーティション番号 5 以上は拡張パーティションの「論理ドライブ」に対応し、それらは常に連続番号が付けられているため、sda5 がなければ sda6 を使用することはできません。
GPT パーティション テーブルを持つディスクには、さらに多く (通常は最大 128) のパーティションが存在する可能性があり、すべてが「プライマリ」です。たとえば、パーティションが sda9 だけのディスクを作成できます。
ディスクにパーティション テーブルがなければ、もちろんパーティション デバイスもありません。
古いシステム (udev によって管理されるものではなく、静的な /dev を使用するシステム) は、通常、パーティションが実際に存在するかどうかに関係なく、可能なすべてのパーティション番号のデバイス ノードを持ちます。 (もちろん、存在しないパーティションのデバイス ファイルを開こうとすると失敗します。)
パーティショニングを行わずに、ファイルシステムを直接ディスクに置くことができます。ブロック デバイスをマウントすると、ファイル システム ドライバーは通常、デバイスの先頭から所定のオフセットでスーパーブロックを探します。パーティションの先頭はディスク自体の先頭ではないため、パーティション内のファイル システムのスーパーブロックは「ディスク全体」デバイスで作成されたファイルシステムのスーパーブロックとは異なるディスク上の場所にあります。
そのため、ディスクにファイルシステムだけがあった場合、それが分割され、ファイルシステムがパーティションに作成された場合、古いスーパーブロックがまだそこにある可能性があります。最初のパーティションの開始前の小さなギャップで。そのため、ディスクは raw ディスク デバイスとパーティション デバイスの両方にファイルシステムを持っているように見えます。これは、どちらをマウントしようとしても、ファイルシステム ドライバーがスーパーブロックを探しに行くときに 1 つ見つかるためです。
ただし、ディスク上で重複するため、両方のファイルシステムをマウントして使用することは実際には安全ではありません。ある人は重要な簿記データを他の人が空き領域と考える場所に持っているかもしれません。そのため、raw ディスクをパーティション化されたディスクに変更する場合、またはその逆の場合、またはパーティションで使用されるファイルシステムのタイプを変更する場合などに、ブロック デバイスの先頭をゼロにして、不要なスーパーブロックを削除することをお勧めします。 .
解決策 2:
私の知る限り、/dev
にノードを追加するだけでなく、カーネルが scsi のような (sata を含む) バスで新しいブロック デバイスを検出すると、 ディスク自体全体。 /dev/sda
パーティションテーブルがあるかどうかを確認しようとします。読み取り可能なパーティションがある場合、物理パーティションか論理パーティションかによって番号が付けられたパーティション ノードが作成されます (論理パーティションは #5 から始まると思います)。
ディスク ノードはあるがパーティション ノードがない場合は、パーティションが検出されていないことを意味します。パーティションテーブルなしで物理デバイスに直接書き込まれたファイルシステムがあることを意味するため、物理デバイスをマウントできるインスタンスを認識していません。パーティションが 1 つしかない場合は、mount
になる可能性があります。 mount /dev/sda
を解釈します /dev/sda1
を意味するコマンド 、しかし、私はこれをテストしたことがありません.
解決策 3:
/dev/sda - raw デバイス
/dev/sda1 - パーティションのような「仮想」デバイス。
興味深い違いの 1 つは、デバイスにパーティションがある (MBR データまたは sth がある) 場合、MBR データはデバイスのパーティションの外側に存在するため、どの仮想デバイスからも MBR データを読み取ることができないことです。 MBR は、デバイスの最初のセクター (CHS:0 0 1) にあります。デバイスの開始後に最初のパーティションを 1MiB で作成することをお勧めします。
MBR データを読み取るには、raw デバイス (/dev/sda) を使用する必要があります。つまり:
dd if=/dev/sda of=mbr.bin bs=512 count=1