フラッシュドライブ/ハードドライブがシステムに接続されているときにマウントする必要があります。インストール中に正確に何が起こりますか?システム/カーネルはフラッシュドライブの内容をどのように追跡しますか?
答え1
まず、ソフトウェアを実行しない限り、実際には自動的にインストールされません。この動作はカーネルではなくユーザー空間で完全に処理されます。これは、自動マウントがセキュリティにとって悪夢であるため、やや重要です(衝突の可能性がある、または少なくともイメージングされたシステムで洗練されたDoSを持つほとんどのファイルシステムについて)。
今実際に起こるのは、udevとudiskの標準的な組み合わせを使用して自動マウントをトリガーするLinuxの一般的な順序です。
- デバイスはカーネルによって物理的に接続され、列挙されます。カーネルはこれを一種のブロックデバイスとして認識し、このインターフェイスをユーザースペースに公開するように適切なドライバーを設定し、ユーザースペースでリッスンしているすべての項目に新しいハードウェアが接続されたことを知らせるためにueventを実行します。
- カーネルはデバイスのパーティションをスキャンします。
/dev
Udevはこのueventを見て、そのデバイスへのさまざまなデバイスノードとリンクを確立します。次に、デバイスとそのパーティションを検索して、どのファイルシステムがどこにあるかを確認し、このデータを他のプログラムがクエリできる場所に保存します。- Udisksはカーネルでueventを見て、udev設定が完了したことを確認し、手順3で完了したudevスキャンで見つかったファイルシステムがあるかどうかを確認します。そうであれば、udisksは新しく接続されたファイルシステムを自動的にマウントするように設定されており、カーネルにファイルシステム固有のマウント要求を送信します。
- カーネルは内部的に以下を実行してファイルシステムをマウントします(はるかに単純化されています)。
- まず、対応するファイルシステムタイプに合ったドライバがあることを確認し、そうでない場合はロードを試みます。
- ファイルシステムドライバは、ファイルシステムスーパーブロック(ファイルシステム自体のすべてのメタデータが保存される場所)から必要なメタデータを解析します。
- スーパーブロックのメモリ内コピーを作成し、ファイルシステムドライバとmountコマンドによって提供されるデータで埋めます。このデータ構造は、カーネル内でファイルシステムを内部的に参照するために使用されます。カーネル内のファイルシステムへの他のすべての内部参照は最終的にこのポイントを指します。
- その後、カーネルはこのメモリのスーパーブロックへの参照を使用して内部マウントテーブルを更新します。
現在、カーネルがどのように「物を追跡するか」については、正しく説明する方がはるかに複雑です。簡単に言えば、そうではありません。デバイスのファイルにアクセスしようとするたびに、カーネルはファイルシステムのルートでそのファイルを探します。キャッシュがあると作業速度が速くなる可能性がありますが、パフォーマンス以外には重要ではありません。
答え2
フラッシュドライブに内容を保存して、フラッシュドライブの内容を追跡します。
また、(カーネルに)マウントテーブルがあります。/dev/disk/by-label/home
(実際のデバイスへのリンク)がにインストールされていることがわかります/home
。 USBフラッシュドライブがマウントされていることがわかり、/media/my-flash
これらのディレクトリにディレクトリを変更すると他のデバイスに移動します。
現在のインストール状態を使用しmount
て確認してください。df -h
答え3
最新のLinuxグラフィックインターフェース(GNOMEなど)は、udisks
バックグラウンドプロセス(「サービス」)に要求を送信してファイルシステムをマウントします。ドライブを接続すると、自動的にこれを行う傾向があります。これらのタスクを停止する方法を見つけるのは難しく、mount
コマンドの効果を直接テストする必要があります。これを避ける簡単な方法は、テキストコンソールにログインすることです。 (テキストコンソールログインの詳細については、次を参照してください。ここ)
コマンドを使用してに要求を送信することもできますudisks
。このコマンドの現在のバージョンはですudisksctl
。
USBフラッシュドライブを接続すると(通常)USBストレージドライバがそのドライブに「バインド」されます。ブロックデバイス.[*] Linux: lsblk
(ブロックデバイスリスト)をご覧ください。
同様に、mount
ブロックデバイスを使用すると、一部のファイルシステムソフトウェアがここにバインドされます。ファイルシステム形式によってソフトウェアが異なります。たとえば、FAT32ファイルシステムは通常フラッシュドライブで使用されます。 Linuxでは、このファイルシステムタイプをと呼びますvfat
。実行時にmount
2つのパラメータ、つまりデバイスとファイルシステムがマウントされるディレクトリ名を含める必要があります。そのディレクトリ名(たとえばls /mnt
)にアクセスすると、元のディレクトリの代わりにマウントされたファイルシステムが表示されます。
引数なしで実行すると、マウントされたmount
ファイルシステムが一覧表示されます。ただし、LinuxではList File Systemを man mount
使用する方が良いというメッセージが表示されます。 Linuxにインストールされた多くの仮想ファイルシステムを構成するのに役立つ素晴らしい出力があります(アルファベット順には並べ替えられませんが)。findmnt
findmnt
ls
df -h
また、Linux上の多くの仮想ファイルシステムを除いて、各ファイルシステムの空き容量を表示するので、素晴らしい出力があります。 (厳密に言えば、一部の複雑なLinuxファイルシステム設定では、表示されているよりも複雑に使用可能なスペースを処理できます。たとえば、ファイルデータを圧縮すると、より少ないスペースが必要になる場合があります。)
みんなアクセス可能なファイルは、マウントされたファイルシステムの1つに保存されます。/
マウントされたファイルシステムのリストに表示されます。/
「ルート」ディレクトリです。 /
ファイルの完全な「パス」(位置)の最初の部分です。 (注:ファイルのフルパスは「絶対」パスとして説明されています)。
ルートファイルシステムには特別な点があります。umount
つまり、操作(マウント解除)できません。ルートファイルシステムは常に使用中と見なされます。
シャットダウンシーケンスは、ルートファイルシステムを読み取り専用(mount / -o remount,ro
)に再マウントします。ファイルシステムを読み取り専用で再マウントすることは、変更されたファイルを書き換えるように要求し(たとえば、ハードディスクのブロックデバイスに)、完全なシャットダウンを準備するように要求する方法です。この意味では、除去と同じ目的で使用されます。
一部の低レベルLinuxソフトウェア交換ルートファイルシステムは、マウントされた他のファイルシステムに接続されますpivot_root
。その後、古いルートファイルシステムをアンマウントできます。そのためには、ここでは説明しないいくつかの特定の条件が必要です。この機能は、ramベースの初期ファイルシステム(initramfs)がマウントされた後に実際のルートファイルシステムにリダイレクトされる一般的なLinuxディストリビューションの起動プロセスを提供するために作成されました。なぜこれを行うのかについての説明があります。ここ。
[*] Linuxでは、ドライバを使用する最初のデバイスにsd
名前が割り当てられるsda
式です。
USB記憶装置は特定の形態のSCSIを可能にする。したがって、USBストレージドライバはscsiデバイスを提供し(SCSIディスク)、ドライバはscsiデバイスにsd
バインドされてブロックデバイスを提供します。
sd
さまざまなタイプのブロックデバイスに使用されます。必ずしも物理ディスクである必要はなく、ハードウェアは必ず必要な他のコマンドを使用できます。翻訳されたSCSIから。コンピュータは奇妙です。このパターンの理由は、いくつかの要因によって異なります。必ずしも関連していない歴史的詳細。