再帰mountを試す(その2)

続きです。まだ再帰的にはマウントしませんが、mountを入れ子にする実験です。

./a/b/cというディレクトリを作成し、./aを./a/b/cにマウントします。

takk@deb9:~/tmp$ ls
takk@deb9:~/tmp$ mkdir -p a/b/c
takk@deb9:~/tmp$ sudo mount --bind a a/b/c
takk@deb9:~/tmp$ mountpoint a/b/c
a/b/c is a mountpoint
takk@deb9:~/tmp$ 

このとき、mountコマンドで出力されるマウントの一覧で確認すると、マウントした分である1行だけ表示されます。

takk@deb9:~/tmp$ mount | grep `pwd`
/dev/sda1 on /home/takk/tmp/a/b/c type ext4 (rw,relatime,errors=remount-ro,data=ordered)
takk@deb9:~/tmp$ 

次に、./aを./a/b/c/b/cにマウントします。

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

マウント一覧を確認すると、3行抽出されました。

takk@deb9:~/tmp$ mount | grep `pwd`
/dev/sda1 on /home/takk/tmp/a/b/c type ext4 (rw,relatime,errors=remount-ro,data=ordered)
/dev/sda1 on /home/takk/tmp/a/b/c/b/c type ext4 (rw,relatime,errors=remount-ro,data=ordered)
/dev/sda1 on /home/takk/tmp/a/b/c type ext4 (rw,relatime,errors=remount-ro,data=ordered)
takk@deb9:~/tmp$ 

はて。
a = a/b/c
a = a/b/c/b/c
このように2回、mountコマンドを実行しただけですが、aがa/b/cだからでしょうか。調べることが、どんどん増えていきます。

このディレクトリでfindを使うとエラーになりましたね。

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

では、findでエラーになるようなディレクトリを削除しようとすると、どうなるのでしょうか。
rmしてみます。

takk@deb9:~/tmp$ rm -rf a
rm: 警告: ディレクトリ構造が循環しています
これはファイルシステムが破損しているにほとんど等しい状態です。
**管理者に連絡してください**
以下のディレクトリが循環している一部です:
  a/b/c/b

rm: 'a/b' を削除できません: ディレクトリは空ではありません
takk@deb9:~/tmp$ 

破損しているにほとんど等しいらしいです。壊してしまったのでしょうか。
よく設計せずにmount –bindを使うのは、危険ということですね。

では、mountした順序の逆順でumountしていきます。

takk@deb9:~/tmp$ sudo umount a/b/c/b/c
takk@deb9:~/tmp$ sudo umount a/b/c
takk@deb9:~/tmp$ rm -rf a
takk@deb9:~/tmp$ ls
takk@deb9:~/tmp$ 

rmできなかった時は、ひやひやしましたが、mountした順序を覚えておけば、なんてことなさそうです。

Leave a Reply

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

CAPTCHA