如何让 udev 在插入或重新启动后挂载某些 USB 磁盘?

Pau*_*son 2 fedora udev

我刚刚升级到 Fedora 15。我使用Bacula进行备份已有几年了,它运行良好。但是现在我遇到了一个问题,可能是因为 Bacula 现在以用户 bacula 而不是 root 身份运行。

我的备份媒体是两个 USB 磁盘驱动器(我在场外保留一个,大约一个月更换一次)。但是,Fedora 会自动挂载 USB 驱动器,其挂载点由我的 UID 拥有,模式为 700,大概是因为我已登录,这对于大多数 USB 存储设备来说都是正确的。但是,在这种情况下,并不是因为 Bacula 无法访问它。

如果我正确理解了事件的顺序,udev 会创建 /dev/sdb 和 /dev/sdb1 设备节点,然后这些由 udisk(这是一个 Gnome 组件)自动挂载。udisk 决定了挂载参数是什么。

我想要的是任何标有“BACKUP*”的磁盘都安装在 bacula:bacula 拥有的挂载点上,模式 700。我想我需要在 /etc/udev/rules.d 中有一个自定义的 udev 规则文件。我已经阅读了 udev(7) 页面和“编写 udev 规则”。到目前为止,这是我在一个名为“10-backup-disk.rules”的文件中提出的内容。它正在被 udev 解析好,但不起作用:磁盘仍然归我所有。有人能告诉我我做错了什么吗?

谢谢。

KERNEL!="sd[a-z][0-9]", GOTO="backup-disk_auto_mount_end"
ENV{ID_FS_LABEL}!="BACKUP*", GOTO="backup-disk_auto_mount_end"

# Import FS infos
IMPORT{program}="/sbin/blkid -o udev -p %N"

# Get disk label
ENV{dir_name}="%E{ID_FS_LABEL}"

# Global mount options
ACTION=="add", ENV{mount_options}="relatime,rw"
# Filesystem-specific mount options
ACTION=="add", ENV{mount_options}="$env{mount_options}"

# Mount the device
ACTION=="add", RUN+="/bin/mkdir -p /media/%E{dir_name}", RUN+="/bin/mount -o $env{mount_options} /dev/%k /media/%E{dir_name}"

# Clean up after removal
ACTION=="remove", ENV{dir_name}!="", RUN+="/bin/umount -l /media/%E{dir_name}", RUN+="/bin/rmdir /media/%E{dir_name}"

# Exit
LABEL="backup-disk_auto_mount_end"
Run Code Online (Sandbox Code Playgroud)

Pat*_*hes 6

我对udev一无所知,但是由于您使用的是 Fedora 15,因此您可以更轻松地使用systemd完成相同的事情。

假设您有一个标有 BACKUP_ONE 的 USB 驱动器,请创建以下文件:

/etc/systemd/system/mnt-backup1.mount

[Mount]
What=/dev/disk/by-label/BACKUP_ONE
Where=/mnt/backup1
Options=uid=bacula,gid=bacula,mode=0700
Run Code Online (Sandbox Code Playgroud)

请注意,文件名必须.mount以挂载点(在Where=单元文件的行中)为结尾,并且名称必须与挂载点匹配,斜杠 ( /) 更改为破折号 ( -)。有关更多信息,请参阅man systemd.unit

此外,您可以通过创建/etc/systemd/system/mnt-backup1.automount以下命令来阻止它安装驱动器,直到 Bacula 实际运行备份(或您尝试访问驱动器):

[Automount]
Where=/mnt/backup1
[Install]
WantedBy=remote-fs.target
Run Code Online (Sandbox Code Playgroud)

对其他驱动器重复此操作,然后运行systemctl enable mnt-backup1.automountsystemctl daemon-reload通知systemd更改。(我会确保他们此时已拔掉插头,以免混淆。)

udisks现在将遵循您的systemd配置并使用您定义的选项安装它。