Nick.Jacques
2018-Jan-31 16:54 UTC
[CentOS] systemd-udevd not applying ATTR to block device at boot
I suppose it would help if I posted relevant version info (sorry about that...) CentOS Linux release 7.4.1708 (Core) @ 3.10.0-693.11.6.el7.x86_64 systemd-219-42.el7_4.4.x86_64 $ modinfo virtio_scsi filename: /lib/modules/3.10.0-693.11.6.el7.x86_64/kernel/drivers/scsi/virtio_scsi.ko.xz license: GPL description: Virtio SCSI HBA driver rhelversion: 7.4 srcversion: A80DAE9007C7FCF3DDD1501 alias: virtio:d00000008v* depends: virtio,virtio_ring intree: Y vermagic: 3.10.0-693.11.6.el7.x86_64 SMP mod_unload modversions signer: CentOS Linux kernel signing key sig_key: 2C:BC:98:70:54:63:43:CA:3A:E1:20:C2:BC:EB:98:44:01:95:59:62 sig_hashalgo: sha256 I'm happy to provide any other relevant info if needed! Thanks again! Nick ?On 1/31/18, 12:49 AM, "CentOS on behalf of Nick.Jacques" <centos-bounces at centos.org on behalf of Nick.Jacques at target.com> wrote: Hi everyone, I have a udev rule file that contains a singular rule: SUBSYSTEM=="block", ACTION=="add|change", ENV{ID_VENDOR}=="*Google*", ENV{DEVTYPE}=="disk", ATTR{queue/scheduler}:="noop" When I use a Google Cloud instance and boot it, things work as expected and /dev/sda (a persistent disk) uses the noop scheduler. If the instance also has a Local SSD type disk, however, the change in scheduler is not applied. This is a bit academic, because the Local SSD device uses noop by default (somehow, I don?t see any udev rules for setting this outside of my own). But, for instance, if I set the scheduler in the udev rules to ?cfq,? at boot, /dev/sda will use cfq and /dev/sdb will use noop. If I run udevadm trigger after boot, then /dev/sdb will use cfq. So, it appears that at boot time, for some reason, my scheduler is not being applied to /dev/sdb. I?ve tried a handful of things: - changing the order of my udev rule file: I?ve tried 10-, 90-, and 99- prefixes. My rule file is in /etc/udev/rules.d/. - using ATTR{queue/scheduler}:="noop" and ATTR{queue/scheduler}="noop" (both the = and := operator) - searching the internet for all kinds of variations on ?udev rule not applying at boot? but so far, I?ve come up empty-handed. The only thing I can think of is that I am hitting some sort of race condition and udev is unable to set the ATTR in /sys, but I?m not sure how I can confirm this. Below are dumps from udevadm of the block devices, /dev/sda (a Google Cloud persistent disk that is my root partition) and /dev/sdb (a Google Cloud ephemeral disk [local SSD] that is mounted at /local-ssd). Thanks in advance for any assistance! Nick < trimmed udevadm output>