10
9

More than 5 years have passed since last update.

mount コマンドを使わないでマウント一覧を確認する方法

Posted at

背景

普段、マウント状況を確認するのに素の 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.
…
10
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
9