@@ -247,6 +247,49 @@ 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+ local mntopts=" defaults,discard,journal_async_commit,barrier=0,noauto_da_alloc,lazytime,data=writeback"
261+
262+ # GHA has a 2nd disk mounted at /mnt that is almost empty
263+ if mountpoint /mnt && [ " $available_space_kb " -ge " $space_target_kb " ]; then
264+ local blkdev=$( df -k " $mountpoint " --output=source | tail -n 1)
265+ echo " Sufficient space available on $blkdev mounted at $mountpoint "
266+ sudo swapoff -a || true
267+ mkdir ./obj
268+ # remount with O_EATMYDATA while we're at it
269+ sudo umount /mnt
270+ sudo mount $blkdev ./obj -o $mntopts || sudo dmesg | tail -n 20
271+ sudo chown -R " $USER " :" $USER " ./obj
272+
273+ exit 0
274+ fi
275+
276+ # ephemeral NVMe drives on AWS
277+ for dev in /dev/nvme* n1; do
278+ if [ -b " $dev " ] && [ " $( mount | grep " $dev " | wc -l) " -eq 0 ]; then
279+ echo " Found unused block device $dev , creating filesystem"
280+ sudo mkfs.ext4 -E lazy_itable_init=1,lazy_journal_init=1 " $dev "
281+ mkdir ./obj
282+ sudo mount " $dev " ./obj -o $mntopts
283+ sudo chown -R " $USER " :" $USER " ./obj
284+
285+ exit 0
286+ fi
287+ done
288+ }
289+
290+
291+ checkAlternative
292+
250293# Display initial disk space stats
251294
252295AVAILABLE_INITIAL=$( getAvailableSpace)
0 commit comments