私は混乱しています。 Linuxファイルシステムは、ルートノード(開始ノード)をルートディレクトリとするツリー構造です。 /home/abc
にフォルダabc
があり、/home/xyz
に別のフォルダxyz
があるとします。
フォルダーxyz
は、他のいくつかのフォルダーとその中のファイルで構成されます。 (ex def
およびmno
はその中のフォルダーです)
/
├── home/
│ ├── abc
│ └── xyz
│ ├── def
│ └── mno
コマンドを実行すると
mount --rbind /home/xyz /home/abc
(rbindは再帰的にバインドされます)xyz
内のフォルダーabc
のすべての内容が表示されます。さて、コマンドを実行すると
mount --bind /home/xyz /home/abc
xyz
内のabc
のすべてのコンテンツがまだ表示されます。
何故ですか?
--bind
は、--rbind
と同様に機能します。
--bind
と--rbind
の両方で、バインドマウントの下にディレクトリが表示されることを正しく確認しました。
違いは、--rbind
ではなく--bind
ではなく、バインドマウントの下に他のバインドマウントの内容が表示されることです。
あなたの例に適用されるように、簡単にするために/home/xyz/def
と/home/xyz/mno
が空のディレクトリであると仮定します。さらに、バインドマウントとしてthemを使用するとします。つまり、それらをmount --bind
またはmount --rbind
のマウントポイントとして使用します。これにより、空ではないように見えます。次に、以下を実行するとします。
mount --bind /home/xyz /home/abc
次に、/home/abc/def
と/home/abc/mno
の両方が存在しますが、再帰的ではないmount --bind
を使用したため、空に表示されます。
対照的に、次のコマンドを実行して、代わりに/home/abc
をバインドマウントにしたとします。
mount --rbind /home/xyz /home/abc
次に、/home/abc/def
と/home/abc/mno
の両方が存在しますそしてそれらは空ではないように見えます-これらには/home/xyz/def
および/home/xyz/mno
バインドマウントの内容があります-なぜなら再帰的なmount --bind
を使用しました。
完全に計算された例を次に示します。
ek@Gnar:~$ mkdir original
ek@Gnar:~$ touch original/a-regular-file
ek@Gnar:~$ mkdir original/a-directory
ek@Gnar:~$ mkdir parent-of-mountpoint
ek@Gnar:~$ mkdir parent-of-mountpoint/mountpoint
ek@Gnar:~$ Sudo mount --bind ~/original ~/parent-of-mountpoint/mountpoint
ek@Gnar:~$ mkdir nonrecursive-other-mountpoint recursive-other-mountpoint
ek@Gnar:~$ Sudo mount --bind ~/parent-of-mountpoint ~/nonrecursive-other-mountpoint
ek@Gnar:~$ Sudo mount --rbind ~/parent-of-mountpoint ~/recursive-other-mountpoint
ek@Gnar:~$ tree -F original/
original/
├── a-directory/
└── a-regular-file
1 directory, 1 file
ek@Gnar:~$ tree -F parent-of-mountpoint/
parent-of-mountpoint/
└── mountpoint/
├── a-directory/
└── a-regular-file
2 directories, 1 file
ek@Gnar:~$ tree -F nonrecursive-other-mountpoint/
nonrecursive-other-mountpoint/
└── mountpoint/
1 directory, 0 files
ek@Gnar:~$ tree -F recursive-other-mountpoint/
recursive-other-mountpoint/
└── mountpoint/
├── a-directory/
└── a-regular-file
2 directories, 1 file
ek@Gnar:~$ mount | grep ~
/dev/sda2 on /home/ek/parent-of-mountpoint/mountpoint type ext4 (rw,relatime)
/dev/sda2 on /home/ek/nonrecursive-other-mountpoint type ext4 (rw,relatime)
/dev/sda2 on /home/ek/recursive-other-mountpoint type ext4 (rw,relatime)
/dev/sda2 on /home/ek/recursive-other-mountpoint/mountpoint type ext4 (rw,relatime)
読んだ - man 8 mount
。それは言う(強調が追加された):
バインドマウント
ファイル階層の一部を別の場所に再マウントします。呼び出しは次のとおりです。
mount --bind olddir newdir
または、このfstabエントリを使用して:
/olddir /newdir none bind
この呼び出しの後、同じコンテンツに2か所でアクセスできます。 1つのファイルを(1つのファイルに)再マウントすることもできます。バインドマウントを使用して、通常のディレクトリからマウントポイントを作成することもできます。次に例を示します。
mount --bind foo foo
bindマウントコールは、単一のファイルシステム(の一部)のみをアタッチし、サブマウントは不可能です。サブマウントを含むファイル階層全体は、を使用して2番目の場所にアタッチされます。
mount --rbind olddir newdir
ファイルシステムのマウントオプションは、元のマウントポイントのオプションと同じであることに注意してください。