Bas*_*asj 2 usb udev mount fstab usb-drive
对于SamplerBox项目,到目前为止,我使用的/dev/sda1 /media auto nofail 0 0
是在插入无头计算机时自动安装 USB 闪存驱动器,另请参阅使用 /etc/fstab 自动安装和自动重新安装。但这似乎不太可靠,例如,当 USB 闪存驱动器被移除然后重新插入时。
Debian 中有/dev/sd*
/media/
哪些轻量级且易于配置的解决方案可以自动安装每个设备?
如果插入第二个闪存驱动器,请忽略或安装到另一个文件夹/media2/
如果驱动器被移除(即使没有正确的驱动器umount
),然后在几分钟后重新插入,则应再次安装它
该用例是一个无头设备,最终用户可以在其上插入 USB 闪存驱动器,并且它应该始终被识别(无论他们是否在未经软件许可的情况下删除了以前的 USB 闪存驱动器)。
根据 @FelixJN 的评论,我根据我的需要稍微修改了Andrea Fortuna 的这篇优秀指南,以下是解决方案:
创建一个/root/usb-mount.sh
包含此内容的文件(并添加 +x 权限):
#!/bin/bash
ACTION=$1
DEVBASE=$2
DEVICE="/dev/${DEVBASE}"
MOUNT_POINT=$(/bin/mount | /bin/grep ${DEVICE} | /usr/bin/awk '{ print $3 }') # See if this drive is already mounted
case "${ACTION}" in
add)
if [[ -n ${MOUNT_POINT} ]]; then exit 1; fi # Already mounted, exit
eval $(/sbin/blkid -o udev ${DEVICE}) # Get info for this drive: $ID_FS_LABEL, $ID_FS_UUID, and $ID_FS_TYPE
OPTS="rw,relatime" # Global mount options
if [[ ${ID_FS_TYPE} == "vfat" ]]; then OPTS+=",users,gid=100,umask=000,shortname=mixed,utf8=1,flush"; fi # File system type specific mount options
if ! /bin/mount -o ${OPTS} ${DEVICE} /media/; then exit 1; fi # Error during mount process: cleanup mountpoint
;;
remove)
if [[ -n ${MOUNT_POINT} ]]; then /bin/umount -l ${DEVICE}; fi
;;
esac
Run Code Online (Sandbox Code Playgroud)
创建一个/etc/systemd/system/usb-mount@.service
包含以下内容的文件:
[Unit]
Description=Mount USB Drive on %i
[Service]
Type=oneshot
RemainAfterExit=true
ExecStart=/root/usb-mount.sh add %i
ExecStop=/root/usb-mount.sh remove %i
Run Code Online (Sandbox Code Playgroud)
创建一个/etc/udev/rules.d/99-local.rules
包含以下内容的文件:
KERNEL=="sd[a-z][0-9]", SUBSYSTEMS=="usb", ACTION=="add", RUN+="/bin/systemctl start usb-mount@%k.service"
KERNEL=="sd[a-z][0-9]", SUBSYSTEMS=="usb", ACTION=="remove", RUN+="/bin/systemctl stop usb-mount@%k.service"
Run Code Online (Sandbox Code Playgroud)
重新启动规则:
udevadm control --reload-rules
systemctl daemon-reload
Run Code Online (Sandbox Code Playgroud)
插入 USB 闪存驱动器。它应该安装到/media/
.
归档时间: |
|
查看次数: |
4289 次 |
最近记录: |