@@ -247,6 +247,50 @@ cleanSwap() {
247247 free -h
248248}
249249
250+ # Try to find a different drive to put our data on so we don't need to run cleanup.
251+ # The availability of the disks we're probing isn't guaranteed,
252+ # so this is opportunistic.
253+ checkAlternative () {
254+ local mountpoint=" /mnt"
255+
256+ # we need ~50GB of space
257+ local space_target_kb=$(( 50 * 1024 * 1024 ))
258+ local available_space_kb=$( df -k " $mountpoint " --output=avail | tail -n 1)
259+
260+ # ignore-tidy-linelength
261+ local mntopts=" defaults,discard,journal_async_commit,barrier=0,noauto_da_alloc,lazytime,data=writeback"
262+
263+ # GHA has a 2nd disk mounted at /mnt that is almost empty
264+ if mountpoint /mnt && [ " $available_space_kb " -ge " $space_target_kb " ]; then
265+ local blkdev=$( df -k " $mountpoint " --output=source | tail -n 1)
266+ echo " Sufficient space available on $blkdev mounted at $mountpoint "
267+ sudo swapoff -a || true
268+ mkdir ./obj
269+ # remount with O_EATMYDATA while we're at it
270+ sudo umount /mnt
271+ sudo mount $blkdev ./obj -o $mntopts || sudo dmesg | tail -n 20
272+ sudo chown -R " $USER " :" $USER " ./obj
273+
274+ exit 0
275+ fi
276+
277+ # ephemeral NVMe drives on AWS
278+ for dev in /dev/nvme* n1; do
279+ if [ -b " $dev " ] && [ " $( mount | grep " $dev " | wc -l) " -eq 0 ]; then
280+ echo " Found unused block device $dev , creating filesystem"
281+ sudo mkfs.ext4 -E lazy_itable_init=1,lazy_journal_init=1 " $dev "
282+ mkdir ./obj
283+ sudo mount " $dev " ./obj -o $mntopts
284+ sudo chown -R " $USER " :" $USER " ./obj
285+
286+ exit 0
287+ fi
288+ done
289+ }
290+
291+
292+ checkAlternative
293+
250294# Display initial disk space stats
251295
252296AVAILABLE_INITIAL=$( getAvailableSpace)
0 commit comments