diff --git a/scripts/ps_ec2_setup_instance_store b/scripts/ps_ec2_setup_instance_store new file mode 100755 index 0000000000..00d37e5f83 --- /dev/null +++ b/scripts/ps_ec2_setup_instance_store @@ -0,0 +1,52 @@ +#!/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 <