Ubuntu 自动挂载移动硬盘

根据实际情况,博主验证了,少部分情况下可能失效

虽然自动挂载通常很可靠,但有时也可能因为一些原因失败。这时,你可以检查以下几点:

文件系统驱动是否安装:如果你的移动硬盘是 NTFS 或 exFAT 格式,你需要确保系统安装了相应的驱动包。

对于 NTFS 格式:

bash 复制代码
sudo apt update
sudo apt install ntfs-3g

对于 exFAT 格式:

bash 复制代码
sudo apt update
sudo apt install exfat-fuse exfatprogs

查看设备和分区:使用 lsblkfdisk -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
相关推荐
大柏怎么被偷了4 分钟前
【Linux】版本控制器git
linux·运维·服务器
Guheyunyi20 分钟前
安全风险监测系统核心技术
运维·网络·人工智能·安全
adnyting1 小时前
【Linux日新月异(四)】CentOS 7进程管理深度指南:掌控系统生命线
linux·运维·centos
9ilk3 小时前
【基于one-loop-per-thread的高并发服务器】--- 项目测试
运维·服务器·c++·后端·中间件
property-3 小时前
服务器开荒:安装宝塔面板
运维·服务器
教练、我想打篮球3 小时前
05 2个路由器配置dhcp服务器+dhcp中继器配置两个子网的dhcp服务
运维·服务器
adnyting3 小时前
【Linux日新月异(二)】CentOS 7用户与用户组管理深度指南:保障系统安全的基石
linux·运维·centos
渡我白衣3 小时前
深入理解 OverlayFS:用分层的方式重新组织 Linux 文件系统
android·java·linux·运维·服务器·开发语言·人工智能
waves浪游3 小时前
进程概念(上)
linux·运维·服务器·开发语言·c++
司铭鸿4 小时前
数学图论的艺术:解码最小公倍数图中的连通奥秘
运维·开发语言·算法·游戏·图论