Skip to content

Instantly share code, notes, and snippets.

@davlgd
Last active November 2, 2021 17:04
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save davlgd/cab2506b82c9825ddc05e3cb43fc87f7 to your computer and use it in GitHub Desktop.
Save davlgd/cab2506b82c9825ddc05e3cb43fc87f7 to your computer and use it in GitHub Desktop.
NVMe/TCP Target Creator
#!/bin/bash
# On affiche les informations sur les modules NVMe
clear
echo
echo "Module NVME_TARGET de votre noyau :"
echo "==================================="
echo
cat /boot/config-`uname -r` | grep NVME_TARGET
echo
echo "Les lignes suivantes doivent être présentes :"
echo "============================================="
echo
echo " * CONFIG_NVME_TARGET=m"
echo " * CONFIG_NVME_TARGET_TCP=m"
echo
echo "Si ce n'est pas le cas, quittez la procédure (CTRL+C)"
echo
read -p "Appuyez sur une touche pour continuer..."
# Si nécessaire, on installe l'outil de gestion NVMe
dpkg -s nvme-cli > /dev/null 2>&1 || (sudo apt update && sudo apt full-upgrade)
# Tant que l utilisateur n a pas décidé d une action correcte, on l interroge
while [[ $ACTION != @(C|c|M|m) ]]
do
# On peut déclarer les valeurs utiles par avance
# IP=192.168.0.41
# DEVICE =/dev/nvme0n1
# NQN=nvme-target
# On affiche la liste des périphériques NVMe si aucun n'a été défini
clear
[ -z "$DEVICE" ] && sudo nvme list
# On questionne l'utilisateur si des variables manquent
echo
[ -z "$DEVICE" ] && read -p "Périphérique ? (/dev/nvme0n0) " DEVICE
[ -z "$IP" ] && read -p "Adresse IP ? " IP
[ -z "$NQN" ] && read -p "NQN ? " NQN
read -p "Création ou Mise à jour du NQN ? (C/M) " ACTION
done
# Activation des modules du noyau
if [[ $ACTION =~ C|c ]]; then
sudo modprobe nvmet
sudo modprobe nvmet-tcp
fi
# Création du NQN, toutes connexions autorisées
cd /sys/kernel/config/nvmet/subsystems
[ ! -d $NQN ] && sudo mkdir $NQN
cd $NQN
echo 1 | sudo tee -a attr_allow_any_host > /dev/null
# Création et configuration de l'espace de noms
[ ! -d "namespaces/1" ] && sudo mkdir namespaces/1
cd namespaces/1
echo -n $DEVICE | sudo tee -a device_path > /dev/null
echo 1| sudo tee -a enable > /dev/null
if [[ $ACTION =~ C|c ]]; then
# Création et configuration du port
[ ! -d "/sys/kernel/config/nvmet/ports/1" ] && sudo mkdir /sys/kernel/config/nvmet/ports/1
cd /sys/kernel/config/nvmet/ports/1
echo $IP | sudo tee -a addr_traddr > /dev/null
echo tcp | sudo tee -a addr_trtype > /dev/null
echo 4420 | sudo tee -a addr_trsvcid > /dev/null
echo ipv4 | sudo tee -a addr_adrfam > /dev/null
fi
# Création du lien entre le port et le NQN
sudo ln -s /sys/kernel/config/nvmet/subsystems/$NQN /sys/kernel/config/nvmet/ports/1/subsystems/$NQN
sudo dmesg | grep "nvmet_tcp"
exit 0
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment