shell 挂载目录

简介: shell 挂载目录

shell 挂载目录

# Notes:
#  - Please install "jq" package before using this driver.
usage() {
  err "Invalid usage. Usage: "
  err "\t$0 init"
  err "\t$0 mount <mount dir> <json params>"
  err "\t$0 unmount <mount dir>"
  exit 1
}
err() {
  echo -ne $* 1>&2
}
log() {
  echo -ne $* >&1
}
ismounted() {
  MOUNT=`findmnt -n ${MNTPATH} 2>/dev/null | cut -d' ' -f1`
  if [ "${MOUNT}" == "${MNTPATH}" ]; then
    echo "1"
  else
    echo "0"
  fi
}
domount() {
  MNTPATH=$1
  local NFS_SERVER=$(echo $2 | jq -r '.server')
  local SHARE=$(echo $2 | jq -r '.share')
  local PROTOCOL=$(echo $2 | jq -r '.protocol')
  local ATIME=$(echo $2 | jq -r '.atime')
  local READONLY=$(echo $2 | jq -r '.readonly')
  if [ -n "${PROTOCOL}" ]; then
    PROTOCOL="tcp"
  fi
  if [ -n "${ATIME}" ]; then
    ATIME="0"
  fi
  if [ -n "${READONLY}" ]; then
    READONLY="0"
  fi
  if [ "${PROTOCOL}" != "tcp" ] && [ "${PROTOCOL}" != "udp" ] ; then
    err "{ \"status\": \"Failure\", \"message\": \"Invalid protocol ${PROTOCOL}\"}"
    exit 1
  fi
  if [ $(ismounted) -eq 1 ] ; then
    log '{"status": "Success"}'
    exit 0
  fi
  mkdir -p ${MNTPATH} &> /dev/null
  local NFSOPTS="${PROTOCOL},_netdev,soft,timeo=10,intr"
  if [ "${ATIME}" == "0" ]; then
    NFSOPTS="${NFSOPTS},noatime"
  fi
  if [ "${READONLY}" != "0" ]; then
    NFSOPTS="${NFSOPTS},ro"
  fi
  mount -t nfs -o${NFSOPTS} ${NFS_SERVER}:/${SHARE} ${MNTPATH} &> /dev/null
  if [ $? -ne 0 ]; then
    err "{ \"status\": \"Failure\", \"message\": \"Failed to mount ${NFS_SERVER}:${SHARE} at ${MNTPATH}\"}"
    exit 1
  fi
  log '{"status": "Success"}'
  exit 0
}
unmount() {
  MNTPATH=$1
  if [ $(ismounted) -eq 0 ] ; then
    log '{"status": "Success"}'
    exit 0
  fi
  umount ${MNTPATH} &> /dev/null
  if [ $? -ne 0 ]; then
    err "{ \"status\": \"Failed\", \"message\": \"Failed to unmount volume at ${MNTPATH}\"}"
    exit 1
  fi
  log '{"status": "Success"}'
  exit 0
}
op=$1
if ! command -v jq >/dev/null 2>&1; then
  err "{ \"status\": \"Failure\", \"message\": \"'jq' binary not found. Please install jq package before using this driver\"}"
  exit 1
fi
if [ "$op" = "init" ]; then
  log '{"status": "Success", "capabilities": {"attach": false}}'
  exit 0
fi
if [ $# -lt 2 ]; then
  usage
fi
shift
case "$op" in
  mount)
    domount $*
    ;;
  unmount)
    unmount $*
    ;;
  *)
    log '{"status": "Not supported"}'
    exit 0
esac
exit 1
相关文章
|
6月前
|
Shell Linux C语言
【Shell 命令集合 磁盘管理 】Linux 只删除空目录 mrd命令使用教程
【Shell 命令集合 磁盘管理 】Linux 只删除空目录 mrd命令使用教程
65 0
|
6月前
|
Shell Linux API
【Shell 命令集合 磁盘维护 】Linux 查找指定目录下的所有符号链接文件 symlinks 命令使用教程
【Shell 命令集合 磁盘维护 】Linux 查找指定目录下的所有符号链接文件 symlinks 命令使用教程
88 1
|
6月前
|
存储 Shell Linux
【Shell 命令集合 磁盘管理 】⭐⭐ Linux 显示当前shell会话中的目录栈 dirs命令使用教程
【Shell 命令集合 磁盘管理 】⭐⭐ Linux 显示当前shell会话中的目录栈 dirs命令使用教程
58 0
|
6月前
|
存储 Shell Linux
【Shell 命令集合 磁盘管理 】Linux 从远程磁带设备中删除文件或目录rmt命令使用教程
【Shell 命令集合 磁盘管理 】Linux 从远程磁带设备中删除文件或目录rmt命令使用教程
75 0
|
6月前
|
存储 安全 Shell
⭐⭐⭐【Shell 命令集合 磁盘管理 】Linux 显示当前工作目录的路径 pwd命令使用教程
⭐⭐⭐【Shell 命令集合 磁盘管理 】Linux 显示当前工作目录的路径 pwd命令使用教程
195 0
|
6月前
|
Shell Linux C语言
【Shell 命令集合 磁盘管理 】Linux 删除指定目录下的文件和子目录 mmd命令使用指南
【Shell 命令集合 磁盘管理 】Linux 删除指定目录下的文件和子目录 mmd命令使用指南
88 0
|
6月前
|
Shell Linux Serverless
【Shell 命令集合 磁盘管理 】Linux 显示目录中每个子目录的磁盘使用情况 mdu命令使用教程
【Shell 命令集合 磁盘管理 】Linux 显示目录中每个子目录的磁盘使用情况 mdu命令使用教程
50 0
|
6月前
|
Shell Linux C语言
【Shell 命令集合 磁盘管理 】Linux 创建一个新的目录并将其设为当前工作目录 mcd命令使用教程
【Shell 命令集合 磁盘管理 】Linux 创建一个新的目录并将其设为当前工作目录 mcd命令使用教程
82 0
|
6月前
|
存储 Linux Shell
【Shell 命令集合 磁盘管理 】Linux 建一个目录的镜像副本 lndir命令使用教程
【Shell 命令集合 磁盘管理 】Linux 建一个目录的镜像副本 lndir命令使用教程
67 0
|
6月前
|
Shell Linux API
【Shell 命令集合 磁盘管理 】Linux 列出目录中的文件和子目录 ls命令使用教程
【Shell 命令集合 磁盘管理 】Linux 列出目录中的文件和子目录 ls命令使用教程
110 1