web-dev-qa-db-ja.com

取り付けの概念を理解する際の問題

Linuxにデバイスをマウントするとはどういう意味ですか?OSの概念として「マウント」を理解する の両方を読んだので、次のように述べられているところに問題があります。

アクセス可能なすべてのストレージには、この単一のディレクトリツリー内に関連付けられた場所が必要です。これは(ファイルパスの最も一般的な構文で)ストレージコンポーネント(ドライブ)ごとに1つのディレクトリツリーがあるWindowsとは異なります。マウントとは、ストレージデバイスをディレクトリツリーの特定の場所に関連付けることです。

しかし、/ dev/cdromの下にcdromドライブなどのアクセス可能な場所がすでにあり、これは明らかにディレクトリ階層にあります。では、なぜ/ media/cdromの下に別の「マウントポイント」を作成する必要があるのでしょうか。/dev/cdromから直接アクセスできないのはなぜですか?デバイスノードファイルは通常のファイルと同じだと聞きました。そして、それらへの読み書きは通常のファイルと同じです。つまり、これは、/ dev/cdromからアクセスした場合、cdrom内のファイルシステムが使用できないことを意味します。そして、(マウントする)ファイルシステム階層(cdrom内)が「マウント」されると、「生きた」状態になりますか?

13
sounak

/ dev/cdromを読み書きできます(例:ddまたはcatを使用)。ただし、これを行うと、デバイスの生のバイトを読み書きするだけです。これは、さまざまな状況(パーティションの複製など)で役立ちますが、通常は、デバイスに格納されているディレクトリとファイルを確認します。

デバイスをマウントすると、基本的に、ソフトウェアのレイヤー(ファイルシステムドライバー)を使用してこれらの生のバイトを実際のファイルシステムに変換するようにカーネルに指示します。したがって、デバイスをマウントすると、そのデバイスのfilesystemがディレクトリ階層に関連付けられます。

11
PM 2Ring

私はこれについて次のように考えています。mountは、いくつかのファイルの内容をディレクトリツリーとして解釈するようにシステムに指示するツールです。

  • ファイルシステムにはディレクトリとファイルがあり、各ファイルはバイト文字列のラベルです。
  • /dev/cdromはファイルで、CDに保存されているバイトの文字列を表します。
  • この非常に長い文字列を直接読み取ることができますが、これは特別な目的(フルディスクイメージの作成など)を除いてあまり実用的ではありません。
  • この長い文字列には、追加の内部構造があります。ファイルシステムが含まれています。これには、この非常に長い文字列のどのディレクトリとファイルが格納されているかに関する情報があります。
  • mount -t iso9660 /dev/cdrom /media/cdromを使用して、システムに次のように伝えます。「/dev/cdromにあるこの非常に長いバイト文字列を取得し、iso9660形式のディレクトリツリーとして解釈し、場所/media/cdrom "。
  • 実際、これは通常のファイルでも機能します。ディスクイメージを含む通常のファイルを作成し、mountを使用してアクセスできます。これを試して:
 dd if =/dev/zero of = fs-image bs = 1M count = 50 
 mke2fs fs-image 
 Sudo mount fs-image/some/mount/point 

(最初の2つのコマンドは、イメージファイルを準備するときに初めて必要になるだけです。)

8

/dev/cdromdeviceファイルを参照します。これはnot光学ドライブに挿入したいディスクの内容ではなく、ハードウェアのビットへの参照です(そしておそらくソフトウェアドライバ)それをあなたに示すためにあなたが呼ぶかもしれない。ツリーのパスにmount/dev/cdromすると、そのcontentsファイルシステム

問題は-私はそれを行う別の方法を本当に考えることはできません。 Windowsでも それほど明白ではありませんが -\\?\volumename\のファイルシステムの抽象化はまだあります。それがどのように見えるかを覚えるのに1分かかりました、そして私はこれを発見しました それをグーグルする

...ボリューム名は、実際のボリュームデバイスを指すシンボリックリンクであり、通常は\Device\HarddiskVolume23の形式です。ドライブ文字であるMS-DOSデバイスの別の例があります。ボリュームにC:ドライブ文字が含まれている場合、\\?\C:というシンボリックリンクがあり、\Device\HarddiskVolumeXX形式の実際のボリュームを指します。

そして、多分それはそれほど異なっていないかもしれません-私はそれほど複雑ではないと主張しますが-それはちょうどより明白だと思います。それらは同じシステムではありませんが、根本的に異なるわけでもありません。

おそらく、/dev/device/path/to/its/mountの最も重要な違いは、後者のパスでは、ファイルシステム(データを整理された方法で処理することを目的としたソフトウェアの一部)が前者の内容を解釈していることです。あなたはただディスクを読むことはできません-誰かがあなたにそれを読まなければなりません。ファイルシステムは、デバイスの内容を解釈します。

5
mikeserv

上記の項目に加えて、ドライバーまたは他のプログラムはデバイスからデータをキャッシュできます。ハードディスクやサムドライブなどの読み取り/書き込みデバイスでは、デバイスに書き込まれたデータがまだ書き込まれていない可能性があります。ジャーナリングファイルシステムでは、デバイスが表示されなくなる前にジャーナルをフラッシュする必要がある場合もあります。次に、cryptfsなどの他のファイルシステムをオーバーレイするファイルシステムを取得します。これらのファイルシステムは、基礎となるファイルシステムが使用できなくなったときにそれを知る必要があります。

確かに、読み取り専用デバイスの場合、これはあまり意味がありませんが、それでも適用されます。

0
Joe Sewell