Re: [PATCH] udev rules: introduce rules for cluster-md to confirm device

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Tue, Aug 01 2017, Guoqing Jiang wrote:

> 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@xxxxxxxx>
> ---
>  Makefile                               |  6 ++++--
>  udev-md-clustered-confirm-device.rules | 20 ++++++++++++++++++++
>  2 files changed, 24 insertions(+), 2 deletions(-)
>  create mode 100644 udev-md-clustered-confirm-device.rules
>
> diff --git a/Makefile b/Makefile
> index 021d3ad..0977f27 100644
> --- a/Makefile
> +++ b/Makefile
> @@ -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 ; \
> diff --git a/udev-md-clustered-confirm-device.rules b/udev-md-clustered-confirm-device.rules
> new file mode 100644
> index 0000000..d763e27
> --- /dev/null
> +++ b/udev-md-clustered-confirm-device.rules
> @@ -0,0 +1,20 @@
> +# 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"
> +
> +# Based on the received UUID, node confirms the device if
> +# it is found by blkid, otherwise the node reports it is
> +# missing.
> +ACTION=="change", ENV{EVENT}=="ADD_DEVICE", ENV{DEVICE_UUID}=="?*", ENV{RAID_DISK}=="?*", \
> +PROGRAM="BINDIR/blkid -o device -t UUID_SUB=$env{DEVICE_UUID}", RESULT!="", \
> +RUN+="BINDIR/mdadm --manage $env{DEVNAME} --cluster-confirm $env{RAID_DISK}:$result"
> +
> +ACTION=="change", ENV{EVENT}=="ADD_DEVICE", ENV{DEVICE_UUID}=="?*", ENV{RAID_DISK}=="?*", \
> +PROGRAM="BINDIR/blkid -o device -t UUID_SUB=$env{DEVICE_UUID}", RESULT=="", \
> +RUN+="BINDIR/mdadm --manage $env{DEVNAME} --cluster-confirm $env{RAID_DISK}:missing"
> +
> +LABEL="clustermd_end"
> -- 
> 2.10.0

This can run "blkid" twice, which seems wasteful.
I think it would be best to skip to the end if ACTION != "change" and if
event != ADD_DEVICE etc.
Then
 PROGRAM="BINDIR/blkid -o device -t UUID_SUB=$env{DEVICE_UUID}", ENV{".mdadm.blkid"} = "$result"

Then have two rules which tests ENV{".mdadm.blkid"} and run one of the
two mdadm commands.

NeilBrown

Attachment: signature.asc
Description: PGP signature


[Index of Archives]     [Linux RAID Wiki]     [ATA RAID]     [Linux SCSI Target Infrastructure]     [Linux Block]     [Linux IDE]     [Linux SCSI]     [Linux Hams]     [Device Mapper]     [Device Mapper Cryptographics]     [Kernel]     [Linux Admin]     [Linux Net]     [GFS]     [RPM]     [git]     [Yosemite Forum]


  Powered by Linux