\documentclass{report}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{textcomp}
\usepackage{geometry}
\geometry{top=15mm, bottom=15mm, left=1cm, right=1cm}
\usepackage[french]{babel}
\usepackage{pslatex}
\usepackage[colorlinks=true,urlcolor=black]{hyperref}
\usepackage{graphicx}
\usepackage{fancyhdr}
\pagestyle{fancy}
\renewcommand{\footrulewidth}{0.4pt}
\fancyfoot[L]{Uubu.fr}
\fancyfoot[R]{jeu. déc. 8 13:26:24 CET 2016}
\lfoot{\Large \textit{Uubu.fr}}
\hypersetup{pdfinfo={
Title={tgtadm},
Author={Sylvain Girod},
Creator={Bash script from uubu.fr's format version 1},
Producer={Bash script and PDFLaTeX},
Subject={Utilitaire d'administration de target SCSI},
CreationDate={D:20161208132624},
ModDate={D:20161208132624},
Keywords={iSCSI;storages}
}}
\begin{document}
 
\begin{center}
{\Huge tgtadm }
\end{center}
\vspace{1cm}
 
\begin{flushleft}
 
{\large Utilitaire d'administration de target SCSI}
 
\vspace{10mm}
 
\vspace{1cm}{\huge OPTIONS }
 
\
 
\begin{description} \normalsize
\item[\hspace{1mm} -C, --control-port <port>]{Port de connexion à tgtd}
\item[\hspace{1mm} -v, --blocksize <size>]{Spécifie la taille de block sur laquelle opérer}
\item[\hspace{1mm} -Y, --device-type <type>]{En créant un LUN, spécifie le type de périphérique à créer. Défaut: disk}
\end{description}
 
\begin{description} \normalsize
\item[\hspace{6mm} disk]{Émule un périphérique disque}
\item[\hspace{6mm} tape]{Émule un lecteur cassette}
\item[\hspace{6mm} ssc]{alias de tape}
\item[\hspace{6mm} changer]{Émule un périphérique changeur}
\item[\hspace{6mm} pt]{type passthrough pour exporter un périphérique /dev/sg}
\end{description}
 
\begin{description} \normalsize
\item[\hspace{1mm} -E, --bstype <type>]{En créant un LUN, spécifie le type de stockage à utiliser:}
\end{description}
 
\begin{description} \normalsize
\item[\hspace{6mm} rdwr]{Utiliser l'E/S normal.}
\item[\hspace{6mm} aio]{Mode E/S asynchrone}
\item[\hspace{6mm} rbd]{Utilise un périphérique block RADOS Ceph}
\item[\hspace{6mm} sg]{type spécial pour les périphériques passthrough}
\item[\hspace{6mm} ssc]{Type spécial pour l'émulation tape}
\end{description}
 
\begin{description} \normalsize
\item[\hspace{1mm} --lld <driver> --op new --mode target --tid <id> --targetname <name>]{ajoute un nouveau target}
\item[\hspace{1mm} --lld <driver> --op delete --mode target --tid <id>]{Supprime le target <id>.}
\item[\hspace{1mm} --lld <driver> --op delete --force --mode target --tid <id>]{Force la suppression du target <id>}
\item[\hspace{1mm} --lld <driver> --op show --mode target]{Affiche toutes les target}
\item[\hspace{1mm} --lld <driver> --op show --mode target --tid <id>]{Affiche les paramètres du target <id>}
\item[\hspace{1mm} --lld <driver> --op new --mode logicalunit --tid <id> --lun <lun> --backing-store <path> --bsopts=<backing store options>]{Ajoute un lun au target <id>. <path> doit être des périphériques block ou des fichiers ou une image RBD. lun0 est réservé par un périphérique spécial automatiquement créé}
\item[\hspace{1mm} --lld <driver> --op delete --mode logicalunit --tid <id> --lun <lun>]{Supprime le LUN qu'un target <id> possède}
\item[\hspace{1mm} --lld <driver> --op bind --mode target --tid <id> --initiator-address <address>]{Ajoute l'adresse à la liste d'accès au target <id>. Les initiators avec l'adresse peuvent accéder au target. ALL autorise l'accès à tous les initiators}
\item[\hspace{1mm} --lld <driver> --op bind --mode target --tid <id> --initiator-name <name>]{Ajoute le nom de l'initiator à la liste d'accès du target <id>. Les initiators avec ces noms peuvent y accéder}
\item[\hspace{1mm} --lld <driver> --op unbind --mode target --tid <id> --initiator-address <address>]{Supprime l'adresse d'une liste d'accès du target}
\item[\hspace{1mm} --lld <driver> --op unbind --mode target --tid <id> --initiator-name <name>]{Supprime le nom de l'initiator de la liste d'accès du target}
\item[\hspace{1mm} --lld <driver> --op update --mode target --tid <id> --name=<parameter> --value=<value>]{Définis/change la valeur d'un ou plusieurs paramètres de target}
\item[\hspace{1mm} --lld <driver> --op update --mode logicalunit --tid <id> --lun <id> --params parameter=value<,...>]{Définis/change la valeur d'un ou plusieurs paramètres LUN}
\item[\hspace{1mm} --lld <driver> --op start --mode lld]{Démarre le lld spécifié sans redémarrer le processus tgtd.}
\end{description}
 
\vspace{1cm}{\huge Paramètres LUN }
 
\
 
\hspace{1mm}  Ces paramètres sont seulement applicables avec "--mode logicalunit"
\vspace{5mm} \\
 
 
\begin{description} \normalsize
\item[\hspace{1mm} vendor\_id=<string>]{Définis le Vendor Identification reporté par un LUN dans une donnée INQURY}
\item[\hspace{1mm} product\_id=<string>]{Définis le Product Identification reporté par un LUN dans une donnée INQURY}
\item[\hspace{1mm} product\_rev=<string>]{Définis le Product Revision reporté par un LUN dans une donnée INQURY}
\item[\hspace{1mm} removable=< 0|1 >]{Peut être utilisé pour changer le paramètre par défaut pour le flag removable.}
\item[\hspace{1mm} sense\_format=< 0|1 >]{Contrôle le format du sens des données que le périphérique retourne. 0 = classique, 1 = descripteur Support}
\item[\hspace{1mm} online=< 0|1 >]{Contrôle si le périphérique est en ligne ou non}
\item[\hspace{1mm} mode\_page=<byte-string>]{Définis les pages de mode spécifique pour le périphérique et le contenu de page de mode.}
\item[\hspace{1mm} readonly=< 0|1 >]{Définis le flag read-only d'un LUN}
\item[\hspace{1mm} thin\_provisioning=< 0|1 >]{Contrôle le provisionning pour le LUN. Ne s'applique qu'aux périphérique disk. Uniquement pour les LUN stockés dans des systèmes de fichier qui supportent FALLOC\_FL\_PUNCH\_HOLE}
\end{description}
 
\vspace{1cm}{\huge Paramètres LUN SMC }
 
\
 
\hspace{1mm}  Ces paramètres ne s'appliquent qu'aux lun qui sont de type "changer".
\vspace{5mm} \\
 
 
\begin{description} \normalsize
\item[\hspace{1mm} element\_type=< 1|2|3|4 >]{Contrôle le type d'élément d'un slot dans le jukebox/vtl.}
\end{description}
 
\begin{description} \normalsize
\item[\hspace{6mm} 1]{Medium Transport}
\item[\hspace{6mm} 2]{Storage Element}
\item[\hspace{6mm} 3]{Import/Export Element}
\item[\hspace{6mm} 4]{Data Transfer device (CD drive, tape drive, MO drive etc)}
\end{description}
 
\begin{description} \normalsize
\item[\hspace{1mm} address=< 1-65535 >]{Utilisé pour créer/opérer sur un slot particulier}
\item[\hspace{1mm} start\_address=< 1-65535 >,quantity=< 1--65535 >]{Utilisé pour créer/opérer sur une plage de slots.}
\item[\hspace{1mm} sides=< 1|2 >]{Spécifie si le média a 1 ou 2 faces pour maintenir les données.}
\item[\hspace{1mm} clear\_slot=< 1 >]{Effacer un élément de stockage et supprimer tout média présent. Une fois terminé, le stockage est marqué vide.}
\item[\hspace{1mm} barcode=<string>]{Utilisé pour assigner un code barre à un élément. max 10 caractères}
\item[\hspace{1mm} volume\_tag=<string>]{Permet d'assigner un tag à un volume. max 32 caractères}
\item[\hspace{1mm} media\_home=<string>]{Spécifie un répertoire où le média virtuel pour les éléments périphérique dvd/tape sont stockés}
\end{description}
 
\vspace{1cm}{\huge Périphériques passthrough }
 
\
 
\hspace{1mm}  En plus de l'émulation de périphérique TGTD supporte également d'utilisation de périphériques sg sur l'hôte et l'export via un type de périphérique spécial passthrough
\vspace{5mm} \\
 
 
\begin{description} \normalsize
\item[\hspace{1mm} --bstype=sg]{Spécifie qu'un périphérique SG est utilisé}
\item[\hspace{1mm} --device-type=pt]{Spécifie que le type passthrough est utilisé}
\item[\hspace{1mm} --backing-store=</dev/sg4>]{Spécifie quel périphérique exporter via TGTD}
\item[\hspace{1mm} --bsoflags=\{direct|sync\}]{Spécifie des flags supplémentaire lors de la création d'un LUN à utiliser en ouvrant le fichier. O\_DIRECT est spécifié par 'direct' et 0\_SYNC par 'sync'}
\end{description}
 
\vspace{1cm}{\huge Hash d'en-tête et de données }
 
\
 
\hspace{1mm}  Les hash d'en-tête ed de donées peuvent être définis dans un paramètre par target. TGTD supporte 2 modes. None et CRC32C. Quand le hash est à None, tgtd négocie pour ne pas utiliser les hash, et quand CRC32C est définis, tgtd force la connection à utiliser un hash
\vspace{5mm} \\
 
 
\hspace{1mm} Pour voir les paramètres courant pour le hashage \\
\hspace{1mm} \textbf{tgtadm --op show --mode target --tid 1} \\
\hspace{1mm} Pour définis le hash d'en-tête à CRC32C \\
\hspace{1mm} \textbf{tgtadm --op update --mode target --tid 1 -n HeaderDigest -v CRC32C} \\
\hspace{1mm} Pour le désactiver pour les données \\
\hspace{1mm} \textbf{tgtadm --op update --mode target --tid 1 -n DataDigest -v None} \\
 
\vspace{1cm}{\huge Authentification CHAP }
 
\
 
\hspace{1mm}  L'authentification CHAP est supportée pour exiger une authentification avant qu'un initiator soit autorisé à se logger et accéder aux périphériques. La passphrase est définie au niveau target. Pour créer une authentification CHAP, il faut créer un compte avec son mot de passe, puis lier le compte à un ou plusieurs target
\vspace{5mm} \\
 
 
\hspace{1mm} Créer un utilisateur et le lier au target 1 \\
\hspace{1mm} \textbf{tgtadm --lld iscsi --op new --mode account --user ronnie --password password} \\
\hspace{1mm} \textbf{tgtadm --lld iscsi --op bind --mode account --tid 1 --user ronnie} \\
\hspace{1mm} Lister tous les comptes qui ont été créés \\
\hspace{1mm} \textbf{tgtadm --lld iscsi --op show --mode account} \\
\hspace{1mm} Aficher si un target nécessite une authentification \\
\hspace{1mm} \textbf{tgtadm --lld iscsi --op show --mode target} \\
 
\vspace{1cm}{\huge Sondes NOP-OUT }
 
\
 
\hspace{1mm}  tgtd peut envoyer des sondes NOP-OUT aux initiateurs connectés pour déterminer quand un initiateur est mort et quand stopper la connexion TCP. Cela peut être définis au niveau global ou par target.
\vspace{5mm} \\
 
 
\hspace{1mm} Afficher les paramètres NOP-OUT \\
\hspace{1mm} \textbf{tgtadm --lld iscsi --op show --mode target} \\
\hspace{1mm} Définis NOP-OUT pour un target \\
\hspace{1mm} \textbf{tgtadm --op update --mode target --tid 1 -n nop\_count -v 5} \\
\hspace{1mm} \textbf{tgtadm --op update --mode target --tid 1 -n nop\_interval -v 5} \\
 
\vspace{1cm}{\huge Portails iSCSI }
 
\
 
\hspace{1mm}  Les portails iSCSI peuvent être listés, ajoutés ou supprimés
\vspace{5mm} \\
 
 
\hspace{1mm} Lister les portails définis sur le target \\
\hspace{1mm} \textbf{tgtadm --lld iscsi --op show --mode portal} \\
\hspace{1mm} Ajouter un portail \\
\hspace{1mm} \textbf{tgtadm --lld iscsi --op new --mode portal --param portal=10.1.1.101:3260} \\
\hspace{1mm} Supprimer un portail \\
\hspace{1mm} \textbf{tgtadm --lld iscsi --op delete --mode portal --param portal=10.1.1.101:3260} \\
 
\vspace{1cm}{\huge Connexions iSCSI }
 
\
 
\hspace{1mm}  Les connexions iSCSI peuvent être listées et fermées de force en temps réel
\vspace{5mm} \\
 
 
\hspace{1mm} Lister toutes les connexions actives pour un target \\
\hspace{1mm} \textbf{tgtadm --lld iscsi --op show --mode conn --tid 1} \\
\hspace{1mm} Fermer une connexion existante \\
\hspace{1mm} \textbf{tgtadm --lld iscsi --op delete --mode conn --tid 1 --sid 2 --cid 0} \\
 
\vspace{1cm}{\huge Status online/offline }
 
\
 
\hspace{1mm}  Les LUN tgtd peuvent être online ou offline. Les LUN qui sont offline peut se comporter différemment d'un type de périphérique à l'autre. Les périphériques offline se comportent comme si aucun média n'était disponible et toute opération d'accès au média échoue avec une erreur. Les périphériques ne peuvent pas être mis en mode offline s'il y a des locks "PREVENT ALLOW MEDIUM REMOVAL" dans le périphérique. Similairement les média online ne peuvent pas être ejectés par logiciel quand de tels locks sont présent dans le périphérique.
\vspace{5mm} \\
 
 
\hspace{1mm} Afficher le status \\
\hspace{1mm} \textbf{tgtadm --lld iscsi --mode target --op show} \\
\hspace{1mm} Changer un LUN en offline \\
\hspace{1mm} \textbf{tgtadm --tid 1 --lun 2 --op update --mode logicalunit -P Online=No} \\
 
\vspace{1cm}{\huge Paramètres iSNS }
 
\
 
\hspace{1mm}  La configuration iSNS pour un target se fait via tgtadm
\vspace{5mm} \\
 
 
\hspace{1mm} Définis l'adresse du serveur iSNS. tgtd ne supporte qu'un serveur iSNS \\
\hspace{1mm} \textbf{tgtadm --op update --mode sys --name iSNSServerIP --value 192.168.11.133} \\
\hspace{1mm} Active/désactive iSNS \\
\hspace{1mm} \textbf{tgtadm --op update --mode sys --name iSNS --value On} \\
\hspace{1mm} Port à utiliser pour iSNS \\
\hspace{1mm} \textbf{tgtadm --op update --mode sys --name iSNSServerPort --value 3205} \\
\hspace{1mm} Active/désactiver le contrôle d'accès pour iSNS \\
\hspace{1mm} \textbf{tgtadm --op update --mode sys --name iSNSAccessControl --value Off} \\
 
\vspace{1cm}{\huge Exemple de création d'un jukebox DVD }
 
\
 
\hspace{1mm} Créer un jukebox DVD avec 8 tiroirs, et 2 DVD-R vides. Créer un target \\
\hspace{1mm} \textbf{tgtadm --lld iscsi --mode target --op new --tid 1 --targetname iqn.2007-03:virtual-dvd:`hostname`} \\
\hspace{1mm} Créer un lecteur DVD et lui donner un nom. Le dvd démarre sans fichier de stockage \\
\hspace{1mm} \textbf{tgtadm --op new --mode logicalunit --tid 1 --lun 1 --device-type cd} \\
\hspace{1mm} \textbf{tgtadm --lld iscsi --mode logicalunit --op update --tid 1 --lun 1 --params vendor\_id=STGT\_DVD,product\_id=DVD101,product\_rev=0010,scsi\_sn=STGTDVD01,removable=1} \\
\hspace{1mm} Il faut un fichier de stockage backend pour le changeur: \\
\hspace{1mm} \textbf{if [ ! -f \$HOME/smc ]; then dd if=/dev/zero of=\$HOME/smc bs=1k count=1; fi} \\
\hspace{1mm} Créer le périphérique SMC et lui donner un nom: \\
\hspace{1mm} \textbf{tgtadm --lld iscsi --mode logicalunit --op new --tid 1 --lun 2 --backing-store \$HOME/smc --device-type changer} \\
\hspace{1mm} \textbf{tgtadm --lld iscsi --mode logicalunit --op update --tid 1 --lun 2 --params vendor\_id=STK,product\_id=L700,product\_rev=0010,scsi\_sn=XYZZY\_0,removable=1} \\
\hspace{1mm} Ajouter un périphérique de transfert de donnnées: \\
\hspace{1mm} \textbf{tgtadm --lld iscsi --mode logicalunit --op update --tid 1 --lun 2 --params element\_type=4,start\_address=1,quantity=1} \\
\hspace{1mm} Spécifier que le DVD (LUN 1) est le périphérique de transfert de données à créer \\
\hspace{1mm} \textbf{tgtadm --lld iscsi --mode logicalunit --op update --tid 1 --lun 2 --params element\_type=4,address=1,tid=1,lun=1} \\
\hspace{1mm} Medium Transport Elements \\
\hspace{1mm} \textbf{tgtadm --lld iscsi --mode logicalunit --op update --tid 1 --lun 2 --params element\_type=1,start\_address=16,quantity=1} \\
\hspace{1mm} Définir le chemin du média virtuel \\
\hspace{1mm} \textbf{VTL=\$\{HOME\}/vtl} \\
\hspace{1mm} \textbf{mkdir -p \$\{VTL\}} \\
\hspace{1mm} \textbf{tgtadm --lld iscsi --mode logicalunit --op update --tid 1 --lun 2 --params media\_home=\$\{VTL\}} \\
\hspace{1mm} Éléments de stockages - 8 commençant à l'adresse 1024 \\
\hspace{1mm} \textbf{tgtadm --lld iscsi --mode logicalunit --op update --tid 1 --lun 2 --params element\_type=2,start\_address=1024,quantity=8} \\
\hspace{1mm} Ajouter 'media' au slots 1 et 2 et laisser les autres vides \\
\hspace{1mm} \textbf{tgtimg --op new --device-type cd --type dvd+r --file \$\{VTL\}/DISK\_001} \\
\hspace{1mm} \textbf{tgtadm --lld iscsi --mode logicalunit --op update --tid 1 --lun 2 --params element\_type=2,address=1024,barcode=DISK\_001,volume\_tag="A blank disk",sides=1} \\
\hspace{1mm} Et pour le slot 2: \\
\hspace{1mm} \textbf{tgtimg --op new --device-type cd --type dvd+r --file \$\{VTL\}/DISK\_002} \\
\hspace{1mm} \textbf{tgtadm --lld iscsi --mode logicalunit --op update --tid 1 --lun 2 --params element\_type=2,address=1025,barcode=DISK\_002,volume\_tag="My second blank disk",sides=1} \\
\hspace{1mm} Permettre à tous les initiateurs de se connecter à ce target: \\
\hspace{1mm} \textbf{tgtadm --lld iscsi --mode target --op bind --tid 1 --initiator-address ALL} \\
\hspace{1mm} Afficher le résultat \\
\hspace{1mm} \textbf{tgtadm --lld iscsi --mode target --op show} \\
\end{flushleft}
\end{document}
