#!/usr/bin/env bash # This script sets up an ext4 partition on an EC2 storage-optimized instance's instance store volume. # Unix permission/ownership is set to the calling user (the script does sudo internally.) # # It's intentionally not idempotent; don't take on that complexity in a bash script. set -euo pipefail set -x # This seems crude, but, apparently instance store NVMe volumes aren't exposed in the in instance metadata block-device-mapping. # https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/block-device-mapping-concepts.html#bdm-instance-metadata if [ "$(cat /sys/class/block/nvme1n1/device/model)" != "Amazon EC2 NVMe Instance Storage " ]; then echo "nvme1n1 is not Amazon EC2 NVMe Instance Storage: '$(cat /sys/class/block/nvme1n1/device/model)'" exit 1 fi # NB: we DO NOT warm up all the blocks on the drive as recommended by https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/disk-performance.html # The reason is that we don't do that in production either. # do all the on-disk initialization work now instead of a background kernel thread # so that we're ready for benchmarking right after this line sudo mkfs.ext4 -E lazy_itable_init=0,lazy_journal_init=0 /dev/nvme1n1 MOUNTPOINT=/instance_store sudo mkdir "$MOUNTPOINT" sudo mount /dev/nvme1n1 "$MOUNTPOINT" sudo chown -R "$(id -u)":"$(id -g)" "$MOUNTPOINT" TEST_OUTPUT="$MOUNTPOINT/test_output" mkdir "$TEST_OUTPUT" NEON_REPO_DIR="$MOUNTPOINT/repo_dir" mkdir "$NEON_REPO_DIR" cat <