Einrichten eines iSCSI-Speicherservers unter Ubuntu 20.04 LTS

iSCSI steht für Internet Small Computer System Interface und ist ein Speicherbereichs-Netzwerkprotokoll, das zur gemeinsamen Nutzung von Blockgeräten wie HDD/SSD-Partitionen oder LVM-Partitionen oder Blockdateien im Netzwerk verwendet werden kann. iSCSI arbeitet in einem Client-Server-Modell und stützt sich auf TCP/IP-Netzwerke, um SCSI-Befehle zwischen dem Initiator-Client und dem Ziel zu senden. iSCSI Target ist ein Dienst auf einem iSCSI-Server, der Zugriff auf gemeinsam genutzten Speicher bietet, und iSCSI Initiator ist ein iSCSI-Client, der eine Verbindung zum Ziel herstellt und auf den gemeinsam genutzten Speicher zugreift.

In diesem Tutorial wird erklärt, wie Sie iSCSI-Ziele und iSCSI-Initiator auf einem Ubuntu 20.04-Server einrichten.

Anforderungen

  • Ein System mit Ubuntu 20.04 für iSCSI-Ziel mit 1 GB externer Festplatte.
  • Ein System mit frischem Ubuntu 20.04 für iSCSI-Initiator.
  • Eine statische IP-Adresse 192.168.1.10 wird auf dem iSCSI-Ziel und 192.168.1.20 auf dem iSCSI-Initiator konfiguriert.
  • Auf beiden Servern wird ein Root-Passwort konfiguriert.

Aktualisieren Sie das System

Bevor Sie beginnen, ist es eine gute Idee, Ihr System mit den neuesten Paketen zu aktualisieren. Sie können sie mit dem folgenden Befehl aktualisieren:

apt-get update -y
apt-get upgrade -y

Sobald alle Pakete aktualisiert sind, starten Sie Ihr System neu, um die Änderungen zu übernehmen.

iSCSI-Ziel installieren

Standardmäßig ist das iSCSI-Zielpaket im Standard-Repository von Ubuntu 20.04 verfügbar. Sie können es installieren, indem Sie den folgenden Befehl auf dem iSCSI-Zielserver ausführen: Führen Sie den folgenden Befehl auf dem iSCSI-Zielserver aus:

apt-get install tgt -y

Überprüfen Sie nach der Installation des iSCSI-Targets den Status des Servers mit dem folgenden Befehl:

systemctl status tgt

Sie sollten die folgende Ausgabe erhalten:

? tgt.service - (i)SCSI target daemon
     Loaded: loaded (/lib/systemd/system/tgt.service; enabled; vendor preset: enabled)
     Active: active (running) since Sat 2020-07-11 07:13:04 UTC; 23s ago
       Docs: man:tgtd(8)
   Main PID: 7770 (tgtd)
     Status: "Starting event loop..."
      Tasks: 1
     Memory: 1.1M
     CGroup: /system.slice/tgt.service
             ??7770 /usr/sbin/tgtd -f

Jul 11 07:13:04 ubuntu2004 systemd[1]: Starting (i)SCSI target daemon...
Jul 11 07:13:04 ubuntu2004 tgtd[7770]: tgtd: iser_ib_init(3431) Failed to initialize RDMA; load kernel modules?
Jul 11 07:13:04 ubuntu2004 tgtd[7770]: tgtd: work_timer_start(146) use timer_fd based scheduler
Jul 11 07:13:04 ubuntu2004 tgtd[7770]: tgtd: bs_init(387) use signalfd notification
Jul 11 07:13:04 ubuntu2004 systemd[1]: Started (i)SCSI target daemon.

Zu diesem Zeitpunkt ist das iSCSI Target in Ihrem Server installiert, Sie können nun mit dem nächsten Schritt fortfahren.

iSCSI-Ziel konfigurieren

Zuerst müssen Sie ein LUN-Gerät (Logical Unit Number) auf Ihrem iSCSI-Server erstellen. LUN ist ein Backend-Speichergerät, das Teil eines physischen SCSI-Geräts ist. Alle LUNs, die dem iSCSI-Ziel zugeordnet sind, sind virtuell an das Betriebssystem des Clients angeschlossen. Daher können Initiatoren Dateisysteme auf iSCSI-LUNs einrichten und verwalten.

Sie können es konfigurieren, indem Sie eine neue Konfigurationsdatei erstellen:

nano /etc/tgt/conf.d/iscsi.conf

Fügen Sie die folgenden Zeilen hinzu:

<target iqn.2020-07.example.com:lun1>
     backing-store /dev/sdb
     initiator-address 192.168.1.20
    incominguser iscsi-user password
     outgoinguser iscsi-target secretpass
</target>

Speichern und schließen Sie die Datei, wenn Sie fertig sind.

Wo:

  • Die erste Zeile definiert den Namen des LUN.
  • Die zweite Zeile definiert den Speicherort und den Namen des Speichergeräts auf dem iSCSI-Zielserver.
  • Die dritte Zeile definiert die IP-Adresse des iSCSI-Initiators.
  • Die vierte Zeile definiert den eingehenden Benutzernamen/Passwort.
  • In der fünften Zeile wird der Benutzername/das Passwort definiert, das das Target dem Initiator zur Verfügung stellt, damit eine gegenseitige CHAP-Authentifizierung stattfinden kann.

Starten Sie als nächstes den iSCSI-Dienst neu, um die Änderungen zu übernehmen:

systemctl restart tgt

Überprüfen Sie dann den iSCSI-Zielserver mit dem folgenden Befehl:

tgtadm --mode target --op show

Sie sollten die folgende Ausgabe erhalten:

Target 1: iqn.2020-07.example.com:lun1
    System information:
        Driver: iscsi
        State: ready
    I_T nexus information:
    LUN information:
        LUN: 0
            Type: controller
            SCSI ID: IET     00010000
            SCSI SN: beaf10
            Size: 0 MB, Block size: 1
            Online: Yes
            Removable media: No
            Prevent removal: No
            Readonly: No
            SWP: No
            Thin-provisioning: No
            Backing store type: null
            Backing store path: None
            Backing store flags: 
    Account information:
        iscsi-user
        iscsi-target (outgoing)
    ACL information:
        192.168.1.10

An diesem Punkt wird der iSCSI-Zielserver installiert und konfiguriert. Jetzt können Sie mit dem nächsten Schritt fortfahren.

iSCSI-Initiator installieren und konfigurieren

Gehen Sie dann zum iSCSI-Initiator-Rechner und installieren Sie das iSCSI-Initiator-Paket mit dem folgenden Befehl:

apt-get install open-iscsi -y

Wenn die Installation abgeschlossen ist, ermitteln Sie den iSCSI-Zielserver, um die gemeinsam genutzten Ziele mit dem folgenden Befehl herauszufinden:

iscsiadm -m discovery -t st -p 192.168.1.10

Sie sollten die folgende Ausgabe sehen:

192.168.1.10:3260,1 iqn.2020-07.example.com:lun1

Als nächstes müssen Sie den Namen des LUN-Geräts in der Datei initiatorname.iscsi definieren:

nano /etc/iscsi/initiatorname.iscsi

Fügen Sie Ihren iSCSI-Target-LUN-Namen wie unten gezeigt hinzu:

InitiatorName=iqn.2020-07.example.com:lun1

Speichern und schließen Sie die Datei, wenn Sie fertig sind.

Als Nächstes müssen Sie die CHAP-Informationen definieren, die Sie auf dem iSCSI-Ziel konfiguriert haben, um vom iSCSI-Initiator aus auf das iSCSI-Ziel zuzugreifen. Die Knotenkonfigurationsdatei wird im Verzeichnis ‚/etc/iscsi/nodes/‘ vorhanden sein und ein Verzeichnis pro LUN zur Verfügung haben.

Sie können es definieren, indem Sie die folgende Datei bearbeiten:

nano /etc/iscsi/nodes/iqn.2020-07.example.com\:lun1/192.168.1.10\,3260\,1/default

Fügen Sie die folgenden Zeilen hinzu / ändern Sie sie:

node.session.auth.authmethod = CHAP  
node.session.auth.username = iscsi-user
node.session.auth.password = password          
node.session.auth.username_in = iscsi-target
node.session.auth.password_in = secretpass         
node.startup = automatic

Speichern und schließen Sie die Datei und starten Sie dann den iSCSI-Initiatordienst mit dem folgenden Befehl neu:

systemctl restart open-iscsi iscsid

Sie können den Status des Dienstes auch mit dem folgenden Befehl überprüfen:

systemctl status open-iscsi

Sie sollten die folgende Ausgabe erhalten:

? open-iscsi.service - Login to default iSCSI targets
     Loaded: loaded (/lib/systemd/system/open-iscsi.service; enabled; vendor preset: enabled)
     Active: active (exited) since Sat 2020-07-11 07:24:19 UTC; 10s ago
       Docs: man:iscsiadm(8)
             man:iscsid(8)
    Process: 3861 ExecStart=/sbin/iscsiadm -m node --loginall=automatic (code=exited, status=0/SUCCESS)
    Process: 3867 ExecStart=/lib/open-iscsi/activate-storage.sh (code=exited, status=0/SUCCESS)
   Main PID: 3867 (code=exited, status=0/SUCCESS)

