So, mein Workaround ist fertig und im Einsatz. Folgendes Script changelunid liegt unter /root/ ab.
#!/bin/sh
IET_PROC=/proc/net/iet/volume
IET_PARAMS=/tmp/iet_params
change_lun_id()
{
while read -r TID NAME; do
if [ ! -e $TID ]; then
read LUN STATE IOTYPE IOMODE PATH
nLUN=`echo $LUN | /bin/sed s/[a-z]*://`
if [ $nLUN -eq 0 ]; then
nTID=`echo $TID | /bin/sed s/[a-z]*://`
nNAME=`echo $NAME | /bin/sed s/[a-z]*://`
nSTATE=`echo $STATE | /bin/sed s/[a-z]*://`
nIOTYPE=`echo $IOTYPE | /bin/sed s/[a-z]*://`
nIOMODE=`echo $IOMODE | /bin/sed s/[a-z]*://`
nPATH=`echo $PATH | /bin/sed s/[a-z]*://`
oLUN=$nLUN
nLUN=$nTID
/bin/cat >>$IET_PARAMS<<EOF
/sbin/ietadm --op delete --tid $nTID --lun $oLUN
/sbin/ietadm --op new --tid $nTID --lun $nLUN --params Path=$nPATH,Type=$nIOTYPE,IOMode=$nIOMODE
EOF
fi
fi
done
}
echo "#!/bin/sh" > $IET_PARAMS
change_lun_id < $IET_PROC
/bin/sh $IET_PARAMS
Alles anzeigen
Erläuterung
Es werden zunächst die aktuellen iSCSI Target Einstellungen aus /proc/net/iet/volume gelesen und umgebaut.
Um die LUN IDs eindeutig und ungleich null zu bekommen, setze ich sie als Workaround einfach mit der Target ID gleich. Anschließend wird ein Script /tmp/iet_params generiert, das bei seiner Ausführung mittels "ietadm" die bisherigen Targets neu baut, jedoch mit veränderten LUN IDs. Bereits abgeänderte Targets mit LUN ID ungleich null bleiben unverändert. Anschließend wird iet_params ausgeführt.
Wer ein wenig googelt, findet in der Mail eines QNAP Technikers den Hinweis, das QNAP wohl auch ietadm verwendet, um die Targets zu bauen. Daher findet sich auch nirgends eine ietd.conf im System (Ich habe zumindest keine auf meinem TS-639 ausfindig machen können). Hinderlich ist ein wenig, dass bei Änderungen an der iSCSI Konfiguration mittels Web-GUI ein GCI-Script aufgerufen wird, das wohl ebenso ietadm startet, um die Änderungen am Target vorzunehmen.
Das hat bei mir dann den Effekt, dass die betroffene LUN wieder mit ID 0 auftaucht. Also muss ich obiges Script kontinuierlich ausführen. Ab damit in die crontab und jede Minute kurz ausführen.
Ergebins
Habe den Mechanismus nun ein paar Stunden laufen und wie wild iSCSI Targets erzeugt und gelöscht, mit ESX nach den Volumes gescannt, VMs von einem Target in ein anderes migriert und bislang keine Probleme festgestellt. Damit kann ich zunächst mal leben. Nicht wirklich cool aber effektiv.
Für das nächste Firmware-Update wünsche ich mir dann doch bitte ein wenig mehr Einflussmöglichkeiten in die iSCSI Konfiguration des TS-639. Im direkten Vergleich zum Thecus NAS finde ich die iSCSI Konfiguraton unter QNAP doch deutlich "wilder", weil alles schön verborgen. Eigentlich schade!
Gruß Akki
PS: Für eventuelle Schäden am System, Verlust von Volumes oder Verlust von Daten wird keine Haftung übernommen. Wer Fehler im Script findet, möge bitte eine PN senden. Vielen lieben Dank.