udev rules: introduce rules for cluster-md to confirm device

For cluster scenario, add device is different with native raid.
When a node issues adds a device, then the node will broadcast
a message with UUID to other nodes in the cluster. If receiving
node can find the device with the specific UUID, it must confirm
the device, otherwise reports it is missing.

Signed-off-by: Guoqing Jiang <gqjiang@suse.com>
Signed-off-by: Jes Sorensen <jsorensen@fb.com>
This commit is contained in:
Guoqing Jiang 2017-08-02 10:05:41 +08:00 committed by Jes Sorensen
parent 3373d49f32
commit 0e23c59718
2 changed files with 25 additions and 2 deletions

View File

@ -256,8 +256,10 @@ install-man: mdadm.8 md.4 mdadm.conf.5 mdmon.8
$(INSTALL) -D -m 644 md.4 $(DESTDIR)$(MAN4DIR)/md.4
$(INSTALL) -D -m 644 mdadm.conf.5 $(DESTDIR)$(MAN5DIR)/mdadm.conf.5
install-udev: udev-md-raid-arrays.rules udev-md-raid-assembly.rules udev-md-raid-creating.rules
@for file in 01-md-raid-creating.rules 63-md-raid-arrays.rules 64-md-raid-assembly.rules ; \
install-udev: udev-md-raid-arrays.rules udev-md-raid-assembly.rules udev-md-raid-creating.rules \
udev-md-clustered-confirm-device.rules
@for file in 01-md-raid-creating.rules 63-md-raid-arrays.rules 64-md-raid-assembly.rules \
69-md-clustered-confirm-device.rules ; \
do sed -e 's,BINDIR,$(BINDIR),g' udev-$${file#??-} > .install.tmp.1 && \
$(ECHO) $(INSTALL) -D -m 644 udev-$${file#??-} $(DESTDIR)$(UDEVDIR)/rules.d/$$file ; \
$(INSTALL) -D -m 644 .install.tmp.1 $(DESTDIR)$(UDEVDIR)/rules.d/$$file ; \

View File

@ -0,0 +1,21 @@
# do not edit this file, it will be overwritten on update
SUBSYSTEM!="block", GOTO="clustermd_end"
# handle md arrays
KERNEL!="md*", GOTO="clustermd_end"
ENV{DEVTYPE}!="disk", GOTO="clustermd_end"
ACTION!="change", GOTO="clustermd_end"
ENV{EVENT}!="ADD_DEVICE", GOTO="clustermd_end"
ENV{DEVICE_UUID}!="?*", GOTO="clustermd_end"
ENV{RAID_DISK}!="?*", GOTO="clustermd_end"
# Based on the received UUID, node confirms the device if
# it is found by blkid, otherwise the node reports it is
# missing.
PROGRAM="BINDIR/blkid -o device -t UUID_SUB=$env{DEVICE_UUID}", ENV{.md.newdevice} = "$result"
ENV{.md.newdevice}!="", RUN+="BINDIR/mdadm --manage $env{DEVNAME} --cluster-confirm $env{RAID_DISK}:$env{.md.newdevice}"
ENV{.md.newdevice}=="", RUN+="BINDIR/mdadm --manage $env{DEVNAME} --cluster-confirm $env{RAID_DISK}:missing"
LABEL="clustermd_end"