69 lines
2.9 KiB
Diff
69 lines
2.9 KiB
Diff
|
From 7a717ada3297bef83c1f70c6baa50ea15ed10fd1 Mon Sep 17 00:00:00 2001
|
||
|
From: Guoqing Jiang <gqjiang@suse.com>
|
||
|
Date: Wed, 22 Nov 2017 12:59:15 +0800
|
||
|
Subject: [PATCH] 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.
|
||
|
|
||
|
[gqjiang: changed a little bit since difference context in Makefile]
|
||
|
|
||
|
Signed-off-by: Guoqing Jiang <gqjiang@suse.com>
|
||
|
Signed-off-by: Jes Sorensen <jsorensen@fb.com>
|
||
|
---
|
||
|
Makefile | 6 ++++--
|
||
|
udev-md-clustered-confirm-device.rules | 21 +++++++++++++++++++++
|
||
|
2 files changed, 25 insertions(+), 2 deletions(-)
|
||
|
create mode 100644 udev-md-clustered-confirm-device.rules
|
||
|
|
||
|
diff --git a/Makefile b/Makefile
|
||
|
index 5fd7f166e7e1..70df31267982 100644
|
||
|
--- a/Makefile
|
||
|
+++ b/Makefile
|
||
|
@@ -291,8 +291,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
|
||
|
- @for file in 63-md-raid-arrays.rules 64-md-raid-assembly.rules ; \
|
||
|
+install-udev: udev-md-raid-arrays.rules udev-md-raid-assembly.rules \
|
||
|
+ udev-md-clustered-confirm-device.rules
|
||
|
+ @for file in 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 ; \
|
||
|
diff --git a/udev-md-clustered-confirm-device.rules b/udev-md-clustered-confirm-device.rules
|
||
|
new file mode 100644
|
||
|
index 000000000000..3e5381e19315
|
||
|
--- /dev/null
|
||
|
+++ b/udev-md-clustered-confirm-device.rules
|
||
|
@@ -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"
|
||
|
--
|
||
|
2.10.0
|
||
|
|