为了在 PLC 应用程序中实现简单的备份系统,我们访问连接到外部 Ubuntu 系统的 USB 棒。因此,第一个连接的 USB 驱动器应在连接后立即通过 Samba 共享。
第一个连接的 USB 始终获得路径 /dev/sdb。此动态安装的可移动设备现在应始终与“USB_DRIVE”等固定名称共享。
我的问题是,驱动器安装时的设备描述为“KENSINGTON”。如果共享文件夹 /media/KENSINGTON,并且删除了该设备并附加了另一个名为“SCANDISK”的驱动器,则不会共享该驱动器。
我的问题是:
- 是否有可能将可移动设备与其路径共享?这样路径 /dev/sdb 一经连接就会被共享?
- 我尝试将文件夹 /mnt/USB_DRIVE 绑定到特定的已安装设备(如 /media/KENSIGNTON)。但媒体文件夹中的文件夹名称不固定。动态创建的文件夹 /media/KENSINGTON 的名称是否可以更改为路径名称(如 /media/sdb')
- 还有其他方法可以共享第一个连接的 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 循环调用,还是可以在特定周期内以某种方式调用?