@@ -149,6 +149,60 @@ AWK_PATH=$(command -v awk)
149149cat > /etc/udev/rules.d/99-nfs.rules << EOF
150150SUBSYSTEM=="bdi", ACTION=="add", PROGRAM="$AWK_PATH -v bdi=\$ kernel 'BEGIN{ret=1} {if (\$ 4 == bdi){ret=0}} END{exit ret}' /proc/fs/nfsfs/volumes", ATTR{read_ahead_kb}="15380"
151151EOF
152+
153+ echo " install udev rules for v6 vm sku"
154+ cat > /etc/udev/rules.d/80-azure-disk.rules << EOF
155+ ACTION!="add|change", GOTO="azure_disk_end"
156+ SUBSYSTEM!="block", GOTO="azure_disk_end"
157+
158+ KERNEL=="nvme*", ATTRS{nsid}=="?*", ENV{ID_MODEL}=="Microsoft NVMe Direct Disk", GOTO="azure_disk_nvme_direct_v1"
159+ KERNEL=="nvme*", ATTRS{nsid}=="?*", ENV{ID_MODEL}=="Microsoft NVMe Direct Disk v2", GOTO="azure_disk_nvme_direct_v2"
160+ KERNEL=="nvme*", ATTRS{nsid}=="?*", ENV{ID_MODEL}=="MSFT NVMe Accelerator v1.0", GOTO="azure_disk_nvme_remote_v1"
161+ ENV{ID_VENDOR}=="Msft", ENV{ID_MODEL}=="Virtual_Disk", GOTO="azure_disk_scsi"
162+ GOTO="azure_disk_end"
163+
164+ LABEL="azure_disk_scsi"
165+ ATTRS{device_id}=="?00000000-0000-*", ENV{AZURE_DISK_TYPE}="os", GOTO="azure_disk_symlink"
166+ ENV{DEVTYPE}=="partition", PROGRAM="/bin/sh -c 'readlink /sys/class/block/%k/../device|cut -d: -f4'", ENV{AZURE_DISK_LUN}="$result "
167+ ENV{DEVTYPE}=="disk", PROGRAM="/bin/sh -c 'readlink /sys/class/block/%k/device|cut -d: -f4'", ENV{AZURE_DISK_LUN}="$result "
168+ ATTRS{device_id}=="{f8b3781a-1e82-4818-a1c3-63d806ec15bb}", ENV{AZURE_DISK_LUN}=="0", ENV{AZURE_DISK_TYPE}="os", ENV{AZURE_DISK_LUN}="", GOTO="azure_disk_symlink"
169+ ATTRS{device_id}=="{f8b3781b-1e82-4818-a1c3-63d806ec15bb}", ENV{AZURE_DISK_TYPE}="data", GOTO="azure_disk_symlink"
170+ ATTRS{device_id}=="{f8b3781c-1e82-4818-a1c3-63d806ec15bb}", ENV{AZURE_DISK_TYPE}="data", GOTO="azure_disk_symlink"
171+ ATTRS{device_id}=="{f8b3781d-1e82-4818-a1c3-63d806ec15bb}", ENV{AZURE_DISK_TYPE}="data", GOTO="azure_disk_symlink"
172+
173+ # Use "resource" type for local SCSI because some VM skus offer NVMe local disks in addition to a SCSI resource disk, e.g. LSv3 family.
174+ # This logic is already in walinuxagent rules but we duplicate it here to avoid an unnecessary dependency for anyone requiring it.
175+ ATTRS{device_id}=="?00000000-0001-*", ENV{AZURE_DISK_TYPE}="resource", ENV{AZURE_DISK_LUN}="", GOTO="azure_disk_symlink"
176+ ATTRS{device_id}=="{f8b3781a-1e82-4818-a1c3-63d806ec15bb}", ENV{AZURE_DISK_LUN}=="1", ENV{AZURE_DISK_TYPE}="resource", ENV{AZURE_DISK_LUN}="", GOTO="azure_disk_symlink"
177+ GOTO="azure_disk_end"
178+
179+ LABEL="azure_disk_nvme_direct_v1"
180+ LABEL="azure_disk_nvme_direct_v2"
181+ ATTRS{nsid}=="?*", ENV{AZURE_DISK_TYPE}="local", ENV{AZURE_DISK_SERIAL}="$env {ID_SERIAL_SHORT}"
182+ GOTO="azure_disk_nvme_id"
183+
184+ LABEL="azure_disk_nvme_remote_v1"
185+ ATTRS{nsid}=="1", ENV{AZURE_DISK_TYPE}="os", GOTO="azure_disk_nvme_id"
186+ ATTRS{nsid}=="?*", ENV{AZURE_DISK_TYPE}="data", PROGRAM="/bin/sh -ec 'echo $$ ((%s{nsid}-2))'", ENV{AZURE_DISK_LUN}="$result "
187+
188+ LABEL="azure_disk_nvme_id"
189+ ATTRS{nsid}=="?*", IMPORT{program}="/usr/sbin/azure-nvme-id --udev"
190+
191+ LABEL="azure_disk_symlink"
192+ # systemd v254 ships an updated 60-persistent-storage.rules that would allow
193+ # these to be deduplicated using $env {.PART_SUFFIX}
194+ ENV{DEVTYPE}=="disk", ENV{AZURE_DISK_TYPE}=="os|resource|root", SYMLINK+="disk/azure/$env {AZURE_DISK_TYPE}"
195+ ENV{DEVTYPE}=="disk", ENV{AZURE_DISK_TYPE}=="?*", ENV{AZURE_DISK_INDEX}=="?*", SYMLINK+="disk/azure/$env {AZURE_DISK_TYPE}/by-index/$env {AZURE_DISK_INDEX}"
196+ ENV{DEVTYPE}=="disk", ENV{AZURE_DISK_TYPE}=="?*", ENV{AZURE_DISK_LUN}=="?*", SYMLINK+="disk/azure/$env {AZURE_DISK_TYPE}/by-lun/$env {AZURE_DISK_LUN}"
197+ ENV{DEVTYPE}=="disk", ENV{AZURE_DISK_TYPE}=="?*", ENV{AZURE_DISK_NAME}=="?*", SYMLINK+="disk/azure/$env {AZURE_DISK_TYPE}/by-name/$env {AZURE_DISK_NAME}"
198+ ENV{DEVTYPE}=="disk", ENV{AZURE_DISK_TYPE}=="?*", ENV{AZURE_DISK_SERIAL}=="?*", SYMLINK+="disk/azure/$env {AZURE_DISK_TYPE}/by-serial/$env {AZURE_DISK_SERIAL}"
199+ ENV{DEVTYPE}=="partition", ENV{AZURE_DISK_TYPE}=="os|resource|root", SYMLINK+="disk/azure/$env {AZURE_DISK_TYPE}-part%n"
200+ ENV{DEVTYPE}=="partition", ENV{AZURE_DISK_TYPE}=="?*", ENV{AZURE_DISK_INDEX}=="?*", SYMLINK+="disk/azure/$env {AZURE_DISK_TYPE}/by-index/$env {AZURE_DISK_INDEX}-part%n"
201+ ENV{DEVTYPE}=="partition", ENV{AZURE_DISK_TYPE}=="?*", ENV{AZURE_DISK_LUN}=="?*", SYMLINK+="disk/azure/$env {AZURE_DISK_TYPE}/by-lun/$env {AZURE_DISK_LUN}-part%n"
202+ ENV{DEVTYPE}=="partition", ENV{AZURE_DISK_TYPE}=="?*", ENV{AZURE_DISK_NAME}=="?*", SYMLINK+="disk/azure/$env {AZURE_DISK_TYPE}/by-name/$env {AZURE_DISK_NAME}-part%n"
203+ ENV{DEVTYPE}=="partition", ENV{AZURE_DISK_TYPE}=="?*", ENV{AZURE_DISK_SERIAL}=="?*", SYMLINK+="disk/azure/$env {AZURE_DISK_TYPE}/by-serial/$env {AZURE_DISK_SERIAL}-part%n"
204+ LABEL="azure_disk_end"
205+ EOF
152206udevadm control --reload
153207
154208if isMarinerOrAzureLinux " $OS " ; then
0 commit comments