背景
普段、マウント状況を確認するのに素の mount
コマンドを一発かまして確認していたのですが、どうもこの結果と実際が一致しないとういう状況に遭遇しました。
シェルスクリプトの中でも使っているため、その信頼性が揺らぐことがあるならば少々問題では、ということでちょっと調べてみました。
※ CentOS6 系の環境で確認
※ 先に答えを言うと→ cat /proc/mounts
マウント、アンマウント実行時
実は、マウント(mount …)を実行した際に、 /etc/mtab
というファイルに「~をマウントしてます」という情報を追記しています。
また、逆にアンマウント(umount …)した際には、 /etc/mtab
から該当のマウント情報を削除しています。
で、 素の mount
コマンドを実行した際には、この /etc/mtab
の内容を少々加工して表示するようになっています。
$ cat /etc/mtab
/dev/sda3 / ext4 rw 0 0
proc /proc proc rw 0 0
sysfs /sys sysfs rw 0 0
devpts /dev/pts devpts rw,gid=5,mode=620 0 0
tmpfs /dev/shm tmpfs rw 0 0
/dev/sda1 /boot ext4 rw 0 0
$ mount
/dev/sda3 on / type ext4 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
tmpfs on /dev/shm type tmpfs (rw)
/dev/sda1 on /boot type ext4 (rw)
マウントしていたものにアクセスできなくなったとき
例えば、NFS でマウントしていたものの、接続先のサーバが落ちてマウントされていない状態になった場合、umount …
を実行していないので /etc/mtab
に残ったままになってしまいます。
では、 umount …
を実行することで削除されるかというと、実際にはマウント状態になっていないので umount: …: 見つかりません
と拒否られてしまいます。
※ NFS のマウントオプションにより挙動が変わる可能性があるかもしれません
再度 mount コマンドを発行するも…
再度 NFS でマウントした場合には、すでに /etc/mtab
に記載されており、対象へアクセスが可能になるだけで /etc/mtab
は更新されないだろう、と思いきや、新たにマウント情報が追記されてしまいます。
この状態で umount …
を発行した際にすべてきれいになるかというと、これまた期待を裏切られて新たに追記されたものだけが削除されてしまい、いつまでも整合性がとれない事態に陥ってしまいます(´・ω・`)。
さらば、/etc/mtab よ!
/proc/mounts
【参考】https://access.redhat.com/documentation/ja-jp/red_hat_enterprise_linux/6/html/deployment_guide/s2-proc-mounts)
$ cat /proc/mounts
rootfs / rootfs rw 0 0
proc /proc proc rw,relatime 0 0
sysfs /sys sysfs rw,relatime 0 0
devtmpfs /dev devtmpfs rw,relatime,size=759524k,nr_inodes=189881,mode=755 0 0
devpts /dev/pts devpts rw,relatime,gid=5,mode=620,ptmxmode=000 0 0
tmpfs /dev/shm tmpfs rw,relatime 0 0
/dev/sda3 / ext4 rw,relatime,barrier=1,data=ordered 0 0
/proc/bus/usb /proc/bus/usb usbfs rw,relatime 0 0
/dev/sda1 /boot ext4 rw,relatime,barrier=1,data=ordered 0 0
/etc/mtab
を加工してどうにかできないのものかと調べていたところ、この /proc/mounts
がリアルタイムに現在のマウント情報を反映していることがわかったため、素の mount
コマンドをたたくことでマウント一覧を確認する方法を手放すことにしました。
/etc/mtab
を加工するまでもなかったですね。
また、不整合が発生する可能性があるなら、最初から /etc/mtab
を更新しないよう mount
コマンドの -n
オプションを指定してマウントした方がいいのかもしれませんね。
$ man mount
…
-n, --no-mtab
Mount without writing in /etc/mtab. This is necessary for example when /etc is on a read-only filesystem.
…