Skip to content

Instantly share code, notes, and snippets.

@metaist
Created June 15, 2023 15:53
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save metaist/c727dc3946880c4d31de2b571801f534 to your computer and use it in GitHub Desktop.
Save metaist/c727dc3946880c4d31de2b571801f534 to your computer and use it in GitHub Desktop.
Add and format a non-boot disk
#!/usr/bin/env bash
MOUNT_DIR=/mnt/data
DEVICE_NAME=/dev/$(lsblk | grep disk | tail -n1 | awk '{print $1}')
VERSION="0.1.0"
USAGE="\
Usage: add-disk.sh [--help | --version]
[--mount DIR] [--dev DEVICE]
Options:
-h, --help show this message and exit
--version show version and exit
--mount DIR set mount dir [default: $MOUNT_DIR]
--dev DEVICE set device name [default: $DEVICE_NAME]
Example:
sudo ./add-disk.sh --mount /mnt/disks/data1 --dev /dev/sda
"
main() {
while [[ "$#" > 0 ]]; do
case ${1:-""} in
-h|--help) echo "$USAGE"; exit; break;;
--version) echo "$VERSION"; exit 0; break;;
--mount) MOUNT_DIR=${2:-""}; shift 2;;
--dev) DEVICE_NAME=${2:-""}; shift 2;;
*) printf "Unknown argument: $1\n$USAGE"; exit 1; break;;
esac
done
mkfs.ext4 -m 0 -E lazy_itable_init=0,lazy_journal_init=0,discard $DEVICE_NAME
mkdir -p $MOUNT_DIR
mount -o discard,defaults $DEVICE_NAME $MOUNT_DIR
chmod a+w $MOUNT_DIR
local DEVICE_UUID=$(blkid $DEVICE_NAME | awk -F'"' '{print $2}')
local dest=/etc/fstab
local line="UUID=$DEVICE_UUID $MOUNT_DIR ext4 discard,defaults,nofail 0 2"
grep -qsPe "^$line$" "$dest"
if [[ $? ]]; then
echo "already added to $dest"
else
tee --append $dest <<< "$line"
fi
cat $dest
}
main $@
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment