Aktualisieren des iSCSI Target Inhaltes

E.o.B

Lt. Junior Grade
Registriert
Juli 2012
Beiträge
490
Hallo,

ich habe eine Frage zu der Verwendung von iSCSI.

tldr:
Wenn ich auf dem iSCSI-Server etwas an dem iSCSI-Target ändere, z.B. Größe oder ein Snapshot zurückspiele, wie kann ich das dem iSCSI-Client klar machen ohne alles zu rebooten?

Zum Aufbau in Detail:
Zum einen habe ich einen Server (Testaufbau):
  • OS: Debian 11 LTS
  • mit RaidZ1:
    Code:
    $ zfs listNAME USED AVAIL REFER MOUNTPOINT
    naspool       2.15G  13.0G     30.6K  /naspool
    naspool/vol1 2.14G 15.1G 82.4M -
  • mit: installiertem "tgt" Paket

Das iSCSI Target wurde wie folgt angelegt:
Code:
server$ tgtadm --lld iscsi --op new --mode target --tid 1 --targetname ign.2022-09.local.test.server:naspool.vol1
server$ tgtadm --lld iscsi --op new --mode logicalunit --tid 1 --lun 1 --backing-store /dev/naspool/vol1
server$ tgtadm --lld iscsi --op new --mode account --user ServerUser --password myawesomepassword
server$ tgtadm --lld iscsi --op bind --mode account --tid 1 --user ServerUser

# Dise Konfiguration wurde dann exportiert + anpassung des Kennwortes in der conf-Datei
Code:
server$ tgt-admin --dump | sudo tee /etc/tgt/targets.conf
server$ nano /etc/tgt/targets.conf
...

Der iSCSI Client wurde wie folgt eingerichtet:
  • OS: Debian 11 LTS
Code:
# Installation von open-iSCSI
client$ apt install open-iscsi

# Targets finden:
client$ iscsiadm --mode discovery --type sendtargets --portal <IP_DES_SERVERS>

# Target einbinde
client$ iscsiadm --mode node --targetname ign.2022-09.local.test.server:naspool.vol1 --op update --name node.session.auth.authmethod --value CHAP
client$ iscsiadm --mode node --targetname ign.2022-09.local.test.server:naspool.vol1 --op update --name node.session.auth.username --value ServerUser
client$ iscsiadm --mode node --targetname ign.2022-09.local.test.server:naspool.vol1 --op update --name node.session.auth.password --value myawesomepassword
client$ iscsiadm --mode node --targetname ign.2022-09.local.test.server:naspool.vol1 --login
client$ iscsiadm --mode node --targetname ign.2022-09.local.test.server:naspool.vol1 --op update --name node.startup --value automatic

Bisher alles gut und funktioniert, das iSCSI-Target wird als neues Blockdevice unter /dev/sdb aufgelistet und ich kann damit wie mit einer lokalen Platte arbeiten.
Partiton anlegen, formatieren, mounten und Daten aufspielen, usw.
Code:
client$ lsblk
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda      8:0    0   32G  0 disk
├─sda1   8:1    0   31G  0 part /
├─sda2   8:2    0    1K  0 part
└─sda5   8:5    0  975M  0 part [SWAP]
sdb      8:16   0    2G  0 disk
└─sdb1   8:17   0    2G  0 part /mnt

client$ tree /mnt
/mnt
├── lost+found
└── tst
    └── test

Nun mache ich folgendes.
Auf dem Server erzeuge ich per zfs ein snapshot vom naspool/vol1.
Code:
server$ zfs snapshot naspool/vol1@snap_1

Dann ändere ich auf dem Client den inhalt des iSCSI mounts, also z.b. lege eine Datei "x" an.
Code:
client$ tree /mnt
/mnt
├── lost+found
└── tst
    ├── test
    └── x

Dann spiele ich den erzeugten snapshot auf dem Server zurück.
Code:
server$ zfs rollback -Rfr naspool/vol1@snap_1

Jetzt ist die Erwartungshaltung, dass ich auf dem Client für den iSCSI mount folgenden Inhalt sehen.
Code:
client$ tree /mnt
/mnt
├── lost+found
└── tst
    └── test

Zu diesem Zeitpunkt sind aber noch der Stand nach dem Snapshot dort zu sehen.
Code:
client$ tree /mnt
/mnt
├── lost+found
└── tst
    ├── test
    └── x

Auch nach einen rescan der Targets ist der Inhalt unverändert.
Code:
client$ iscsiadm -m node --rescan

client$ tree /mnt
/mnt
├── lost+found
└── tst
    ├── test
    └── x

Erst wenn ich beide Systeme Client und Server zeitgleich neu starte hab eich den erwarten Inhalt auf dem iSCSI mount, also den Stand, der im snapshot enthalten ist, ohne der Datei "x".

Wie kann ich das ohne Neustart der Rechner aktualisieren?

Gruß und Danke
 
Daemon "iscsid" neustarten (restart) reicht.

systemctl restart iscsid.service
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: E.o.B
Hallo,
danke für die Antwort.

Das habe ich ausprobiert und festgestellt, das reicht leider nicht (ganz). Deine Antwort hat mich aber in die richtige Richtung geschuppst.

Das Vorgehen, was zum Erfolg führt, ist jetzt wie folgt:

Auf dem Server:
1. Das Volume vom iSCSI-Target entfernen, vermutlich funktioniert sonst das Rollback nicht richtig.
Code:
root@server$ tgtadm --lld iscsi --op delete --mode logicalunit --tid 1 --lun 1
2. Das Rollback durchführen:
Code:
root@server$ zfs rollback -Rfr naspool/vol1@snap_1
3. Das Volume wieder dem iSCSI-Target hinzufügen
Code:
root@server$ tgtadm --lld iscsi --op new --mode logicalunit --tid 1 --lun 1 --backing-store /dev/naspool/vol1

Auf dem Client:
1. Alle mounts des iSCSI Blockdevice entfernen
Code:
root@client$ umount /mnt
2. Den iscsid.service neu starten
Code:
root@client$ systemctl restart iscsid.service
3. Alles wieder mounten
Code:
root@client$ mount /dev/sdb1 /mnt/

Danke, Gruß
Peter
 
Zuletzt bearbeitet: (typos)
  • Gefällt mir
Reaktionen: AlCiD
Zurück
Oben