/dev/sdb
我尝试在没有分区表、也没有 LVM 堆栈 PV/VG/LV 的原始磁盘设备上设置 DRBD
由于此磁盘是虚拟的,并且我使用的虚拟机管理程序允许即时磁盘扩展,因此在扩展 DRBD 文件系统时,我不想再进行 LVM 操作或重新分区
我的资源定义再简单不过了
resource data {
device /dev/drbd1;
meta-disk internal;
disk /dev/sdb;
on node1 {
address 10.10.10.16:7789;
}
on node2 {
address 10.10.10.17:7789;
}
}
创建元数据作品
# drbdadm create-md data
initializing activity log
NOT initializing bitmap
Writing meta data...
New drbd meta data block successfully created.
但附加操作失败
# drbdadm attach data
1: Failure: (127) Device minor not allocated
additional info from kernel:
unknown minor
Command 'drbdsetup-84 attach 1 /dev/sdb /dev/sdb internal' terminated with exit code 10
错误消息听起来确实像命令期望分区表索引作为设备次代码。
我应该如何将原始设备附加到 DRBD 资源?
答案1
drbdadm attach data
并不是您在创建元数据后想要使用的唯一命令。
以下步骤之一应该可以启动您的设备:
drbdadm create-md data
drbdadm up data
- 或者 -
drbdadm create-md data
drbdsetup-84 new-resource data
drbdsetup-84 new-minor data 1 0
drbdmeta 1 v08 /dev/sdb internal apply-al
drbdsetup-84 attach 1 /dev/sdb /dev/sdb internal
drbdsetup-84 connect data ipv4:10.10.10.16:7789 ipv4:10.10.10.17:7789 --protocol=C
完成后,您将拥有一个连接状态为“已连接”且磁盘状态为“不一致/不一致”的设备;只有在两个节点上创建全新的元数据后,才会出现这种情况。
从那里,只需选择一个节点提升为主节点,这将导致 DRBD 从主 => 次要:
# drbdadm primary data --force
--force
从现在开始,在正常情况下您永远不需要使用它来推广您的 DRBD 设备。
不过你也说过:
由于此磁盘是虚拟的,并且我使用的虚拟机管理程序允许即时磁盘扩展,因此在扩展 DRBD 文件系统时,我不想再进行 LVM 操作或重新分区
这可能不适用于 DRBD。DRBD 将其元数据放在块设备的末尾,并在该元数据中跟踪块的数量(和其他内容)。动态扩展支持块设备可能会给您带来问题。
答案2
在 Debian DRBD 包的极特殊情况下,无需操作“附加数据”。
以下是在 Debian 中启动和运行 DRBD 的最小顺序:
- 在两个节点上创建资源文件
/etc/drbd.d/data.res
,通常用于定义/dev/drbd1
(记住此卷号1
以便清除位图操作!) drbdadm create-md data
在两个节点上调用- 在两个节点上启动服务,它们应该等待彼此准备就绪:
systemctl start drbd.service
- 用确认
Connected
状态drbdadm cstate data
。如果没有,就不要再继续直到任何服务启动或网络连接问题得到解决。 - 仅在
primary
节点上,清除位图以防止无用的初始同步:(drbdadm -- --clear-bitmap new-current-uuid data/1
注意最后一个参数resourceName/volumeNumber
:) - 仅在
primary
节点上,将节点提升为primary
:drbdadm primary data
从那时起,在primary
节点上,/dev/drbd1
设备可用于任何常规块操作,如blockdev
或mkfs
。
小心触发清除位图操作,它会使辅助节点上的任何数据都无法恢复。顺便说一句,它对于初始设置来说非常方便,因为它可以防止您的辅助节点存储在几个小时内被完全写入,从而强制您的虚拟化层在存储上分配块,这对于精简配置来说很烦人。