语境:
主动/被动 DRBD 设置。LVM 卷上的 KVM VM。LVM 用于/dev/drbd0
物理卷和卷组。
在设置测试期间我进行了以下操作:
- 关闭辅助节点。
- 重新启动主节点。
但是,主磁盘重新启动后自动启动的虚拟机以某种方式访问了底层磁盘(/dev/sda4
)/dev/drbd0
:
WARNING: Device mismatch detected for vgr0/r0_wphp which is accessing /dev/sda4 instead of /dev/drbd0.
/dev/sda4
是一种用于以下目的的设备/dev/drbd0
:
resource r0 {
protocol C;
startup {
wfc-timeout 15;
degr-wfc-timeout 60;
}
disk {
on-io-error detach;
c-fill-target 10M;
c-max-rate 700M;
c-plan-ahead 7;
c-min-rate 4M;
}
net {
# max-epoch-size 20000;
max-buffers 36k;
sndbuf-size 1024k;
rcvbuf-size 2048k;
after-sb-0pri discard-zero-changes;
after-sb-1pri discard-secondary;
after-sb-2pri disconnect;
rr-conflict disconnect;
}
syncer {
rate 400M;
al-extents 6433;
}
on NormallySecondary {
device /dev/drbd0;
disk /dev/sdc;
address 10.0.0.1:7788;
meta-disk internal;
}
on NormallyPrimary {
device /dev/drbd0;
disk /dev/sda4;
address 10.0.0.2:7788;
meta-disk internal;
}
}
VM意外启动后r0_wphp
,出现以下情况:
% lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 3.7T 0 disk
├─sda1 8:1 0 46.6G 0 part /
├─sda2 8:2 0 46.6G 0 part [SWAP]
├─sda3 8:3 0 1.7T 0 part
...
└─sda4 8:4 0 1.8T 0 part
└─vgr0-r0_wphp 254:0 0 40G 0 lvm
vgr0-r0_wphp
(VM 使用的 LVM 卷r0_wphp
)应使用作为物理卷vgr0
的卷组,/dev/drbd0
不是/dev/sda4
直接。
我思考r0
这就是 DRBD 现在拒绝在我的NormallyPrimary
节点上启动的原因:
% drbdadm create-md r0
open(/dev/sda4) failed: Device or resource busy
Exclusive open failed. Do it anyways?
[need to type 'yes' to confirm]
确实lsof /dev/sda4
没有显示任何东西。
drbd
服务是不是在启动节点上自动启动NormallyPrimary
。
奇怪的是,在考试之前我有配置 LVM 忽略/dev/sda4
:
% egrep '^\s*filter =' /etc/lvm/lvm.conf
filter = [ "r|/dev/sda4|" ]
定义此 LVM 过滤器后,drbdadm
创建的r0
资源没有任何问题,DRBD 设置正在运行。
问题:
如何停止使用有问题的虚拟机
/dev/sda4
?我需要重新连接我的 DRBD 资源(r0
)。我怎么能够防止
/dev/drbd*
任何 LVM 支持的虚拟机即使是无意启动的也会尝试访问底层设备吗?
操作系统和 DRBD:
% lsb_release -a
No LSB modules are available.
Distributor ID: Debian
Description: Debian GNU/Linux 9.6 (stretch)
Release: 9.6
Codename: stretch
% dpkg -l | grep drbd
ii drbd-utils 8.9.10-2 amd64 RAID 1 over TCP/IP for Linux (user utilities)