我刚刚升级到 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.automount
并systemctl daemon-reload
通知systemd的变化。(我会确保此时将它们拔掉,以免造成混淆。)
u盘现在将遵从你的systemd配置并使用您定义的选项挂载它。