Mount CIFS share with autofs

57,813

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/&
Share:
57,813

Related videos on Youtube

reowil
Author by

reowil

I love technology, and finding ways to help others utilize technology to it's fullest potential!

Updated on September 17, 2022

Comments

  • reowil
    reowil over 1 year

    I have a system running RHEL 5.5, and I am trying to mount a Windows share on a server using autofs. (Due to the network not being ready upon startup, I do not want to utilize fstab.) I am able to mount the shares manually, but autofs is just not mounting them.

    Here are the files I am working with:

    At the end of /etc/auto.master, I have:

    ## Mount this test share:
    /test    /etc/auto.test    --timeout=60
    

    In /etc/auto.test, I have:

    test    -fstype=cifs,username=testuser,domain=domain.com,password=password ://server/test
    

    I then restart the autofs service.

    However, this does not work. ls-ing the directory does not return any results. I have followed all these guides on the web, and I either don't understand them, or they.just.don't.work.

    Thank You

    • c1tadel1
      c1tadel1 over 13 years
      Are you getting anything in the logs?
    • reowil
      reowil over 13 years
      Where are the logs? I have tried /var/log/messages to no avail, and there is no syslog file.
    • c1tadel1
      c1tadel1 over 13 years
      You are looking in the right place. Try "echo 1 >/proc/fs/cifs/cifsFYI" to increase the debug messages a bit and give dmesg a try.
    • reowil
      reowil over 13 years
      I don't have the /proc/fs/cifs/ directory, so I cannot run the command. I also can't mkdir cifs, even as root. The service is running, but I seriously don't know why it's just not working. I may have to contact RH support.
  • reowil
    reowil about 13 years
    Thank you. I have completely forgotten about this issue. I actually contacted Red hat support, and the options you mention in the opts you mention do work. The key was to place the info in auto.misc for whatever reason. It's funny, since we don't even need to do this anymore.
  • reowil
    reowil about 13 years
    Thank you for your reply. Please see my comment for lsd.
  • Carlos Rendon
    Carlos Rendon about 11 years
    This is useful, but unfortunately I don't get to customize the mount points, which was the original goal of the question (and what I came here to find out)
  • Carlos Rendon
    Carlos Rendon about 11 years
    Is there a better way to provide a root mount using autofs? If so please update your answer or leave a comment and I can update mine.
  • lsd
    lsd almost 11 years
    Have the mounts go to /net, say, and have symbolic links from /test to /net/server/test (or whatever). Now whenever you cd to /net and ls or whatever, it will mount.
  • lsd
    lsd about 9 years
    As an interesting development, using this with an EMC device (not sure module) required me to remove the -N from the smbclient line. Encountered this problem today.
  • lsd
    lsd about 9 years
    Also, the credentials file must not have spaces between the equals signs. That caused a bunch of errors until I found that out. Two different pieces of documentation said different things.
  • Leo
    Leo about 6 years
    Corrected a few format and spelling errors. You should probably point out how and where to put that parameter using the configuration from the question as an example too.
  • Ray Foss
    Ray Foss over 4 years
    My god... --ghost should be default. I'm on fedora/rhel/centos it reads the map, but when I go inside the folder, nothing is there... I then had the crazy idea of doing cd "sharename" and it magically entered the folder which ls says does not exist... arrgh