PATH:
usr
/
lib
/
udev
/
rules.d
# Copyright (C) 2012 Red Hat, Inc. All rights reserved. # # This file is part of LVM2. # Udev rules for LVM. # # Scan all block devices having a PV label for LVM metadata. # Store this information in LVMetaD (the LVM metadata daemon) and maintain LVM # metadata state for improved performance by avoiding further scans while # running subsequent LVM commands or while using lvm2app library. # Also, notify LVMetaD about any relevant block device removal. # # This rule is essential for having the information in LVMetaD up-to-date. # It also requires blkid to be called on block devices before so only devices # used as LVM PVs are processed (ID_FS_TYPE="LVM2_member" or "LVM1_member"). SUBSYSTEM!="block", GOTO="lvm_end" ENV{DM_UDEV_DISABLE_OTHER_RULES_FLAG}=="1", GOTO="lvm_end" # XXX: Properly call blkid on md devices. Workaround for #793631 KERNEL!="md[0-9]*", GOTO="next" IMPORT{builtin}="blkid" LABEL="next" # If the PV label got lost, inform lvmetad immediately. # Detect the lost PV label by comparing previous ID_FS_TYPE value with current one. ENV{.ID_FS_TYPE_NEW}="$env{ID_FS_TYPE}" IMPORT{db}="ID_FS_TYPE" ENV{ID_FS_TYPE}=="LVM2_member|LVM1_member", ENV{.ID_FS_TYPE_NEW}!="LVM2_member|LVM1_member", ENV{LVM_PV_GONE}="1" ENV{ID_FS_TYPE}="$env{.ID_FS_TYPE_NEW}" ENV{LVM_PV_GONE}=="1", GOTO="lvm_scan" # Only process devices already marked as a PV - this requires blkid to be called before. ENV{ID_FS_TYPE}!="LVM2_member|LVM1_member", GOTO="lvm_end" ENV{DM_MULTIPATH_DEVICE_PATH}=="1", GOTO="lvm_end" # Inform lvmetad about any PV that is gone. ACTION=="remove", GOTO="lvm_scan" # Create /dev/disk/by-id/lvm-pv-uuid-<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", ENV{LVM_MD_PV_ACTIVATED}="1", GOTO="lvm_scan" ACTION=="add", KERNEL=="md[0-9]*p[0-9]*", GOTO="lvm_scan" ENV{LVM_MD_PV_ACTIVATED}!="1", ENV{SYSTEMD_READY}="0" 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", ENV{LVM_LOOP_PV_ACTIVATED}="1", GOTO="lvm_scan" ENV{LVM_LOOP_PV_ACTIVATED}!="1", ENV{SYSTEMD_READY}="0" GOTO="lvm_end" # If the PV is not a special device listed above, scan only if necessary. # For "direct_pvscan" mode (see below), this means run rules only an ADD events. # For "systemd_background" mode, systemd takes care of this by activating # the lvm2-pvscan@.service only once. LABEL="next" TEST!="/run/systemd/system", ACTION!="add", GOTO="lvm_end" TEST=="/run/systemd/system", ACTION!="add|change", GOTO="lvm_end" LABEL="lvm_scan" ENV{SYSTEMD_READY}="1" # The method for invoking pvscan is selected at build time with the option # --(enable|disable)-udev-systemd-background-jobs to "configure". # On modern distributions with recent systemd, it's "systemd_background"; # on others, "direct_pvscan". TEST!="/run/systemd/system", GOTO="direct_pvscan" TEST=="/run/systemd/system", GOTO="systemd_background" LABEL="systemd_background" # The table below summarises the situations in which we reach the LABEL="lvm_scan" # in the "systemd_background" case. # Marked by X, X* means only if the special dev is properly set up. # The artificial ADD is supported for coldplugging. We avoid running the pvscan # on artificial CHANGE so there's no unexpected autoactivation when WATCH rule fires. # N.B. MD and loop never actually reaches lvm_scan on REMOVE as the PV label is gone # within a CHANGE event (these are caught by the "LVM_PV_GONE" rule at the beginning). # # In this case, we simply set up the dependency between the device and the pvscan # job using SYSTEMD_ALIAS (which sets up a simplified device identifier that # allows using "BindsTo" in the sytemd unit file) and SYSTEMD_WANTS (which tells # systemd to start the pvscan job once the device is ready). # We need to set these variables for both "add" and "change" events, otherwise # systemd may loose information about the device/unit dependencies. # # | real ADD | real CHANGE | artificial ADD | artificial CHANGE | REMOVE # ============================================================================= # DM | | X | X* | | X # MD | | X | X* | | # loop | | X | X* | | # other | X | X | X | | X ACTION!="remove", ENV{LVM_PV_GONE}=="1", RUN+="/usr/bin/systemd-run /sbin/lvm pvscan --cache $major:$minor", GOTO="lvm_end" ENV{SYSTEMD_ALIAS}="/dev/block/$major:$minor" ENV{SYSTEMD_WANTS}+="lvm2-pvscan@$major:$minor.service" GOTO="lvm_end" LABEL="direct_pvscan" # The table below summarises the situations in which we reach the LABEL="lvm_scan" # for the "direct_pvscan" case. # Marked by X, X* means only if the special dev is properly set up. # The artificial ADD is supported for coldplugging. We avoid running the pvscan # on artificial CHANGE so there's no unexpected autoactivation when WATCH rule fires. # # In this case, we need to make sure that pvscan is not invoked spuriously, therefore # we invoke it only for "add" events for "other" devices. # # | real ADD | real CHANGE | artificial ADD | artificial CHANGE | REMOVE # ============================================================================= # DM | | X | X* | | X # MD | | X | X* | | # loop | | X | X* | | # other | X | | X | | X RUN+="/sbin/lvm pvscan --cache --activate ay --major $major --minor $minor", ENV{LVM_SCANNED}="1" LABEL="lvm_end"
[+]
..
[-] 60-drm.rules
[edit]
[-] 77-mm-fibocom-port-types.rules
[edit]
[-] 77-mm-x22x-port-types.rules
[edit]
[-] 66-snapd-autoimport.rules
[edit]
[-] 66-azure-ephemeral.rules
[edit]
[-] 77-mm-sierra.rules
[edit]
[-] 60-persistent-storage-dm.rules
[edit]
[-] 85-regulatory.rules
[edit]
[-] 40-usb_modeswitch.rules
[edit]
[-] 70-touchpad.rules
[edit]
[-] 75-net-description.rules
[edit]
[-] 39-usbmuxd.rules
[edit]
[-] 71-seat.rules
[edit]
[-] 69-bcache.rules
[edit]
[-] 95-upower-hidpp.rules
[edit]
[-] 70-iscsi-network-interface.rules
[edit]
[-] 95-upower-wup.rules
[edit]
[-] 77-mm-nokia-port-types.rules
[edit]
[-] 60-persistent-storage.rules
[edit]
[-] 77-mm-ericsson-mbm.rules
[edit]
[-] 60-persistent-input.rules
[edit]
[-] 60-multipath.rules
[edit]
[-] 90-fwupd-devices.rules
[edit]
[-] 77-mm-simtech-port-types.rules
[edit]
[-] 64-btrfs.rules
[edit]
[-] 61-persistent-storage-android.rules
[edit]
[-] 71-power-switch-proliant.rules
[edit]
[-] 56-dm-parts.rules
[edit]
[-] 73-seat-late.rules
[edit]
[-] 90-console-setup.rules
[edit]
[-] 70-power-switch.rules
[edit]
[-] 77-mm-zte-port-types.rules
[edit]
[-] 63-md-raid-arrays.rules
[edit]
[-] 80-debian-compat.rules
[edit]
[-] 60-persistent-v4l.rules
[edit]
[-] 95-dm-notify.rules
[edit]
[-] 95-upower-hid.rules
[edit]
[-] 77-mm-telit-port-types.rules
[edit]
[-] 77-mm-longcheer-port-types.rules
[edit]
[-] 99-systemd.rules
[edit]
[-] 77-mm-gosuncn-port-types.rules
[edit]
[-] 60-persistent-alsa.rules
[edit]
[-] 60-fido-id.rules
[edit]
[-] 77-mm-qdl-device-blacklist.rules
[edit]
[-] 58-scsi-sg3_symlink.rules
[edit]
[-] 56-lvm.rules
[edit]
[-] 70-mouse.rules
[edit]
[-] 95-upower-csr.rules
[edit]
[-] 56-dm-mpath.rules
[edit]
[-] 69-md-clustered-confirm-device.rules
[edit]
[-] 70-iscsi-disk.rules
[edit]
[-] 40-vm-hotadd.rules
[edit]
[-] 75-probe_mtd.rules
[edit]
[-] 60-tpm-udev.rules
[edit]
[-] 77-mm-quectel-port-types.rules
[edit]
[-] 64-md-raid-assembly.rules
[edit]
[-] 50-apport.rules
[edit]
[-] 77-mm-cinterion-port-types.rules
[edit]
[-] 60-block.rules
[edit]
[-] 61-autosuspend-manual.rules
[edit]
[-] 81-net-dhcp.rules
[edit]
[-] 60-open-vm-tools.rules
[edit]
[-] 01-md-raid-creating.rules
[edit]
[-] 60-cdrom_id.rules
[edit]
[-] 60-evdev.rules
[edit]
[-] 50-udev-default.rules
[edit]
[-] 73-special-net-names.rules
[edit]
[-] 80-net-setup-link.rules
[edit]
[-] 95-kpartx.rules
[edit]
[-] 77-mm-dell-port-types.rules
[edit]
[-] 78-sound-card.rules
[edit]
[-] 60-autosuspend-chromiumos.rules
[edit]
[-] 77-mm-haier-port-types.rules
[edit]
[-] 80-udisks2.rules
[edit]
[-] 77-mm-foxconn-port-types.rules
[edit]
[-] 60-persistent-storage-tape.rules
[edit]
[-] 90-bolt.rules
[edit]
[-] 60-input-id.rules
[edit]
[-] 78-graphics-card.rules
[edit]
[-] 77-mm-qcom-soc.rules
[edit]
[-] 85-hdparm.rules
[edit]
[-] 55-dm.rules
[edit]
[-] 69-lvm-metad.rules
[edit]
[-] 60-crda.rules
[edit]
[-] 70-joystick.rules
[edit]
[-] 64-btrfs-dm.rules
[edit]
[-] 96-e2scrub.rules
[edit]
[-] 77-mm-ublox-port-types.rules
[edit]
[-] 60-serial.rules
[edit]
[-] 80-drivers.rules
[edit]
[-] 99-vmware-scsi-udev.rules
[edit]
[-] 50-firmware.rules
[edit]
[-] 77-mm-mtk-port-types.rules
[edit]
[-] 80-mm-candidate.rules
[edit]
[-] 77-mm-huawei-net-port-types.rules
[edit]
[-] 77-mm-tplink-port-types.rules
[edit]
[-] 60-sensor.rules
[edit]
[-] 77-mm-dlink-port-types.rules
[edit]
[-] 68-del-part-nodes.rules
[edit]
[-] 77-mm-broadmobi-port-types.rules
[edit]
[-] 55-scsi-sg3_id.rules
[edit]
[-] 70-uaccess.rules
[edit]