この質問は、私が経験している技術的な問題とは何の関係もありません。デザイン決定を理解することです。
私にとって質問は、「Linuxのマウントポイントが既存のディレクトリである必要があるのはなぜですか?」です。 2つの部分があります。
- マウントポイントがディレクトリである必要があるのはなぜですか?
- マウントポイントが既存のファイルである必要があるのはなぜですか?
どちらのシナリオも私にとって意味がありません。
何らかの理由でマウントポイントが存在する必要があると仮定すると、VFSは明らかにFS自体がサポートしていない操作を実行します。それでは、マウントポイントがディレクトリであることを確認するのはなぜですか?私が考えることができる唯一の反論は「はい。しかし、アプリケーションがすでに特定のパスがディレクトリを指していることを決定した場合はどうなりますか?」です。これについて私は、「まあ、とにかくそのパスしか持っていなければ、インストールされていない場合でもディレクトリを指すことも、もはや存在しないかもしれませんし、インストールに関係なくアクセスし続けることができます」
質問の2番目の部分は私にとってはるかに少ない理解です。繰り返しますが、VFSはFSでサポートされていないタスクを実行しています。それでは、なぜFSが話すことに興味があるのでしょうか?あるいは、我々が関心を持つことにした場合、なぜ何も強制せずに何かが存在するように強制する必要がありますか?もちろん、何もない場合は、誰かが後で何かを作成しようとしている場合は、何が起こるかについての質問を解決する必要があります。しかし、それは非常に単純なもののようです。一方、何かが存在するように強制すると、マウントがあるときは常により高いレベルのFSサブツリーが非表示になります。これは、以前に遭遇した問題とは反対の問題を含むいくつかの異なる問題を引き起こすようです。誰かがコンテンツを削除しようとするとどうなりますか?しかし、これは、「プロセスが現在このサブツリーを閲覧しているか、プロセスのパスワードがこのサブツリーにある場合はどうなりますか?」などの質問につながります。そして、「親FSのスペースを空にし、削除するファイルがそのサブツリーにある場合はどうなりますか?」
私はこのデザイン決定が下された点を必ず探しているわけではありません(もちろんそれがはるかに過去にさかのぼると想像しているので知ることが興味深いですが)。私はこのデザイン決定の理由を探しています。
答え1
Unixでは、ディレクトリもファイルで、その内容はサブファイルのリストです。
同時に空のディレクトリ/dev/sdb1
にマウントしようとしているとします。/mnt/usb
/mnt
既存のマウントポイントなしでマウントが許可されている場合は、マウント後:
- あなたは訪問することができます
/mnt/usb
- ただし、リストに
/mnt
名前が付いた項目はありませんusb
。
これは不一致を引き起こす可能性があります。
/mnt
したがって、リストを同期するには、マウントポイントが既存のファイルである必要があります。既存のファイルはディレクトリでなくてもよく、通常のファイルでもかまいません。