我正在设置一个由 Raspberry 和 Ubuntu 服务器组成的小型家庭服务器。
具体来说,我安装了
Ubuntu 23.10(GNU/Linux 6.5.0-1007-raspi aarch64)
我目前正在手动安装每一个进入的驱动器,你可以想象,这并不是一件舒服的事情。
我读到可以从/etc/fstab文件,但如果我还连接了一个与系统无关的非常常见的 USB 记忆棒,则有人必须使用管理凭据登录才能安装新设备。
如何自动挂载连接到服务器的任何磁盘?
就我个人而言,安装像 gnome-volume-manager 之类的东西就足够了,但是安装并不成功。
$ root@ubuntu:/home/server# sudo apt install gnome-volume-manager
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
E: Unable to locate package gnome-volume-manager
答案1
udev 是 Linux 内核的设备管理器,主要用于动态设备处理。您可以编写 udev 规则,以在 USB 驱动器连接或断开连接时自动挂载和卸载它们。
创建挂载脚本:首先,创建一个脚本,将您的 USB 驱动器挂载到指定的挂载点。如果挂载点不存在,该脚本还可以创建挂载点。
编写一个 udev 规则,以便在每次连接 USB 设备时触发此脚本。该规则将放置在 /etc/udev/rules.d/ 中的文件中。
创建卸载脚本(可选):同样,您可以创建一个脚本来在驱动器断开连接时卸载该脚本。
以下是挂载脚本的示例:
#!/bin/bash
# File: /usr/local/bin/mount_usb.sh
# The device to be mounted is provided as an argument ($1)
DEVICE=$1
# Define the base mount point
MOUNT_POINT_BASE="/media/usb"
# Create a directory based on the device name
MOUNT_POINT="${MOUNT_POINT_BASE}/${DEVICE}"
mkdir -p ${MOUNT_POINT}
# Mount the device
mount /dev/${DEVICE} ${MOUNT_POINT}
然后编写 udev 规则
在/etc/udev/rules.d/中创建一个新文件,例如100-automount-usb.rules。
添加规则:这是触发脚本的基本规则:
ACTION=="add", KERNEL=="sd?[1-9]", SUBSYSTEM=="block", RUN+="/usr/local/bin/mount_usb.sh %k"
此规则执行以下操作:
- ACTION=="add":添加设备时运行规则。
- KERNEL=="sd?[1-9]":适用于存储设备(如 sda1、sdb2 等)。
- SUBSYSTEM=="block": 将规则限制于块设备。
- RUN+="/usr/local/bin/mount_usb.sh %k":以设备名称作为参数执行脚本。
重新加载 udev 规则:
sudo udevadm control --reload-rules
sudo udevadm trigger