惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

酷 壳 – CoolShell
酷 壳 – CoolShell
T
Threatpost
Latest news
Latest news
N
News | PayPal Newsroom
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Help Net Security
Help Net Security
D
Darknet – Hacking Tools, Hacker News & Cyber Security
AI
AI
Simon Willison's Weblog
Simon Willison's Weblog
TaoSecurity Blog
TaoSecurity Blog
The Last Watchdog
The Last Watchdog
L
LINUX DO - 热门话题
Google DeepMind News
Google DeepMind News
T
Threat Research - Cisco Blogs
O
OpenAI News
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
T
The Exploit Database - CXSecurity.com
NISL@THU
NISL@THU
Application and Cybersecurity Blog
Application and Cybersecurity Blog
S
Securelist
小众软件
小众软件
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
Martin Fowler
Martin Fowler
S
SegmentFault 最新的问题
Cisco Talos Blog
Cisco Talos Blog
云风的 BLOG
云风的 BLOG
AWS News Blog
AWS News Blog
GbyAI
GbyAI
N
News and Events Feed by Topic
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
美团技术团队
Engineering at Meta
Engineering at Meta
A
About on SuperTechFans
博客园 - 三生石上(FineUI控件)
S
Schneier on Security
博客园 - 聂微东
V2EX - 技术
V2EX - 技术
T
Troy Hunt's Blog
SecWiki News
SecWiki News
S
Secure Thoughts
B
Blog RSS Feed
Hugging Face - Blog
Hugging Face - Blog
WordPress大学
WordPress大学
腾讯CDC
H
Heimdal Security Blog
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
Apple Machine Learning Research
Apple Machine Learning Research
月光博客
月光博客
www.infosecurity-magazine.com
www.infosecurity-magazine.com
P
Privacy International News Feed

九仞之行

如何让neovim 集成 jupyter - 九仞之行 放弃吧?不!Hue 在 Linux ARM64 上的绝境求生指南 - 九仞之行 HomeAssistant 折腾日记——nginx 反向代理配置 - 九仞之行 《震耳欲聋》观后感(带剧透) - 九仞之行 让SDKMAN的JDK在macOS上「合法上岗」的全套骚操作 - 九仞之行 告别误触复制!tmux 鼠标滚动的正确开启姿势 - 九仞之行 inode 到底是什么,Windows 中是否有类似实现? - 九仞之行 在Arch Liunx里只用Intel Ultra 7 155H跑stable-diffusion-webui - 九仞之行 浙江财经大学校庆50周年之“三行代码作情诗” - 九仞之行
使用udisk来让Linux自动挂载USB硬盘和U盘 - 九仞之行
Styunlen · 2025-11-21 · via 九仞之行

本文发布于592天前,最后更新于 592 天前,其中的信息可能已经有所发展或是发生改变。

前言

虽然可以使用fstab 来在开机启动时自动挂载和计算机连接的硬盘设备,但是在系统运行阶段,对于新接入的设备,往往没有他的设备信息,此时如何让linux windows 一样自动挂载接入设备的分区呢。

这里我使用的工具是systemdudisks,以下是我的linux发行版简要信息:

OS: Arch Linux x86_64 
Kernel: 6.11.5-zen1-1-zen 
Shell: zsh 5.9 
DE: Plasma 6.2.2 
Memory: 8807MiB / 31570MiB 

除开各个发行版安装软件包的差异,以下内容为通用解决方案

正文

udisk是作为一个服务进程运行的,并提供了 udisksctl(1) 命令行工具来与其交互,从而实现对系统存储设备的管理。

安装udisk2

首先安装udisk2

pacman -S udisk2

添加polkit权限

安装完毕后,在使用这个工具之前,我们要先为他添加polkit权限,使得用户执行此命令时可以免密执行。

sudo touch /etc/polkit-1/rules.d/50-udiskie.rules
sudo chmod 644 /etc/polkit-1/rules.d/50-udiskie.rules
sudo gpasswd -a <username> storage # <username>替换成自己的用户名   

并为/etc/polkit-1/rules.d/50-udiskie.rules添加以下内容

polkit.addRule(function(action, subject) {
  var YES = polkit.Result.YES;
  var permission = {
    // required for udisks1:
    "org.freedesktop.udisks.filesystem-mount": YES,
    "org.freedesktop.udisks.luks-unlock": YES,
    "org.freedesktop.udisks.drive-eject": YES,
    "org.freedesktop.udisks.drive-detach": YES,
    // required for udisks2:
    "org.freedesktop.udisks2.filesystem-mount": YES,
    "org.freedesktop.udisks2.encrypted-unlock": YES,
    "org.freedesktop.udisks2.eject-media": YES,
    "org.freedesktop.udisks2.power-off-drive": YES,
    // required for udisks2 if using udiskie from another seat (e.g. systemd):
    "org.freedesktop.udisks2.filesystem-mount-other-seat": YES,
    "org.freedesktop.udisks2.filesystem-unmount-others": YES,
    "org.freedesktop.udisks2.encrypted-unlock-other-seat": YES,
    "org.freedesktop.udisks2.encrypted-unlock-system": YES,
    "org.freedesktop.udisks2.eject-media-other-seat": YES,
    "org.freedesktop.udisks2.power-off-drive-other-seat": YES
  };
  if (subject.isInGroup("storage")) {
    return permission[action.id];
  }
});

此时只要是在storage用户组内的用户在执行udisksctl时,都将可以使用--no-user-interaction参数来跳过输入密码的过程。

添加监听服务进程

udevadm monitor

You may use udevadm monitor to monitor block events and mount drives when a new block device is created. Stale mount points are automatically removed by udisksd, such that no special action is required on deletion.

—— udisks - ArchWiki

udevadm monitor指令实现了对block events的监听,我们可以利用这个指令来获取新接入设备的blkid等信息,然后调用udisksctl挂载分区,从而实现新接入设备的自动挂载。好在archlinux wiki已经提供了一个示范脚本来实现此功能

#!/bin/sh

pathtoname() {
    udevadm info -p /sys/"$1" | awk -v FS== '/DEVNAME/ {print $2}'
}

stdbuf -oL -- udevadm monitor --udev -s block | while read -r -- _ _ event devpath _; do
        if [ "$event" = add ]; then
            devname=$(pathtoname "$devpath")
            udisksctl mount --block-device "$devname" --no-user-interaction
        fi
done

将他保存到~/.local/bin/start-udevadm-monitor中(其他路径也可以,别忘了赋予可执行权限),我的家目录为/home/styunlen,请根据自己的用户名做更改

然后再创建一个systemd服务来在开机启动时自动运行这个脚本,这样我们就能持续监听硬盘接入事件,并自动挂载他啦~

首先使用下列命令创建service文件,并将他的文件权限改为644

sudo touch /etc/systemd/system/udevadm-monitor.service
sudo chmod 644 /etc/systemd/system/udevadm-monitor.service

然后输入以下内容

[Unit]
Description=udevadm-monitor

[Service]
WorkingDirectory=/home/styunlen/.local/bin
ExecStart=/home/styunlen/.local/bin/start-udevadm-monitor
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
Environment="PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
Restart=always
RestartSec=3

[Install]
WantedBy=multi-user.target

最后输入以下命令启用他,就可以实现自动监听硬盘接入事件,并且自动挂载啦~

sudo systemctl enable --now udevadm-monitor.service

引用