Mount CIFS share with autofs
Solution 1:
There should be an /etc/auto.smb already, use that, and add the following line to /etc/auto.master:
/cifs /etc/auto.smb --timeout=60
Now all cifs shares will show up under /cifs:
ls /cifs/<server>
will show all the shares available. You might want to put some options in /etc/auto.smb to mount with specific modes. I have a auto.smb that I found out there somewhere and modified to do exactly that:
#!/bin/bash
# $Id: auto.smb,v 1.3 2005/04/05 13:02:09 raven Exp $
# This file must be executable to work! chmod 755!
key="$1"
credfile="/etc/auto.smb.$key"
opts="-fstype=cifs,file_mode=0644,dir_mode=0755,uid=eng,gid=eng"
smbclientopts=""
for P in /bin /sbin /usr/bin /usr/sbin
do
if [ -x $P/smbclient ]
then
SMBCLIENT=$P/smbclient
break
fi
done
[ -x $SMBCLIENT ] || exit 1
if [ -e "$credfile" ]
then
opts=$opts",credentials=$credfile"
smbclientopts="-A "$credfile
else
smbclientopts="-N"
fi
$SMBCLIENT $smbclientopts -gNL $key 2>/dev/null| awk -v key="$key" -v opts="$opts" -F'|' -- '
BEGIN { ORS=""; first=1 }
/Disk/ {
if (first)
print opts; first=0
dir = $2
loc = $2
# Enclose mount dir and location in quotes
# Double quote "$" in location as it is special
gsub(/\$$/, "\\$", loc);
print " \\\n\t \"/" dir "\"", "\"://" key "/" loc "\""
}
END { if (!first) print "\n"; else exit 1 }
'
This will do what you want. I've used it myself.
Solution 2:
Since I just spent my entire morning debugging this same issue. Let me explain what happened above.
/etc/auto.master
## Mount this test share:
/test /etc/auto.test --timeout=60
This means I want to mount something at /test
and for the details read /etc/auto.test
/etc/auto.test
test -fstype=cifs,username=testuser,domain=domain.com,password=password ://server/test
This means as a sub-folder of what was specified in auto.master please mount test with the information following. (i.e. the mount will be /test/test
as slm correctly pointed out).
This means that ls /test/test
will display the contents of //server/test
To accomplish the original goal of /test -> //server/test you would want the following:
/etc/auto.master
## Mount this test share:
/ /etc/auto.test --timeout=60
A couple other notes. I found the following mount options useful.
rw
- mount it read/write
noserverino
- removes error message about inode number support
credentials=[credential file]
- this allows you to create a separate file with the credentials in them. It has the following format:
username=[windows username, domain can be included as well]
password=[windows password]
EDIT -- 2013-06-17 13:28PM GMT-8
slm in the comments has pointed out that mounting to the root of the file system could be dangerous. lsd in the comments suggests a workaround, which is to creating a symlink from the root of the filesystem to a different place where you would mount that would not overlap with something common. For example, if you wanted to have /test be a mount, then you would actually mount stuff to /net/the_test_mount and then create a symlink /test that points to /net/the_test_mount
Solution 3:
I just did this on a CentOS 5.6 box and I think part of your problem might be with your auto.test file. In it's current form you'll be creating a /test mount point and then a single moung of test under it, i.e. /test/test. Also you might want to add the --ghost switch to your auto.master line like so:
/test /etc/auto.test --timeout=60 --ghost
The --ghost switch creates stubs of mount points even when a given share isn't being actively mounted.
Take a look at this CentOS wiki Tips and Tricks page on ways to mount SMB/CIFS shares.
Mounting tips
- Windows Share = \mysmb\share1
- Unix Dir. = /test/dir1
idea #1
# /etc/auto.master
/test /etc/auto.test --timeout=600 --ghost
# /etc/auto.test
dir1 -fstype=cifs,rw,noperm,netbiosname=${HOST},credentials=/etc/creds.txt ://mysmb/test/dir1
dir2 -fstype=cifs,rw,noperm,netbiosname=${HOST},credentials=/etc/creds.txt ://mysmb/test/dir2
idea #2
# /etc/auto.master
/test /etc/auto.test --timeout=600 --ghost
# /etc/auto.test
* -fstype=cifs,rw,noperm,netbiosname=${HOST},credentials=/etc/creds.txt ://mysmb/test/&