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
相关推荐
Mr. Sun_4 小时前
Dell Networking SmartFabric OS10 如何设置虚拟链路中继 (VLT)
运维·网络·dell vlt
北城笑笑5 小时前
Server 15 ,VMware ESXi 实战指南:Ubuntu 20.04.6 版本虚拟机静态 IP 配置、分辨率固定及远程访问实践
linux·运维·ubuntu·1024程序员节
汪汪大队u5 小时前
IPv4与IPv6的对比
运维·网络·智能路由器
苹果醋36 小时前
学习札记-Java8系列-1-Java8新特性简介&为什么要学习Java8
java·运维·spring boot·mysql·nginx
or77iu_N6 小时前
Linux 查找文件
linux·运维·服务器
笑洋仟6 小时前
nvm切换node版本-jenkins上编译
运维·jenkins
zz-zjx6 小时前
MySQL 索引深度指南:原理 · 实践 · 运维(适配 MySQL 8.4 LTS)
运维·数据库·mysql
JavaOpsPro6 小时前
审计 jenkins获取构建历史,生成excel
运维·jenkins·excel
小小的木头人6 小时前
Nagios Core + 插件 + Web 界面
运维