Last active
November 2, 2021 17:04
-
-
Save davlgd/cab2506b82c9825ddc05e3cb43fc87f7 to your computer and use it in GitHub Desktop.
NVMe/TCP Target Creator
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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