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
相关推荐
以太浮标36 分钟前
华为eNSP模拟器综合实验之- ACL控制列表核心命令全解析及场景应用
运维·网络·网络协议·华为·信息与通信
巨斧空间掌门1 小时前
JDK17 下载 windows Linux
linux·运维·服务器
小挪号底迪滴1 小时前
Docker容器化实战:从“在我机器上能跑“到环境一致性
运维·docker·容器
江畔何人初1 小时前
kube-apiserver、kube-proxy、Calico 关系
运维·服务器·网络·云原生·kubernetes
_下雨天.2 小时前
Nginx性能调优与深度监控
运维·nginx
皮卡蛋炒饭.2 小时前
进程得控制
linux·运维·服务器
带娃的IT创业者4 小时前
WeClaw 日志分析实战:如何从海量日志中快速定位根因?
运维·python·websocket·jenkins·fastapi·架构设计·实时通信
杨云龙UP5 小时前
Oracle ASM磁盘组空间分配与冗余理解
linux·运维·数据库·sql·oracle
互成5 小时前
加密系统哪款最好用?2026年五款加密系统深度对比测评
运维·网络·安全
minji...5 小时前
Linux 库制作与原理(三)深入动静态链接原理
linux·运维·服务器·c++