@@ -12,8 +12,19 @@ users:
1212% { endfor }
1313% { endif }
1414
15- % { if length (nvidia_admin_conf_lines) > 0 }
15+ % { if local_nvme_enabled }
16+ package_update: true
17+ packages:
18+ - mdadm
19+ - nvme- cli
20+ % { if local_nvme_filesystem_type == " xfs" }
21+ - xfsprogs
22+ % { endif }
23+ % { endif }
24+
25+ % { if length (nvidia_admin_conf_lines) > 0 || local_nvme_enabled }
1626write_files:
27+ % { if length (nvidia_admin_conf_lines) > 0 }
1728 - path : / etc/ modprobe.d/ nvidia_admin.conf
1829 owner: root: root
1930 permissions: " 0644"
@@ -91,7 +102,111 @@ write_files:
91102 fi
92103
93104 log " end"
105+ % { endif }
106+ % { if local_nvme_enabled }
107+ - path : / usr/ local / sbin/ prepare- disks.sh
108+ owner: root: root
109+ permissions: " 0755"
110+ content: |
111+ # !/usr/bin/env bash
112+ set - euo pipefail
113+
114+ MOUNTPOINT= " $${1:-/mnt/local-nvme}"
115+ FILESYSTEM_TYPE= " ${ local_nvme_filesystem_type } "
116+ MD_DEV= " /dev/md0"
117+ case " $${FILESYSTEM_TYPE}" in
118+ ext4)
119+ MOUNT_OPTS= " noatime,nodiratime,lazytime,commit=60"
120+ MKFS_CMD= (mkfs.ext4 - F - m 0 )
121+ ;;
122+ xfs)
123+ MOUNT_OPTS= " noatime,nodiratime,logbufs=8,inode64"
124+ MKFS_CMD= (mkfs.xfs - f)
125+ ;;
126+ * )
127+ echo " Unsupported filesystem type: $${FILESYSTEM_TYPE}"
128+ exit 1
129+ ;;
130+ esac
131+
132+ echo " Detecting NVMe disks..."
133+ nvme list
134+
135+ mapfile - t NVME_DISKS < < (
136+ nvme list | awk 'NR> 2 && $1 ~ / ^\/ dev\/ nvme[0 - 9 ]+ n[0 - 9 ]+ $/ { print $1 }' | sort - V | uniq
137+ )
138+
139+ ROOT_SOURCE= " $(findmnt -n -o SOURCE / || true)"
140+ ROOT_PKNAME= " $(lsblk -no PKNAME " $${ROOT_SOURCE}" 2>/dev/null || true)"
141+ if [[ - n " $${ROOT_PKNAME}" ]]; then
142+ ROOT_DISK= " /dev/$${ROOT_PKNAME}"
143+ FILTERED= ()
144+ for d in " $${NVME_DISKS[@]}" ; do
145+ if [[ " $${d}" != " $${ROOT_DISK}" ]]; then
146+ FILTERED+ =(" $${d}" )
147+ fi
148+ done
149+ NVME_DISKS= (" $${FILTERED[@]}" )
150+ fi
151+
152+ DISK_COUNT= " $${#NVME_DISKS[@]}"
153+ if (( DISK_COUNT < 2 || DISK_COUNT > 8 )); then
154+ echo " Expected 2..8 NVMe disks for RAID0, found $${DISK_COUNT}: $${NVME_DISKS[*]}"
155+ exit 1
156+ fi
157+
158+ for d in " $${NVME_DISKS[@]}" ; do
159+ [[ - b " $${d}" ]] || { echo " Block device not found: $${d}" ; exit 1 ; }
160+ done
161+
162+ echo " Using $${DISK_COUNT} NVMe disk(s): $${NVME_DISKS[*]}"
163+
164+ for d in " $${NVME_DISKS[@]}" ; do
165+ DISK_BASENAME= " $(basename " $${d}" )"
166+ SCHEDULER_PATH= " /sys/block/$${DISK_BASENAME}/queue/scheduler"
167+ if [[ - w " $${SCHEDULER_PATH}" ]]; then
168+ echo none | tee " $${SCHEDULER_PATH}" > / dev/ null
169+ else
170+ echo " Skipping scheduler update for $${d}: $${SCHEDULER_PATH} is not writable"
171+ fi
172+ done
173+
174+ if [[ - e " $${MD_DEV}" ]]; then
175+ mdadm -- stop " $${MD_DEV}" || true
176+ fi
94177
178+ mdadm -- create " $${MD_DEV}" \
179+ -- level= 0 \
180+ -- raid-devices= " $${DISK_COUNT}" \
181+ " $${NVME_DISKS[@]}"
182+
183+ udevadm settle
184+
185+ " $${MKFS_CMD[@]}" " $${MD_DEV}"
186+
187+ mkdir - p " $${MOUNTPOINT}"
188+ mount - o " $${MOUNT_OPTS}" " $${MD_DEV}" " $${MOUNTPOINT}"
189+
190+ UUID= " $(blkid -s UUID -o value " $${MD_DEV}" )"
191+ grep - q " $${UUID}" / etc/ fstab || echo " UUID=$${UUID} $${MOUNTPOINT} $${FILESYSTEM_TYPE} $${MOUNT_OPTS},nofail 0 2" >> / etc/ fstab
192+
193+ if [[ - d / etc / mdadm ]]; then
194+ mdadm -- detail -- scan > / etc/ mdadm/ mdadm.conf
195+ fi
196+
197+ echo " Done."
198+ echo " RAID device: $${MD_DEV}"
199+ echo " Mounted at : $${MOUNTPOINT}"
200+ df - h " $${MOUNTPOINT}"
201+ % { endif }
202+ % { endif }
203+
204+ % { if length (nvidia_admin_conf_lines) > 0 || local_nvme_enabled }
95205runcmd:
206+ % { if length (nvidia_admin_conf_lines) > 0 }
96207 - [ bash, - lc, " /usr/local/bin/nvidia-conf-check.sh >> /var/log/nvidia-conf-check.log 2>&1" ]
97208% { endif }
209+ % { if local_nvme_enabled }
210+ - [ bash, - lc, " /usr/local/sbin/prepare-disks.sh ${ local_nvme_mount_path } > /var/log/prepare-disks.log 2>&1" ]
211+ % { endif }
212+ % { endif }
0 commit comments