You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过UDEV规则检测已解密并挂载的LUKS分区?

如何通过UDEV规则检测已解密并挂载的LUKS分区?

嗨,我懂你的需求——当那台LUKS加密的外接硬盘被Ubuntu 22.04自动解密挂载后,自动触发备份脚本对吧?你之前的UDEV规则没生效,问题出在触发时机上:ACTION=="add"事件触发时,解密后的分区刚被系统创建,但还没完成挂载操作,这时候脚本跑起来根本找不到挂载点,自然达不到预期效果。

下面给你几个可行的解决方案,从简单到可靠排序:

方案1:调整UDEV规则,监听挂载完成状态

UDEV可以通过ENV{MOUNTPOINT}属性判断分区是否已经挂载,再结合change事件(挂载操作会触发设备的change事件)来精准触发脚本。把你的规则改成这样:

ACTION=="change", SUBSYSTEM=="block", ENV{ID_FS_UUID}=="uuid-of-the-decrypted-partition", ENV{MOUNTPOINT}!="", RUN+="/path/to/backup/script"
  • ENV{MOUNTPOINT}!="":确保只有当分区已经被挂载(有合法挂载点)时才执行脚本
  • ACTION=="change":挂载完成后会触发设备的change事件,时机刚好合适

注意:如果你的备份脚本运行时间较长,不建议用UDEV的RUN指令——UDEV处理长时间进程的能力有限,可能会导致阻塞,这种情况推荐用方案2。

方案2:用UDEV触发systemd服务(更可靠)

把备份脚本做成systemd服务,让UDEV去触发这个服务,是更稳定的做法,尤其适合耗时较长的备份任务:

  1. 创建systemd服务文件:/etc/systemd/system/luks-backup.service,内容如下:
[Unit]
Description=执行LUKS分区挂载后的备份脚本
After=local-fs.target

[Service]
Type=oneshot
ExecStart=/path/to/backup/script
# 如果脚本需要等待挂载完全稳定,可以加个短延迟
# ExecStartPre=/bin/sleep 2

[Install]
WantedBy=multi-user.target
  1. 修改UDEV规则,让它触发这个服务:
ACTION=="change", SUBSYSTEM=="block", ENV{ID_FS_UUID}=="uuid-of-the-decrypted-partition", ENV{MOUNTPOINT}!="", RUN+="/bin/systemctl start luks-backup.service"
  1. 最后重新加载配置,让修改生效:
sudo udevadm control --reload-rules
sudo systemctl daemon-reload

方案3:用inotify监听挂载点(备选方案)

如果上面的方法都不符合你的需求,还可以写一个后台脚本,用inotifywait监听挂载点的变化,适合需要自定义触发逻辑的场景:

#!/bin/bash
# 替换成你的LUKS分区挂载点
MOUNT_POINT="/media/your-username/your-luks-partition"
BACKUP_SCRIPT="/path/to/backup/script"

# 监听挂载点的创建/打开事件
inotifywait -m -e create,open "$MOUNT_POINT" | while read -r dir events file; do
    # 触发备份脚本
    "$BACKUP_SCRIPT"
    # 避免重复触发,执行一次后退出循环
    break
done

把这个脚本做成systemd服务设为开机自启,就能在分区挂载完成后自动触发备份。

最后提醒一下:你可以用udevadm info -a /dev/mapper/your-luks-device命令,查看解密后设备的所有UDEV属性,确保你填的ID_FS_UUID是正确的,避免因为UUID填错导致规则不触发。

备注:内容来源于stack exchange,提问作者Majal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.22 11:18:05