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

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

我刚刚升级到 Fedora 15。我使用过巴库拉我已经使用它备份了好几年,它运行良好。但现在我遇到了一个问题,可能是因为 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"

答案1

我不知道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

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

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

[Automount]
Where=/mnt/backup1
[Install]
WantedBy=remote-fs.target

对另一个驱动器重复此操作,然后运行systemctl enable mnt-backup1.automountsystemctl daemon-reload通知systemd的变化。(我会确保此时将它们拔掉,以免造成混淆。)

u盘现在将遵从你的systemd配置并使用您定义的选项挂载它。

相关内容