共享第一个连接的 USB 驱动器

共享第一个连接的 USB 驱动器

为了在 PLC 应用程序中实现简单的备份系统,我们访问连接到外部 Ubuntu 系统的 USB 棒。因此,第一个连接的 USB 驱动器应在连接后立即通过 Samba 共享。

第一个连接的 USB 始终获得路径 /dev/sdb。此动态安装的可移动设备现在应始终与“USB_DRIVE”等固定名称共享。

我的问题是,驱动器安装时的设备描述为“KENSINGTON”。如果共享文件夹 /media/KENSINGTON,并且删除了该设备并附加了另一个名为“SCANDISK”的驱动器,则不会共享该驱动器。

我的问题是:

  1. 是否有可能将可移动设备与其路径共享?这样路径 /dev/sdb 一经连接就会被共享?
  2. 我尝试将文件夹 /mnt/USB_DRIVE 绑定到特定的已安装设备(如 /media/KENSIGNTON)。但媒体文件夹中的文件夹名称不固定。动态创建的文件夹 /media/KENSINGTON 的名称是否可以更改为路径名称(如 /media/sdb')
  3. 还有其他方法可以共享第一个连接的 USB 驱动器吗?

我知道安全问题。samba 共享文件夹受用户名和密码保护。

用户应该可以自由地连接他想要创建备份的存储棒。因此,我不能使用设备名称,但需要确定第一个连接的存储棒,其路径为 /dev/sdb/

/etc/fstab 肯定不起作用,因为设备是动态插入的。

最好的解决方案是,如果 ubuntu 不将设备安装到文件夹 /media/(示例 /media/Kensington)而是安装到路径 /media/(示例 /media/sdb),是否可以以某种方式进行配置?

usbmount 工具似乎是这个方向的解决方案。但是,一旦安装,它就会生成文件夹,并且即使连接了 usb 设备,它们也都是空的。哪里做错了?是否可以将 usbmount 配置为仅在连接特定设备时创建文件夹 usb[0-7],而不是永久创建?

答案1

我找到了一个解决方案。我用上面提到的脚本检查文件设备。如果存在,我将创建一个文件夹并挂载它。如果它已经挂载,则不会执行任何操作。一旦没有设备连接,并且不再找到 /dev/sdb,它将被卸载并删除。

#!/bin/bash

#general definitions
MNT_PATH="/media/USB_DRIVE"
DEV_ID="sdd1"
FILE_SYSTEM="vfat"

# check if user is root
if [ "$(whoami)" != "root" ]
then
 echo "run with sudo or as root"
 exit
fi

#get list with all attached devices
for i in $(lsblk -lo name,fstype,hotplug,type|grep '1 part$'|tr -s ' ' ' '|sed 's/ 1 part$//'|grep ' ..*$'|tr ' ' '_')
do
 devId=${i%_*}
 devPath=/dev/$devId
 fileSystem=${i#*_}

# check if device path matches
if [ "$devId" == $DEV_ID ]
 then
    # check if file system matches
  if [ "$fileSystem" == $FILE_SYSTEM ] 
  then
   # device found - mount
   # check if device not mounted already
        if ! [[ $(findmnt -M "$MNT_PATH") ]]
         then
     # create folder and mount
         mkdir -p /media/USB_DRIVE
         mount -o rw,user,exec,umask=0000 "$devPath" /media/USB_DRIVE
         printf "mounted\n"
       exit
      else
        # already mounted
        printf "already mounted\n"
        exit
   fi
  fi
 fi
 
done

# check if mounted device exists
if [[ $(findmnt -M "$MNT_PATH") ]]
then
  # unmount device
    sudo umount /media/USB_DRIVE
    sudo rm -r /media/USB_DRIVE/
    printf "unmounted\n"
else
 # device already unmounted
 printf "already unmounted\n"
fi

到目前为止,该脚本可以正常工作。不清楚的是,必须如何调用这样的脚本。它会通过无限 while 循环调用,还是可以在特定周期内以某种方式调用?

相关内容