再帰mountを試す(その1)


アニメ『斉木楠雄のΨ難』

笑いが止まらないです。2期は終わってしまいましたが、まだ視聴が追いついてないので、なんともですが、1期の方が笑えました。1期1話の、ママとパパのバカっぷりが面白すぎて、心を掴まれたまま連続視聴したからでしょうか。ぜひ3期やってほしいです。

最近はmountコマンドに感心があって、本アニメから思いつくような、学習したいネタといったら、「再帰」が浮かんでしまったので、できるのかどうか知らないですが、再帰mount試してみます。

では、./a/b/cというパスのディレクトリ階層を作成。

takk@deb9:~/tmp$ ls
takk@deb9:~/tmp$ mkdir -p a/b/c

作成したディレクトリ階層をfindで確認します。

takk@deb9:~/tmp$ find
.
./a
./a/b
./a/b/c
takk@deb9:~/tmp$ 

では、cをaにマウントします。失敗してくれるでしょうか。

takk@deb9:~/tmp$ sudo mount --bind a a/b/c
takk@deb9:~/tmp$ 

な、なんと。エラーメッセージが出ません。
成功した、ってことでしょうか。

おそるおそる確認。

takk@deb9:~/tmp$ ls
a
takk@deb9:~/tmp$

ディレクトリaは、健在のようです。さすがに壊れるわけないですね。
順に確認していきます。面倒なので、lsで表示したディレクトリへcdするようにします。

takk@deb9:~/tmp$ cd `ls`
takk@deb9:~/tmp/a$ !!
cd `ls`
takk@deb9:~/tmp/a/b$ !!
cd `ls`
takk@deb9:~/tmp/a/b/c$ 

さあ、次です。マウントポイントであるcの配下が、aにmountされているのか。

takk@deb9:~/tmp/a/b/c$ !!
cd `ls`
takk@deb9:~/tmp/a/b/c/b$ 

普通にありますね。マウント成功してたようです。
どんどん見ていきます。

takk@deb9:~/tmp/a/b/c/b$ !!
cd `ls`
takk@deb9:~/tmp/a/b/c/b/c$ !!
cd `ls`
takk@deb9:~$ 

あれ? ホームディレクトリに切り替わったということは、
引数なしのcdコマンドが実行されたということですね。
となると、直前のディレクトリ~/tmp/a/b/c/b/cより下には、ディレクトリが存在しないことになります。

findで確認してみます。

takk@deb9:~$ cd tmp
takk@deb9:~/tmp$ find
.
./a
./a/b
find: ファイルシステムのループが検出されました。 ‘./a/b/c’ は ‘./a’ のファイルシステムのループの一部になっています。
takk@deb9:~/tmp$ 

findでは、再帰自体が許されないのか途中で中断されてしまいました。
(おそらく回避方法はあると思いますが、別の機会に)

では、mountのmanを確認。

takk@deb9:~/tmp$ man mount

省略

       Linux 2.4.0 以降では、 ファイル階層の一部をどこか別の場所に再マウントす
       ることができる。 使い方は以下の通りである。
              mount --bind olddir newdir
       この呼び出しの後、同じ内容を 2 つの場所でアクセスできる。 1  つのファイ
       ルを (1 つのファイル上に) 再マウントすることもできる。

       この呼び出しでは 1 つのファイルシステム (の一部) のみをアタッチするだけ
       で、 サブマウントはアタッチしない。  サブマウントを含むファイル階層全体
       は、 以下のコマンドで 2 番目の場所にアタッチできる。
              mount --rbind olddir newdir

サブマウントはアタッチしない、とあるので、–bindオプションでは、配下でマウントされているディレクトリはマウントされないだけのようです。

–rbindで再帰マウントできるか試してみたいところですが、もう少し調べてからにしてみます。

Leave a Reply

Your email address will not be published. Required fields are marked *

CAPTCHA