usb-mount.sh 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. #!/bin/bash
  2. # copy to /casaOS/util/shell path
  3. # chmod 755
  4. log="logger -t usb-mount.sh -s "
  5. ACTION=$1
  6. DEVBASE=$2
  7. DEVICE="/dev/${DEVBASE}"
  8. # See if this drive is already mounted, and if so where
  9. MOUNT_POINT=$(lsblk -l -p -o name,mountpoint | grep ${DEVICE} | awk '{print $2}')
  10. do_mount() {
  11. if [ -n "${MOUNT_POINT}" ]; then
  12. ${log} "Warning: ${DEVICE} is already mounted at ${MOUNT_POINT}"
  13. exit 1
  14. fi
  15. # Get info for this drive: $ID_FS_LABEL and $ID_FS_TYPE
  16. eval $(blkid -o udev ${DEVICE} | grep -i -e "ID_FS_LABEL" -e "ID_FS_TYPE")
  17. #ID_FS_LABEL=新加卷
  18. #ID_FS_LABEL_ENC=新加卷
  19. #ID_FS_TYPE=ntfs
  20. # Figure out a mount point to use
  21. # LABEL=${ID_FS_LABEL}
  22. LABEL=${DEVBASE}
  23. if grep -q " /DATA/USB_Storage_${LABEL} " /etc/mtab; then
  24. # Already in use, make a unique one
  25. LABEL+="_${DEVBASE}"
  26. fi
  27. DEV_LABEL="${LABEL}"
  28. # Use the device name in case the drive doesn't have label
  29. if [ -z ${DEV_LABEL} ]; then
  30. DEV_LABEL="${DEVBASE}"
  31. fi
  32. MOUNT_POINT="/DATA/USB_Storage_${DEV_LABEL}"
  33. ${log} "Mount point: ${MOUNT_POINT}"
  34. mkdir -p ${MOUNT_POINT}
  35. # MOUNT_POINT="/DATA/USB_Storage1"
  36. # arr=("/DATA/USB_Storage1" "/DATA/USB_Storage2" "/DATA/USB_Storage3" "/DATA/USB_Storage4" "/DATA/USB_Storage5" "/DATA/USB_Storage6" "/DATA/USB_Storage7" "/DATA/USB_Storage8" "/DATA/USB_Storage9" "/DATA/USB_Storage10" "/DATA/USB_Storage11" "/DATA/USB_Storage12")
  37. # for folder in ${arr[@]}; do
  38. # #如果文件夹不存在,创建文件夹
  39. # if [ ! -d "$folder" ]; then
  40. # mkdir -p ${folder}
  41. # MOUNT_POINT=$folder
  42. # break
  43. # fi
  44. # done
  45. # ${log} "Mount point: ${MOUNT_POINT}"
  46. # # Global mount options
  47. # OPTS="rw,relatime"
  48. #
  49. # # File system type specific mount options
  50. # if [[ ${ID_FS_TYPE} == "vfat" ]]; then
  51. # OPTS+=",users,gid=100,umask=000,shortname=mixed,utf8=1,flush"
  52. # fi
  53. # if ! mount -o ${OPTS} ${DEVICE} ${MOUNT_POINT}; then
  54. # ${log} "Error mounting ${DEVICE} (status = $?)"
  55. # rmdir "${MOUNT_POINT}"
  56. # exit 1
  57. # else
  58. # # Track the mounted drives
  59. # echo "${MOUNT_POINT}:${DEVBASE}" | cat >>"/var/log/usb-mount.track"
  60. # fi
  61. #
  62. # ${log} "Mounted ${DEVICE} at ${MOUNT_POINT}"
  63. case ${ID_FS_TYPE} in
  64. vfat)
  65. mount -t vfat -o rw,relatime,users,gid=100,umask=000,shortname=mixed,utf8=1,flush ${DEVICE} ${MOUNT_POINT}
  66. ;;
  67. ext[2-4])
  68. mount -o noatime ${DEVICE} ${MOUNT_POINT} >/dev/null 2>&1
  69. ;;
  70. exfat)
  71. mount -t exfat ${DEVICE} ${MOUNT_POINT} >/dev/null 2>&1
  72. ;;
  73. ntfs)
  74. ntfs-3g ${DEVICE} ${MOUNT_POINT}
  75. ;;
  76. iso9660)
  77. mount -t iso9660 ${DEVICE} ${MOUNT_POINT}
  78. ;;
  79. *)
  80. /bin/rmdir "${MOUNT_POINT}"
  81. exit 0
  82. ;;
  83. esac
  84. }
  85. do_umount() {
  86. if [[ -z ${MOUNT_POINT} ]]; then
  87. ${log} "Warning: ${DEVICE} is not mounted"
  88. else
  89. #/bin/kill -9 $(lsof ${MOUNT_POINT})
  90. umount -l ${DEVICE}
  91. ${log} "Unmounted ${DEVICE} from ${MOUNT_POINT}"
  92. if [ "`ls -A ${MOUNT_POINT}`" = "" ]; then
  93. /bin/rm -fr "${MOUNT_POINT}"
  94. fi
  95. sed -i.bak "\@${MOUNT_POINT}@d" /var/log/usb-mount.track
  96. fi
  97. }
  98. case "${ACTION}" in
  99. add)
  100. do_mount
  101. ;;
  102. remove)
  103. do_umount
  104. ;;
  105. *)
  106. exit 1
  107. ;;
  108. esac