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
相关推荐
-Try hard-18 小时前
Linuv软件编程 | Shell命令
linux·运维·服务器
释怀不想释怀18 小时前
Linux快捷键,软件安装启动
linux·运维·服务器
zhengfei61118 小时前
自动化快速评估工具
运维·自动化
Hello World . .18 小时前
Linux:软件编程
linux·运维·服务器·vim
老师用之于民19 小时前
【DAY21】Linux软件编程基础&Shell 命令、脚本及系统管理实操
linux·运维·chrome·经验分享·笔记·ubuntu
路由侠内网穿透.19 小时前
本地部署代码托管解决方案 Gitea 并实现外部访问( Windows 版本)
运维·服务器·网络协议·gitea
江畔何人初20 小时前
pod的内部结构
linux·运维·云原生·容器·kubernetes
齐鲁大虾20 小时前
Linux下用什么编程语言方便开发B/S架构程序
linux·运维·架构
三块钱079420 小时前
群晖docker部署Mattermost,对接openclaw
运维·docker·容器
博客-小覃20 小时前
内网穿透/端口映射之二层穿透访问”FTP共享文件“示例操作教程
运维·服务器·网络