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.