From patchwork Sun Jun 18 18:02:09 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Adolf Belka X-Patchwork-Id: 6940 Return-Path: Received: from mail01.ipfire.org (mail01.haj.ipfire.org [172.28.1.202]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-384) server-digest SHA384 client-signature ECDSA (P-384) client-digest SHA384) (Client CN "mail01.haj.ipfire.org", Issuer "R3" (verified OK)) by web04.haj.ipfire.org (Postfix) with ESMTPS id 4Qkght4nYwz3wjp for ; Sun, 18 Jun 2023 18:02:22 +0000 (UTC) Received: from mail02.haj.ipfire.org (mail02.haj.ipfire.org [172.28.1.201]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-384) server-digest SHA384 client-signature ECDSA (P-384) client-digest SHA384) (Client CN "mail02.haj.ipfire.org", Issuer "R3" (verified OK)) by mail01.ipfire.org (Postfix) with ESMTPS id 4Qkghr2831zVp; Sun, 18 Jun 2023 18:02:20 +0000 (UTC) Received: from mail02.haj.ipfire.org (localhost [127.0.0.1]) by mail02.haj.ipfire.org (Postfix) with ESMTP id 4Qkghr0NSRz2xR7; Sun, 18 Jun 2023 18:02:20 +0000 (UTC) Received: from mail01.ipfire.org (mail01.haj.ipfire.org [172.28.1.202]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-384) server-digest SHA384 client-signature ECDSA (P-384) client-digest SHA384) (Client CN "mail01.haj.ipfire.org", Issuer "R3" (verified OK)) by mail02.haj.ipfire.org (Postfix) with ESMTPS id 4Qkghp1bZRz2xGC for ; Sun, 18 Jun 2023 18:02:18 +0000 (UTC) Received: from [127.0.0.1] (localhost [127.0.0.1]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-384) server-digest SHA384) (No client certificate requested) by mail01.ipfire.org (Postfix) with ESMTPSA id 4Qkghl5h0GzPf; Sun, 18 Jun 2023 18:02:15 +0000 (UTC) DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=ipfire.org; s=202003ed25519; t=1687111336; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=XLBxDQJA4M5HxZYdUOu3so5gVXdLDaHY99bZ3QV3Mw0=; b=qB1r2cj4Hp9Tt3CpwIFicD7zwjmIZl7A60nsZVbQJMZZGQgW16VKmVE88caeGj/z8XSTct +h+Pph+GyXIfg8DQ== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ipfire.org; s=202003rsa; t=1687111336; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=XLBxDQJA4M5HxZYdUOu3so5gVXdLDaHY99bZ3QV3Mw0=; b=kjJk0C+3HGEMnapFvJq8i7GytvwS7KO/QWbPt+yg6upAa4DY9aALB/PQqz3hxKHYc+BaVE jCZsJ5diuhnpb67TbPk+MvEYC6AzeHp4XEDNcRWE1s7L7NWPxZTIODt0B/RDq1Z8XZfg64 t+/fUZMJhaC3pNi/57Blzlrwjpg6Ll0T+XRbpjVfxEiYX53B3dY8Z9kNTYvU8nzuSBaRnd IXSCtnZk4IszVyNbhbejPQhUCMfonC+lgkP91SoDkXfcoyGblRvKInJaPtX/uxlsVmtrxR KLFeVzaSePjApj10MyZYt5PfAvys7iZ4MwAGrqFWAUnCxDb21twdqaNdE4fKtw== From: Adolf Belka To: development@lists.ipfire.org Subject: [PATCH 1/2] lvm: Fixes bug-13151 - update 69-dm-lvm.rules Date: Sun, 18 Jun 2023 20:02:09 +0200 Message-ID: <20230618180210.3467088-1-adolf.belka@ipfire.org> MIME-Version: 1.0 X-BeenThere: development@lists.ipfire.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: IPFire development talk List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: development-bounces@lists.ipfire.org Sender: "Development" - Redhat updated lvm udev rule 69-dm-lvm.rules to only work with systemd - Update 69-dm-lvm.rules to work with IPFire based on input from @Daniel of what worked to mount an existing lvm volume Suggested-by: Daniel Weismüller Signed-off-by: Adolf Belka --- config/lvm/69-dm-lvm.rules | 83 ++++++++++++++++++++++++++++++++++++++ lfs/lvm2 | 2 + 2 files changed, 85 insertions(+) create mode 100644 config/lvm/69-dm-lvm.rules diff --git a/config/lvm/69-dm-lvm.rules b/config/lvm/69-dm-lvm.rules new file mode 100644 index 000000000..a1c6be14f --- /dev/null +++ b/config/lvm/69-dm-lvm.rules @@ -0,0 +1,83 @@ +# Copyright (C) 2012,2021 Red Hat, Inc. All rights reserved. +# +# This file is part of LVM. +# +# This rule requires blkid to be called on block devices before so only devices +# used as LVM PVs are processed (ID_FS_TYPE="LVM2_member"). + +SUBSYSTEM!="block", GOTO="lvm_end" + + +ENV{DM_UDEV_DISABLE_OTHER_RULES_FLAG}=="1", GOTO="lvm_end" + +# Only process devices already marked as a PV - this requires blkid to be called before. +ENV{ID_FS_TYPE}!="LVM2_member", GOTO="lvm_end" +ENV{DM_MULTIPATH_DEVICE_PATH}=="1", GOTO="lvm_end" +ACTION=="remove", GOTO="lvm_end" + +# Create /dev/disk/by-id/lvm-pv-uuid- symlink for each PV +ENV{ID_FS_UUID_ENC}=="?*", SYMLINK+="disk/by-id/lvm-pv-uuid-$env{ID_FS_UUID_ENC}" + +# If the PV is a special device listed below, scan only if the device is +# properly activated. These devices are not usable after an ADD event, +# but they require an extra setup and they are ready after a CHANGE event. +# Also support coldplugging with ADD event but only if the device is already +# properly activated. +# This logic should be eventually moved to rules where those particular +# devices are processed primarily (MD and loop). + +# DM device: +KERNEL!="dm-[0-9]*", GOTO="next" +ENV{DM_UDEV_PRIMARY_SOURCE_FLAG}=="1", ENV{DM_ACTIVATION}=="1", GOTO="lvm_scan" +GOTO="lvm_end" + +# MD device: +LABEL="next" +KERNEL!="md[0-9]*", GOTO="next" +IMPORT{db}="LVM_MD_PV_ACTIVATED" +ACTION=="add", ENV{LVM_MD_PV_ACTIVATED}=="1", GOTO="lvm_scan" +ACTION=="change", ENV{LVM_MD_PV_ACTIVATED}!="1", TEST=="md/array_state", ENV{LVM_MD_PV_ACTIVATED}="1", GOTO="lvm_scan" +ACTION=="add", KERNEL=="md[0-9]*p[0-9]*", GOTO="lvm_scan" +GOTO="lvm_end" + +# Loop device: +LABEL="next" +KERNEL!="loop[0-9]*", GOTO="next" +ACTION=="add", ENV{LVM_LOOP_PV_ACTIVATED}=="1", GOTO="lvm_scan" +ACTION=="change", ENV{LVM_LOOP_PV_ACTIVATED}!="1", TEST=="loop/backing_file", ENV{LVM_LOOP_PV_ACTIVATED}="1", GOTO="lvm_scan" +GOTO="lvm_end" + +LABEL="next" +ACTION!="add", GOTO="lvm_end" + +LABEL="lvm_scan" + +# pvscan will check if this device completes a VG, +# i.e. all PVs in the VG are now present with the +# arrival of this PV. If so, it prints to stdout: +# LVM_VG_NAME_COMPLETE='foo' +# +# When the VG is complete it can be activated, so +# vgchange -aay is run. It is run via +# systemd since it can take longer to run than +# udev wants to block when processing rules. +# (if there are hundreds of LVs to activate, +# the vgchange can take many seconds.) +# +# pvscan only reads the single device specified, +# and uses temp files under /run/lvm to check if +# other PVs in the VG are present. +# +# If event_activation=0 in lvm.conf, this pvscan +# (using checkcomplete) will do nothing, so that +# no event-based autoactivation will be happen. +# +# TODO: adjust the output of vgchange -aay so that +# it's better suited to appearing in the journal. + +IMPORT{program}="/usr/sbin/lvm pvscan --cache --listvg --checkcomplete --vgonline --autoactivation event --udevoutput --journal=output $env{DEVNAME}" +ENV{LVM_VG_NAME_COMPLETE}=="?*", RUN+="/usr/sbin/lvm vgchange -aay --autoactivation event $env{LVM_VG_NAME_COMPLETE}" +GOTO="lvm_end" + +LABEL="lvm_end" + diff --git a/lfs/lvm2 b/lfs/lvm2 index 2f1e921fc..4e2bd6235 100644 --- a/lfs/lvm2 +++ b/lfs/lvm2 @@ -85,5 +85,7 @@ $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects)) --enable-udev_sync cd $(DIR_APP) && make $(MAKETUNING) cd $(DIR_APP) && make install + # copy the tailored lvm udev rules file that will mount volumes without systemd + cp -rf $(DIR_SRC)/config/lvm/69-dm-lvm.rules /lib/udev/rules.d/ @rm -rf $(DIR_APP) @$(POSTBUILD)