对于该项目采样盒,到目前为止,我使用的是/dev/sda1 /media auto nofail 0 0
在插入无头计算机时自动安装 USB 闪存驱动器,另请参阅使用 /etc/fstab 自动挂载和自动重新挂载。但这似乎不太可靠,例如,当移除 USB 闪存驱动器然后重新插入时。
什么是轻量级且易于配置的解决方案在 Debian 中可以自动安装每个/dev/sd*
设备/media/
?
如果插入第二个闪存驱动器,请忽略或安装到另一个文件夹
/media2/
如果驱动器被移除(即使没有正确的驱动器
umount
),然后在几分钟后重新插入,则应再次安装它
该用例是一个无头设备,最终用户可以在其上插入 USB 闪存驱动器,并且它应该始终被识别(无论他们是否在未经软件许可的情况下删除了以前的 USB 闪存驱动器)。
答案1
根据@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
创建一个包含以下内容的文件:
/etc/systemd/system/[email protected]
[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
创建一个包含以下内容的文件
/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"
重新启动规则:
udevadm control --reload-rules systemctl daemon-reload
插入 USB 闪存驱动器。它应该安装到
/media/
.