3人参与 • 2026-09-22 • 硬盘
在 ubuntu 系统中,usb 硬盘、移动硬盘盒插拔后,linux 可能重新分配设备名称:
例如第一次:
/dev/sdb1
重新插拔后:
/dev/sdc1
如果使用固定设备路径:
/dev/sdb1
会导致挂载失败。
linux 中推荐使用:
uuid
作为磁盘唯一标识。
本文实现:
usb硬盘插入
|
|
udev监听
|
|
systemd触发服务
|
|
根据uuid识别
|
|
自动挂载
|
|
/data/usb/<uuid>
适用版本:
支持文件系统:
/dev/sdx不要使用:
/dev/sda1 /dev/sdb1
原因:
usb设备顺序不固定。
ubuntu:
apt update apt install -y ntfs-3g
检查:
mount.ntfs-3g --version
统一规划:
mkdir -p /data/usb
最终效果:
/data/usb ├── uuid1 ├── uuid2 └── uuid3
创建文件:
vim /usr/local/bin/usb-auto-mount.sh
内容:
#!/bin/bash
mount_root="/data/usb"
mkdir -p "$mount_root"
for dev in $(lsblk -lnpo name,type | awk '$2=="part"{print $1}')
do
# 已经挂载跳过
if mount | grep -q "^$dev "
then
continue
fi
fstype=$(blkid -s type -o value "$dev" 2>/dev/null)
case "$fstype" in
ntfs|ext4|xfs|exfat)
;;
*)
continue
;;
esac
uuid=$(blkid -s uuid -o value "$dev")
[ -z "$uuid" ] && continue
mount_point="${mount_root}/${uuid}"
mkdir -p "$mount_point"
if ! mountpoint -q "$mount_point"
then
case "$fstype" in
ntfs)
mount -t ntfs-3g "$dev" "$mount_point"
;;
*)
mount "$dev" "$mount_point"
;;
esac
if [ $? -eq 0 ]
then
logger -t usb-auto-mount \
"mount $dev uuid=$uuid -> $mount_point"
else
logger -t usb-auto-mount \
"mount failed $dev"
fi
fi
done
exit 0
增加执行权限:
chmod +x /usr/local/bin/usb-auto-mount.sh
创建:
vim /etc/systemd/system/usb-auto-mount.service
内容:
[unit] description=usb uuid auto mount service after=local-fs.target [service] type=oneshot execstart=/usr/local/bin/usb-auto-mount.sh remainafterexit=yes [install] wantedby=multi-user.target
重新加载:
systemctl daemon-reload
测试启动:
systemctl start usb-auto-mount
查看状态:
systemctl status usb-auto-mount
设置开机启动:
systemctl enable usb-auto-mount
udev 负责监听硬盘插拔事件。
创建规则:
vim /etc/udev/rules.d/99-usb-auto-mount.rules
添加:
action=="add", subsystem=="block", kernel=="sd*", run+="/bin/systemctl restart usb-auto-mount.service" action=="remove", subsystem=="block", kernel=="sd*", run+="/bin/systemctl restart usb-auto-mount.service"
重新加载:
udevadm control --reload-rules
触发:
udevadm trigger
插入移动硬盘。
查看日志:
journalctl -t usb-auto-mount -f
示例:
mount /dev/sdb1 uuid=abcd-1234 -> /data/usb/abcd-1234
查看挂载:
df -h
结果:
/dev/sdb1 mounted on: /data/usb/abcd-1234
ubuntu desktop 默认使用:
udisks2
负责:
如果机器作为 nas 或服务器使用,可以关闭:
systemctl disable --now udisks2
查看:
systemctl status udisks2
恢复:
systemctl enable --now udisks2
建议增加过滤。
查看系统根分区:
findmnt /
获取:
uuid=xxxx
脚本中排除:
if [ "$uuid" = "$root_uuid" ]
then
continue
fi
避免扫描:
例如:
硬盘:
/data/usb/abcd-1234
docker:
services:
backup:
volumes:
- /data/usb/abcd-1234:/backup
设备重新插入:
/dev/sdb1
变成:
/dev/sdc1
docker路径不受影响。
生产环境:
/data
├── docker
│
├── mysql
│
├── redis
│
├── backup
│
└── usb
|
├── uuid1
|
└── uuid2
| 方案 | 稳定性 | 推荐 |
|---|---|---|
| /dev/sdx挂载 | 低 | ❌ |
| while循环扫描 | 中 | ⭐⭐⭐ |
| fstab uuid | 高 | ⭐⭐⭐⭐ |
| udev + systemd + uuid | 最高 | ⭐⭐⭐⭐⭐ |
对于 ubuntu desktop + todesk + docker + 移动硬盘盒:
推荐:
固定数据盘
|
+-- fstab uuid
移动硬盘
|
+-- udev
|
+-- systemd
|
+-- uuid挂载
docker
|
+-- 使用固定/data路径
该方案可以长期稳定运行,避免 usb 硬盘重新识别导致路径变化问题。
到此这篇关于ubuntu使用udev+systemd+uuid实现usb硬盘自动挂载的方案的文章就介绍到这了,更多相关ubuntu实现usb硬盘自动挂载内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
您想发表意见!!点此发布评论
版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。
发表评论