我最近将我的 drbd 设置从 Ubutnu 迁移到 centos 7,但出现一个奇怪的错误:
我可以正常加载和卸载模块,整个过程似乎正常
#>modprobe drbd
#>lsmod | grep drbd
drbd 373504 2
...
我现在可以发出 drbdadm up drbdres 命令,查看资源的状态,似乎一切都在运行。我还可以卸载模块
#>rmmod drbd
#>lsmod | grep drbd
#>drbdadm cstate all
0: Failure: (127) Device minor not allocated
...
#> lsmod | grep drbd
drbd 373504 2
...
所以我可以加载模块,drbdadm 能够加载它但不会调出任何资源,而文档声称 init 脚本会这样做,所以 drbd 显然不会以这种方式初始化模块。
通常,/etc/drbd.conf 中配置的所有资源都会在系统启动时由 /etc/init.d/drbd init 脚本自动启用。
(来源:http://www.drbd.org/users-guide-8.3/s-enable-disable.html)
如果我尝试运行 init.d 脚本,我会收到一个奇怪的错误:
#>/etc/init.d/drbd start script i get:
Starting DRBD resources:
sh: modinfo: command not found
open(".") failed: permission denied
#>
我能够找到发生这种情况的行:
$DRBDADM="drbdadm"
...
out=$(&DRBDADM sh-nop 2>&1); ex=?
[[ $ex = 127 ]] && exit 5 #LSB for "not installed"
log_daemon_msg "Starting DRBD resources"
if [[ $ex != 0 ]] ; then
printf"\n%s\n" "$out" >&2
exit1
fi
我插入了一行来记录 $ex 并且它显示“3”,所以这似乎意味着:
drbdadm sh-nop 返回“open(.) failed: permission denied”,即错误“3”。
我不知道这应该告诉我什么,运行
#>drbdadm sh-nop
没有在终端中返回任何内容,也没有写入我所知道的日志。我也无法在任何文件中找到调用 open(“.”) 的位置。
我远非 Linux 专家,尤其是 centOS/redhat,因为我习惯使用 debian,我只能说 Ubuntu 14.04 在 drbd83 下使用此配置运行良好。我现在已经切换到 centOS 7 上的 drbd84,据我所知,文档没有提到模块部分与我的配置相关的更改。唯一的问题是我无法再将元数据存储在内部,因为整个 drbd 设备将作为磁盘交给虚拟机。
我希望错误出在我“按照 debian 方式做事”上,因为我找不到 drbd 的任何配置问题。
我将附加我的配置:
global {
usage-count no;
}
common {
syncer {
rate 100M;
}
}
resource drbdres {
device minor 0;
net {
protocol C;
}
startup {
wfc-timeout 0;
degr-wfc-timeout 60;
}
disk {
on-io-error detach;
}
#NODES
on node1 {
disk /dev/mapper/vmachines-lvdrbd;
# device drbddisk;
address 192.168.8.133:7788;
meta-disk /dev/mapper/vmachines-lvdrbdMeta; #!internal
}
on node2 {
disk /dev/mapper/vmachines-lvdrbd;
# device drbddisk;
address 192.168.8.132:7788;
meta-disk /dev/mapper/vmachines-lvdrbdMeta; #!internal
}
}
如果我连接我的第二台主机来测试设置,不管这些问题如何,都启动 drbd,并卡在“WFConnection”状态,它们为其他主机配置的 ip 地址是正确的,所以我假设该服务确实不是由 drbdadm 启动的,如果模块未加载,它只会加载该模块。
谢谢您的任何提示或帮助,
问候 BillDoor
(原来的:https://stackoverflow.com/questions/25680702/centos-7-drbd-cannot-start-service)
编辑:
我配置的存储库:
Centos7 base
ELrepo e17
Centos7 extras
centos7 updates
我安装了以下软件包:
drbd84-utils.x86_64
drbd84-utils-sysvinit.x86_64
kmod-drbd.x86_64
我发出yum install drbd84
安装 drbd 的任务
答案1
我知道这是一篇老帖子,但我想为那些想要/需要启用 SELinux 的人提供一个解决方案。通过为 DRBD 创建本地 SELinux 策略来实现这一点。
如果您在“/var/log/audit/audit.log”中查找“drbd_t”,则应该会看到一些错误;将这些错误导入“audit2allow”将允许您生成一个新的 SELinux 策略包,以允许之前被拒绝的操作。然后,您可以使用“semodule -i”安装该策略:
# grep drbd_t /var/log/audit/audit.log | audit2allow -M drbdlocal
******************** IMPORTANT ***********************
To make this policy package active, execute:
semodule -i drbdlocal.pp
# semodule -i drbdlocal.pp
如果遇到另一个 SELinux 错误,您可以重新运行上述两个命令来创建/安装新的策略包,直到没有更多错误。
答案2
我讨厌回答自己的问题,但对于所有未来的 centOS 和 drbd 新手来说,selinux 就是拒绝我访问某些必要目录的人。我还没有发现我到底需要为 drbd 配置哪些目录,但设置selinux 到宽容模式至少让我测试一下 drbd 设置!
这也是为什么 debian 运行时没有任何问题的原因,因为 selinux 是仅存在于 Enterpriselinux 中的安全功能,因此主要存在于 redhat 和 centOS 中。
答案3
您注释掉 DRBD 配置的设备部分有什么原因吗?
那不应该是这样的吗:
设备 /dev/drbd0;或 /dev/drbddisk;