自动挂载U盘(无头电脑)

自动挂载U盘(无头电脑)

对于该项目采样盒,到目前为止,我使用的是/dev/sda1 /media auto nofail 0 0在插入无头计算机时自动安装 USB 闪存驱动器,另请参阅使用 /etc/fstab 自动挂载和自动重新挂载。但这似乎不太可靠,例如,当移除 USB 闪存驱动器然后重新插入时。

什么是轻量级且易于配置的解决方案在 Debian 中可以自动安装每个/dev/sd*设备/media/

  • 如果插入第二个闪存驱动器,请忽略或安装到另一个文件夹/media2/

  • 如果驱动器被移除(即使没有正确的驱动器umount),然后在几分钟后重新插入,则应再次安装它

该用例是一个无头设备,最终用户可以在其上插入 USB 闪存驱动器,并且它应该始终被识别(无论他们是否在未经软件许可的情况下删除了以前的 USB 闪存驱动器)。

答案1

根据@FelixJN的评论,我稍作修改安德里亚·福尔图纳 (Andrea Fortuna) 撰写的这本出色的指南根据我的需要,这是解决方案:

  1. 创建一个包含此内容的文件/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
    
  2. 创建一个包含以下内容的文件:/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
    
  3. 创建一个包含以下内容的文件/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"
    
  4. 重新启动规则:

     udevadm control --reload-rules
     systemctl daemon-reload
    
  5. 插入 USB 闪存驱动器。它应该安装到/media/.

相关内容