(親記事はコチラ 中級者のためのLinuxコマンド入門)
前回の続きではありますが、まだmountの再帰は試みません。前回と同じく、手動で一つずつmount –bindします。
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$ sudo mount --bind a a/b/c/b/c
引数なしのmountで、mountポイントが一覧表示されますので、カレントパス等でgrepすると、さきほどmount –bindしたパスが表示されます。
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$
パスだけを抽出。
takk@deb9:~/tmp$ mount | grep `pwd` | cut -d' ' -f3 /home/takk/tmp/a/b/c /home/takk/tmp/a/b/c/b/c /home/takk/tmp/a/b/c takk@deb9:~/tmp$
さらにbash関数化して、いつでも簡単に使えるようにしておきます。
takk@deb9:~/tmp$ bindlist(){ > mount | grep `pwd` | cut -d' ' -f3 > } takk@deb9:~/tmp$
さっそく使ってみます。
takk@deb9:~/tmp$ bindlist /home/takk/tmp/a/b/c /home/takk/tmp/a/b/c/b/c /home/takk/tmp/a/b/c takk@deb9:~/tmp$
表示されるパスは、同じですね。
さて、複雑な–bindのマウントを一気に解除するコマンドを作ります。
仕組みとしては、umountに全リストを与えるだけ。
takk@deb9:~/tmp$ bindlist | xargs sudo umount umount: /home/takk/tmp/a/b/c: target is busy (In some cases useful info about processes that use the device is found by lsof(8) or fuser(1).) takk@deb9:~/tmp$
メッセージは出ましたが、どこかのパスは、umountできるはずです。
残っているマウントのパスのリストを確認します。
takk@deb9:~/tmp$ bindlist takk@deb9:~/tmp$
全部消えてました。ってことは、全部アンマウントできたのですね。
さて、全部アンマウントもbash関数化します。
takk@deb9:~/tmp$ ubind(){ > bindlist | xargs sudo umount > } takk@deb9:~/tmp$
今までに使ったディレクトリは一旦削除しておきます。
takk@deb9:~/tmp$ rm -rf a takk@deb9:~/tmp$ ls takk@deb9:~/tmp$
では、もっと複雑な入れ子のマウントをして、ubindを試してみることにします。
takk@deb9:~/tmp$ mkdir -p a/b/c/d/e/f takk@deb9:~/tmp$ sudo mount --bind a a/b/c/d/e/f takk@deb9:~/tmp$ sudo mount --bind a/b/c a/b/c/d/e/f/b/c/d/e/f takk@deb9:~/tmp$ sudo mount --bind a/b a/b/c takk@deb9:~/tmp$
マウントリストを確認してみます。
takk@deb9:~/tmp$ bindlist /home/takk/tmp/a/b/c/d/e/f /home/takk/tmp/a/b/c/d/e/f/b/c/d/e/f /home/takk/tmp/a/b/c/d/e/f /home/takk/tmp/a/b/c /home/takk/tmp/a/b/c/d/e/f/b/c /home/takk/tmp/a/b/c/d/e/f /home/takk/tmp/a/b/c/d/e/f/b/c/d/e/f takk@deb9:~/tmp$
マウントリストだけみると、かなり複雑になりました。
findは当然、エラーになります。
takk@deb9:~/tmp$ find . ./a ./a/b find: ファイルシステムのループが検出されました。 ‘./a/b/c’ は ‘./a/b’ のファイルシステムのループの一部になっています。 takk@deb9:~/tmp$
では、ubind。
takk@deb9:~/tmp$ ubind umount: /home/takk/tmp/a/b/c/d/e/f: mountpoint not found umount: /home/takk/tmp/a/b/c/d/e/f/b/c/d/e/f: mountpoint not found umount: /home/takk/tmp/a/b/c/d/e/f: mountpoint not found umount: /home/takk/tmp/a/b/c/d/e/f/b/c: not mounted umount: /home/takk/tmp/a/b/c/d/e/f: target is busy (In some cases useful info about processes that use the device is found by lsof(8) or fuser(1).)
どれぐらいアンマウントできたでしょうか。残りのマウントリストを確認。
takk@deb9:~/tmp$ bindlist /home/takk/tmp/a/b/c/d/e/f
1個ですね。
残りの1個もubindしましょう。
takk@deb9:~/tmp$ ubind takk@deb9:~/tmp$ bindlist takk@deb9:~/tmp$
コメント