いくつでも mount できる CIFS の怪

遅ればせながら、smbmount から mount.cifs に移行していることを知りました。それはいいのですが、以下のようなことが出来てしまいます。


# mount -t cifs //172.18.10.11/win2008 /mnt/win2008 -o username=Administrator%
# mount -t cifs //172.18.10.11/win2008 /mnt/win2008 -o username=Administrator%

こんなのを何回も繰り返していると、以下のような状態。


# mount
/dev/mapper/VolGroup00-LogVol00 on / type ext3 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
/dev/sda1 on /boot type ext3 (rw)
tmpfs on /dev/shm type tmpfs (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)
none on /var/lib/xenstored type tmpfs (rw)
/dev/sr0 on /media/110421_1945 type iso9660 (ro,nosuid,nodev,uid=0)
/dev/sr0 on /mnt/cdrom type iso9660 (ro)
//172.18.10.11/win2008 on /mnt/win2008 type cifs (rw,mand)
//172.18.10.11/win2008 on /mnt/win2008 type cifs (rw,mand)
//172.18.10.11/win2008 on /mnt/win2008 type cifs (rw,mand)
//172.18.10.11/win2008 on /mnt/win2008 type cifs (rw,mand)
//172.18.10.11/win2008 on /mnt/win2008 type cifs (rw,mand)
//172.18.10.11/win2008 on /mnt/win2008 type cifs (rw,mand)

# cat /etc/mtab
/dev/mapper/VolGroup00-LogVol00 / ext3 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
/dev/sda1 /boot ext3 rw 0 0
tmpfs /dev/shm tmpfs rw 0 0
none /proc/sys/fs/binfmt_misc binfmt_misc rw 0 0
sunrpc /var/lib/nfs/rpc_pipefs rpc_pipefs rw 0 0
none /var/lib/xenstored tmpfs rw 0 0
/dev/sr0 /media/110421_1945 iso9660 ro,nosuid,nodev,uid=0 0 0
/dev/sr0 /mnt/cdrom iso9660 ro 0 0
//172.18.10.11/win2008 /mnt/win2008 cifs rw,mand 0 0
//172.18.10.11/win2008 /mnt/win2008 cifs rw,mand 0 0
//172.18.10.11/win2008 /mnt/win2008 cifs rw,mand 0 0
//172.18.10.11/win2008 /mnt/win2008 cifs rw,mand 0 0
//172.18.10.11/win2008 /mnt/win2008 cifs rw,mand 0 0
//172.18.10.11/win2008 /mnt/win2008 cifs rw,mand 0 0

ここで、以下のように CD-ROM デバイスを重複してマウントすると、当然ながら、上のような状況にはありません。すでにマウントされてるからダメだよってことになります。


# mount /dev/sr0 /mnt/cdrom
mount: ブロックデバイス /dev/sr0 は書き込み禁止です、読込み専用でマウントします
mount: /dev/sr0 は マウント済か /mnt/cdrom が使用中です
mount: mtab によると、/dev/sr0 は /mnt/cdrom にマウント済です
# cat /etc/mtab
/dev/mapper/VolGroup00-LogVol00 / ext3 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
/dev/sda1 /boot ext3 rw 0 0
tmpfs /dev/shm tmpfs rw 0 0
none /proc/sys/fs/binfmt_misc binfmt_misc rw 0 0
sunrpc /var/lib/nfs/rpc_pipefs rpc_pipefs rw 0 0
none /var/lib/xenstored tmpfs rw 0 0
/dev/sr0 /media/110421_1945 iso9660 ro,nosuid,nodev,uid=0 0 0
/dev/sr0 /mnt/cdrom iso9660 ro 0 0
//172.18.10.11/win2008 /mnt/win2008 cifs rw,mand 0 0
//172.18.10.11/win2008 /mnt/win2008 cifs rw,mand 0 0
//172.18.10.11/win2008 /mnt/win2008 cifs rw,mand 0 0
//172.18.10.11/win2008 /mnt/win2008 cifs rw,mand 0 0
//172.18.10.11/win2008 /mnt/win2008 cifs rw,mand 0 0
//172.18.10.11/win2008 /mnt/win2008 cifs rw,mand 0 0

この場合、/mnt/win2008 の umount は、というと、mount コマンドでの表示、または /etc/mtab に載っている行の回数だけ、umount /mnt/win2008 を繰り返すことになります。1回の umount /mnt/win2008 で /etc/mtab で言うと、下から該当行が1つ1つ順番に消えて行きます。

実際、この現象を発見した時、私は mount/umount を Perlスクリプトからやっていたのですが、mount して umount する前にスクリプトが外部から停止されたりしても mount されっぱなしになっているような状態となり (/etc/mtab で見る限りは)、次に同じ Perl スクリプトを動かしてもエラーにはならず、でも、ふと mount コマンドをマニュアルで実行したらずらずらと同じ mount が表示され、これ何?ということとなり、状況を把握した次第。

環境は CentOS 5.4 で最新の rpm アップデートはすべて反映済み。ソースを調べる時間も無いし、linux-cifs メーリングリストを調べる時間も無いので、しばらくはこういうものだということで使う予定。スクリプトの外から強制的に実行を停止された場合はエラー処理も出来ないので、そのスクリプトの最初でダメもとで umount するとか (マウントされていないというエラーは無視)すればいいのですが、コードが汚いなぁ。