根据实际情况,博主验证了,少部分情况下可能失效
虽然自动挂载通常很可靠,但有时也可能因为一些原因失败。这时,你可以检查以下几点:
文件系统驱动是否安装:如果你的移动硬盘是 NTFS 或 exFAT 格式,你需要确保系统安装了相应的驱动包。
对于 NTFS 格式:
bash
sudo apt update
sudo apt install ntfs-3g
对于 exFAT 格式:
bash
sudo apt update
sudo apt install exfat-fuse exfatprogs
查看设备和分区:使用 lsblk 或 fdisk -l 命令来确认系统是否识别了你的移动硬盘
bash
lsblk
你会看到类似 /dev/sdb 或 /dev/sdc 这样的设备,以及它的分区,例如 /dev/sdb1
手动挂载:如果自动挂载失败,你可以尝试手动挂载,这也能帮助你诊断问题。
创建一个挂载点:
bash
sudo mkdir /mnt/mydisk
手动挂载分区:
bash
sudo mount /dev/sdb1 /mnt/mydisk
请将 /dev/sdb1 替换为你实际的设备分区。
可能是 USB 驱动有问题,导致无法正常识别设备。可以尝试重新加载 USB 存储驱动模块:
bash
# 卸载
sudo modprobe -r usb_storage
# 重新加载
sudo modprobe usb_storage
sudo blkid
自动挂在
::: details auto-mount-usb.sh
bat
#!/bin/bash
log() {
echo "[$(date '+%F %T')] $*"
}
udisksctl monitor | while read -r line; do
case "$line" in
*"Added /org/freedesktop/UDisks2/block_devices/"*)
device_name=$(echo "$line" | awk -F'/' '{print $NF}')
device="/dev/$device_name"
if [[ $device_name =~ ^sd[a-z][0-9]+$ ]]; then
log "Detected new partition: $device"
# 等待设备就绪(最多 5 秒)
for i in {1..5}; do
if lsblk -no MOUNTPOINT "$device" &>/dev/null; then
break
fi
sleep 1
done
# 检查是否已经挂载
if mount | grep -q "^$device "; then
log "$device is already mounted, skipping."
else
log "Attempting to mount $device"
if udisksctl mount -b "$device" --no-user-interaction; then
log "$device mounted successfully."
else
log "Failed to mount $device."
fi
fi
else
log "Device $device_name is not a partition, skipping."
fi
;;
*"Removed /org/freedesktop/UDisks2/block_devices/"*)
device_name=$(echo "$line" | awk -F'/' '{print $NF}')
device="/dev/$device_name"
if [[ $device_name =~ ^sd[a-z][0-9]+$ ]]; then
log "Device $device removed, attempting to unmount"
if mount | grep -q "^$device "; then
if udisksctl unmount -b "$device" --no-user-interaction; then
log "$device unmounted successfully."
else
log "Failed to unmount $device."
fi
else
log "$device was not mounted."
fi
fi
;;
esac
done
:::
保存后执行:
bash
sudo chmod +x /usr/local/bin/auto-mount-usb.sh
创建 systemd 服务
bash
sudo nano /etc/systemd/system/auto-mount-usb.service
内容:
bash
[Unit]
Description=Auto mount/unmount USB drives via udisksctl
After=network.target local-fs.target
[Service]
ExecStart=/usr/local/bin/auto-mount-usb.sh
Restart=always
RestartSec=2
User=root
[Install]
WantedBy=multi-user.target
重新加载 systemd 并启用
bash
sudo systemctl daemon-reload
sudo systemctl enable --now auto-mount-usb.service
查看运行情况
bash
systemctl status auto-mount-usb.service
# 实时日志:
journalctl -fu auto-mount-usb.service