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/&