Jul 11 07:24:19 initiator systemd[1]: Starting Login to default iSCSI targets...
Jul 11 07:24:19 initiator iscsiadm[3861]: Logging in to [iface: default, target: iqn.2020-07.example.com:lun1, portal: 104.245.33.142,3260] (m>
Jul 11 07:24:19 initiator iscsiadm[3861]: Login to [iface: default, target: iqn.2020-07.example.com:lun1, portal: 104.245.33.142,3260] success>
Jul 11 07:24:19 initiator systemd[1]: Finished Login to default iSCSI targets.

Sie können die iSCSI-Verbindung auch mit dem folgenden Befehl überprüfen:

iscsiadm -m session -o show

Sie sollten die folgende Ausgabe erhalten:

tcp: [2] 192.168.1.10:3260,1 iqn.2020-07.example.com:lun1 (non-flash)

Sie können auch das vom iSCSI-Ziel gemeinsam genutzte Speichergerät mit dem folgenden Befehl verifizieren:

lsblk

Sie sollten in der folgenden Ausgabe das gemeinsam genutzte Gerät sdb sehen:

NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda      8:0    0   80G  0 disk 
??sda1   8:1    0   80G  0 part /
sdb      8:16   0 1000M  0 disk

Erstellen eines Dateisystems auf einem gemeinsam genutzten Gerät

Um das gemeinsam genutzte Gerät auf dem iSCSI-Initiator zu verwenden, müssen Sie ein Dateisystem auf dem gemeinsam genutzten Gerät (sdb) erstellen und es mounten, um dieses Gerät nutzbar zu machen.

Erstellen Sie zunächst ein Dateisystem auf dem freigegebenen Gerät (sdb) mit folgendem Befehl:

fdisk /dev/sdb

Beantworten Sie alle Fragen wie unten gezeigt, um ein Dateisystem zu erstellen:

Welcome to fdisk (util-linux 2.34).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

Device does not contain a recognized partition table.
Created a new DOS disklabel with disk identifier 0x9743ddcf.

Command (m for help): n
Partition type
   p   primary (0 primary, 0 extended, 4 free)
   e   extended (container for logical partitions)
Select (default p): 

Using default response p.
Partition number (1-4, default 1): 
First sector (2048-2047999, default 2048): 
Last sector, +/-sectors or +/-size{K,M,G,T,P} (2048-2047999, default 2047999): 

Created a new partition 1 of type 'Linux' and of size 999 MiB.

Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.

Als nächstes formatieren Sie die Partition mit dem folgenden Befehl:

mkfs.ext4 /dev/sdb1

Sie sollten die folgende Ausgabe erhalten:

mke2fs 1.45.5 (07-Jan-2020)
Creating filesystem with 255744 4k blocks and 64000 inodes
Filesystem UUID: e7f06605-a0f5-41e1-b1b2-e85bd7a2d6a3
Superblock backups stored on blocks: 
	32768, 98304, 163840, 229376

Allocating group tables: done                            
Writing inode tables: done                            
Creating journal (4096 blocks): done
Writing superblocks and filesystem accounting information: done

Mounten Sie anschließend die Partition mit dem folgenden Befehl in das Verzeichnis /mnt:

mount /dev/sdb1 /mnt

Sie können nun die eingehängte Partition mit dem folgenden Befehl überprüfen:

df -h

Sie sollten die folgende Ausgabe erhalten:

Filesystem      Size  Used Avail Use% Mounted on
udev            981M     0  981M   0% /dev
tmpfs           199M  588K  199M   1% /run
/dev/sda1        79G  1.8G   74G   3% /
tmpfs           994M     0  994M   0% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs           994M     0  994M   0% /sys/fs/cgroup
tmpfs           199M     0  199M   0% /run/user/0
/dev/sdb1       968M  2.5M  899M   1% /mnt

Schlussfolgerung

In der obigen Anleitung haben Sie gelernt, wie Sie iSCSI-Ziel und Initiator auf einem Ubuntu 20.04-Server einrichten. Sie haben auch gelernt, wie Sie ein Gerät auf dem Zielserver freigeben und über den Initiator darauf zugreifen können. Wenn Sie Fragen haben, können Sie mich gerne fragen.

Das könnte dich auch interessieren …