Advertisement
zefie

NFS Automount Script

Apr 2nd, 2012
375
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 3.32 KB | None | 0 0
  1. #!/bin/bash
  2. srcmnt="192.168.2.10:/mnt/storage/"
  3. dstmnt="/home/zefie/terra/"
  4.  
  5. mounts=( anime homevid isos kenzi-backup share tvshows )
  6.  
  7.  
  8. HOST=$(echo -n $srcmnt | cut -d':' -f1)
  9. srcdown=1;
  10. srcsrvup=0;
  11.  
  12. nmap=$(which nmap);
  13. ping=$(which ping);
  14. user=$(whoami)
  15.  
  16. check_host() {
  17.     echo -n " * Waiting for $HOST "
  18.    
  19.     while [ $srcdown -ne "0" ]; do
  20.         $ping -q -c 1 -w 1 $HOST &> /dev/null; srcdown=$?;
  21.         if [ $srcdown -eq "0" ]; then
  22.             break;
  23.         fi
  24.         echo -n '.'; sleep 3;
  25.     done
  26.    
  27.     while [ $srcsrvup -ne "1" ]; do
  28.         srcsrvup=$($nmap -sT -p 2049 -P0 -T5 -n $HOST | grep open | wc -l)
  29.         if [ $srcsrvup -eq "1" ]; then
  30.             break;
  31.         fi
  32.         echo -n '.'; sleep 3;
  33.     done
  34.    
  35.     echo " Up."
  36. }
  37.  
  38. mount_nfs() {
  39.  
  40.     if [ $(echo -n $nmap | wc -m) -le 1 ]; then
  41.         echo "Error: nmap required";
  42.         exit;
  43.     fi
  44.  
  45.     if [ $(echo -n $ping | wc -m) -le 1 ]; then
  46.         echo "Error: ping required";
  47.         exit;
  48.     fi
  49.  
  50.  
  51.     for i in "${mounts[@]}"; do
  52.         echo " * Preparing to mount ${srcmnt}${i} ..."
  53.         if [ $(echo $srcsrvup) -ne "1" ]; then
  54.             check_host
  55.         fi
  56.  
  57.         if [ ! -d ${dstmnt}${i} ]; then
  58.             mkdir -p ${dstmnt}${i}
  59.         fi
  60.  
  61.         if [ "$(grep ${srcmnt}${i} /etc/mtab | wc -l)" -ne "1" ]; then
  62.             skipmount=0
  63.             echo -n " * Mounting ${srcmnt}${i} on ${dstmnt}${i} "
  64.             while [ "$skipmount" -eq "0" ]; do
  65.                 if [ ! "$(grep ${srcmnt}${i} /etc/mtab)" ]; then
  66.                     if [ "$user" = "root" ]; then
  67.                         echo -n "as root..."
  68.                         mount -t nfs ${srcmnt}${i} ${dstmnt}${i} &> /dev/null
  69.                     else
  70.                         if [ "$(grep ${srcmnt}${i} /etc/fstab | grep user | wc -l)" -eq "1" ]; then
  71.                             echo -n "as non-root user ${user}..."
  72.                             mount ${srcmnt}${i}
  73.                         else
  74.                             echo ""
  75.                             echo " * Could not mount ${srcmnt}${i} .. You are not root, and mount is not user mountable in /etc/fstab"
  76.                             skipmount=1
  77.                         fi
  78.                     fi
  79.                     if [ "$skipmount" -ne "1" ]; then
  80.                         if [ "$(grep ${srcmnt}${i} /etc/mtab | wc -l)" -ne "1" ]; then
  81.                             echo -n "."
  82.                             sleep 10
  83.                         else
  84.                             echo " Done."
  85.                             skipmount=1
  86.                         fi
  87.                     fi
  88.                 fi
  89.             done
  90.         else
  91.             echo " * Already mounted: ${srcmnt}${i} "
  92.         fi
  93.     done
  94. }
  95.  
  96.  
  97. umount_nfs () {
  98.     for i in "${mounts[@]}"; do
  99.         echo " * Preparing to unmount ${srcmnt}${i} ..."
  100.         skipmount=0
  101.         if [ "$(grep ${srcmnt}${i} /etc/mtab | wc -l)" -eq "1" ]; then
  102.             dstmnt=$(grep ${srcmnt}${i} /etc/mtab | cut -d' ' -f 2);
  103.             echo -n " * Unmounting ${srcmnt}${i} from $dstmnt "
  104.             while [ "$skipmount" -eq "0" ]; do
  105.                 if [ "$(grep ${srcmnt}${i} /etc/mtab | wc -l)" -eq "1" ]; then
  106.                     if [ "$user" = "root" ]; then
  107.                         echo -n "as root..."
  108.                         umount $dstmnt &> /dev/null
  109.                     else
  110.                         if [ "$(grep ${srcmnt}${i} /etc/fstab | grep user | wc -l)" -eq "1" ]; then
  111.                             echo -n "as non-root user ${user}..."
  112.                             umount ${srcmnt}${i}
  113.                         else
  114.                             echo ""
  115.                             echo " * Could not unmount ${srcmnt}${i} .. You are not root, and mount is not user mountable";
  116.                             skipmount=1
  117.                         fi
  118.                     fi
  119.                     if [ "$(grep ${srcmnt}${i} /etc/mtab | wc -l)" -eq "1" ]; then
  120.                         echo -n "."
  121.                         sleep 10
  122.                     else
  123.                         echo " Done."
  124.                         skipmount=1
  125.                     fi
  126.                 fi
  127.             done
  128.         else
  129.             echo " * Not mounted: ${srcmnt}${i} "
  130.         fi
  131.     done
  132. }
  133.  
  134.  
  135. case "$1" in
  136.  
  137. "mount")
  138.     mount_nfs
  139.     ;;
  140.  
  141. "umount")
  142.     umount_nfs
  143.     ;;
  144.  
  145. "unmount")
  146.     umount_nfs
  147.     ;;
  148.  
  149. *)
  150.     echo "Usage: $0 [mount|umount]"
  151.     ;;
  152. esac
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement