umount -lオプション (lazy)

mount/umountのman見てたら、以前からこんなん出来たらな〜っていうオプションがあった。ちゃんと読んどけよって話ですね。使い方に注意しないといけないだろうけど。なんでこのオプションを探してたかっていうのは後日追記。

man umount

-l  lazy アンマウント。現在のファイルシステムの階層構造から
    指定されたファイルシステムを切り離し、ファイルシステムへの
    全ての参照が busy でなくなった時点ですぐに整理する。 
    (カーネル 2.4.11  以降である必要がある。)

lazyについてぐぐってみると、やっていることはMNT_DETACHオプションでumountしているとのこと。

MNT_DETACH

umount"した風"に見せて、新規のアクセスを不可能にする。この時点でdf、mount、/etc/mtabからも表示されなくなっている。だけど、該当のファイルシステムにアクセスしていた既存のプロセスはそのまま操作可能。その後、アクセスがなくなった(busyでなくなった)時点で、実際にumountする。

straceしてみると、確かにMNT_DETACHオプションでumountしてた。

# strace umount -l  /mnt/hoge 2>&1 | grep umount
execve("/bin/umount", ["umount", "-l", "/mnt/hoge"], [/* 22 vars */]) = 0
stat("/sbin/umount.ext3", 0x7fff1aac7f30) = -1 ENOENT (No such file or directory)
umount("/mng/hoge", MNT_DETACH) = 0